CMakeLists.txt 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. #===================================
  2. # Build script for libRocket =======
  3. #===================================
  4. if(APPLE)
  5. # We use the new OSX_ARCHITECTURES property
  6. cmake_minimum_required(VERSION 2.8.1)
  7. else()
  8. cmake_minimum_required(VERSION 2.6)
  9. endif()
  10. if(COMMAND cmake_policy)
  11. cmake_policy(SET CMP0015 NEW)
  12. endif(COMMAND cmake_policy)
  13. project(libRocket C CXX)
  14. set(LIBROCKET_VERSION_MAJOR 1)
  15. set(LIBROCKET_VERSION_MINOR 2)
  16. set(LIBROCKET_VERSION_PATCH 1)
  17. set(PROJECT_VERSION ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH})
  18. # Search in the 'cmake' directory for additional CMake modules.
  19. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  20. set(CMAKE_DEBUG_POSTFIX "_d")
  21. #===================================
  22. # Environment tests ================
  23. #===================================
  24. include(TestForANSIForScope)
  25. include(TestForANSIStreamHeaders)
  26. include(TestForSTDNamespace)
  27. #===================================
  28. # Build options ====================
  29. #===================================
  30. if(NOT CMAKE_BUILD_TYPE)
  31. set(CMAKE_BUILD_TYPE Release CACHE STRING
  32. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  33. FORCE)
  34. endif()
  35. option(BUILD_SHARED_LIBS "Build shared libraries" ON)
  36. option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
  37. option(BUILD_SAMPLES "Build samples" OFF)
  38. if(NOT BUILD_SHARED_LIBS)
  39. add_definitions(-DSTATIC_LIB)
  40. endif()
  41. #on windows, check for VC10 and fix the multiple compile target issue.
  42. IF(WIN32)
  43. if(MSVC)
  44. if(${MSVC_VERSION} STREQUAL 1600 OR ${MSVC_VERSION} STRGREATER 1600)
  45. message("Visual Studio 2010 (${MSVC_VERSION}) build fix at play (/FORCE:MULTIPLE)")
  46. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE")
  47. endif()
  48. endif()
  49. ENDIF(WIN32)
  50. #===================================
  51. # Find dependencies ================
  52. #===================================
  53. # FreeType
  54. find_package(Freetype REQUIRED)
  55. if(FREETYPE_FOUND)
  56. include_directories(${FREETYPE_INCLUDE_DIRS})
  57. link_directories(${FREETYPE_LINK_DIRS})
  58. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARY})
  59. endif()
  60. mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARY FREETYPE_LINK_DIRECTORIES)
  61. # Boost and Python
  62. if(BUILD_PYTHON_BINDINGS)
  63. find_package(PythonInterp REQUIRED)
  64. find_package(PythonLibs REQUIRED)
  65. execute_process(
  66. COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))"
  67. OUTPUT_VARIABLE PYTHON_INSTDIR
  68. OUTPUT_STRIP_TRAILING_WHITESPACE
  69. )
  70. if(PYTHONLIBS_FOUND)
  71. include_directories(${PYTHON_INCLUDE_DIR})
  72. endif()
  73. #set(Boost_USE_STATIC_LIBS OFF)
  74. #set(Boost_USE_MULTITHREADED ON)
  75. find_package(Boost 1.40.0 COMPONENTS python REQUIRED)
  76. if(Boost_FOUND)
  77. include_directories(${Boost_INCLUDE_DIR})
  78. list(APPEND PY_BINDINGS_LINK_LIBS ${Boost_LIBRARIES})
  79. endif()
  80. endif()
  81. #===================================
  82. # Setup paths ======================
  83. #===================================
  84. set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..)
  85. include_directories(
  86. ${PROJECT_SOURCE_DIR}/Include
  87. )
  88. # Include list of source files
  89. include(FileList)
  90. #===================================
  91. # Build libraries ==================
  92. #===================================
  93. set(LIBRARIES Core Controls Debugger)
  94. foreach(library ${LIBRARIES})
  95. set(NAME Rocket${library})
  96. add_library(${NAME} ${${library}_SRC_FILES}
  97. ${${library}_HDR_FILES}
  98. ${${library}_PUB_HDR_FILES}
  99. )
  100. set_target_properties(${NAME} PROPERTIES
  101. VERSION ${PROJECT_VERSION}
  102. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  103. )
  104. if(APPLE)
  105. set_target_properties(${NAME} PROPERTIES
  106. OSX_ARCHITECTURES "i386;x86_64;"
  107. )
  108. endif()
  109. install(TARGETS ${NAME}
  110. LIBRARY DESTINATION lib
  111. ARCHIVE DESTINATION lib
  112. RUNTIME DESTINATION bin
  113. )
  114. endforeach(library)
  115. # Build python bindings
  116. if(BUILD_PYTHON_BINDINGS)
  117. set(LIBRARIES core controls)
  118. foreach(library ${LIBRARIES})
  119. set(NAME _rocket${library})
  120. add_library(${NAME} ${Py${library}_SRC_FILES}
  121. ${Py${library}_HDR_FILES}
  122. ${Py${library}_PUB_HDR_FILES}
  123. )
  124. set_target_properties(${NAME} PROPERTIES PREFIX "")
  125. install(TARGETS ${NAME}
  126. LIBRARY DESTINATION ${PYTHON_INSTDIR}
  127. )
  128. endforeach(library)
  129. endif()
  130. #===================================
  131. # Link libraries ===================
  132. #===================================
  133. target_link_libraries(RocketCore ${CORE_LINK_LIBS})
  134. target_link_libraries(RocketControls RocketCore)
  135. target_link_libraries(RocketDebugger RocketCore)
  136. if(BUILD_PYTHON_BINDINGS)
  137. target_link_libraries(_rocketcore RocketCore ${PY_BINDINGS_LINK_LIBS})
  138. target_link_libraries(_rocketcontrols RocketControls ${PY_BINDINGS_LINK_LIBS})
  139. endif()
  140. #===================================
  141. # Build samples ====================
  142. #===================================
  143. # Build and link the samples
  144. macro(bl_sample NAME)
  145. if (WIN32)
  146. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  147. elseif(APPLE)
  148. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  149. else()
  150. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  151. endif()
  152. if (APPLE)
  153. # We only support i386 for the samples as it still uses Carbon
  154. set_target_properties(${NAME} PROPERTIES OSX_ARCHITECTURES "i386;" )
  155. endif()
  156. target_link_libraries(${NAME} ${ARGN})
  157. endmacro()
  158. if(BUILD_SAMPLES)
  159. include(SampleFileList)
  160. set(samples treeview customlog drag loaddocument)
  161. set(sample_LIBRARIES
  162. shell
  163. RocketCore
  164. RocketControls
  165. RocketDebugger
  166. )
  167. # Find OpenGL
  168. find_package(OpenGL REQUIRED)
  169. if(OPENGL_FOUND)
  170. include_directories(${OPENGL_INCLUDE_DIR})
  171. list(APPEND sample_LIBRARIES ${OPENGL_LIBRARIES})
  172. endif()
  173. # Set up required system libraries
  174. if(WIN32)
  175. list(APPEND samples directx)
  176. list(APPEND sample_LIBRARIES d3d9 d3dx9)
  177. elseif(APPLE)
  178. include(FindCarbon)
  179. find_package(Carbon REQUIRED)
  180. if (Carbon_FOUND)
  181. include_directories(${Carbon_INCLUDE_DIR})
  182. list(APPEND sample_LIBRARIES ${Carbon_LIBRARIES})
  183. endif()
  184. else()
  185. find_package(X11 REQUIRED)
  186. if (X11_FOUND)
  187. list(APPEND sample_LIBRARIES ${X11_LIBRARIES})
  188. endif()
  189. endif()
  190. set(SAMPLES_DIR opt/Rocket/Samples)
  191. # The samples use the shell library
  192. include_directories(${PROJECT_SOURCE_DIR}/Samples/shell/include)
  193. # Build and install sample shell library
  194. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  195. if (APPLE)
  196. # We only support i386 for the samples as it still uses Carbon
  197. set_target_properties(shell PROPERTIES OSX_ARCHITECTURES "i386;")
  198. endif()
  199. install(TARGETS shell
  200. LIBRARY DESTINATION lib
  201. ARCHIVE DESTINATION lib
  202. )
  203. # Build and install the basic samples
  204. foreach(sample ${samples})
  205. bl_sample(${sample} ${sample_LIBRARIES})
  206. # The samples always set this as their current working directory
  207. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  208. install(TARGETS ${sample}
  209. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  210. BUNDLE DESTINATION ${SAMPLES_DIR})
  211. endforeach()
  212. # Build and install invaders sample
  213. bl_sample(invaders ${sample_LIBRARIES})
  214. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  215. install(TARGETS invaders
  216. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  217. BUNDLE DESTINATION ${SAMPLES_DIR})
  218. endif()
  219. #===================================
  220. # Installation =====================
  221. #===================================
  222. if(BUILD_PYTHON_BINDINGS)
  223. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  224. DESTINATION ${PYTHON_INSTDIR}
  225. )
  226. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  227. DESTINATION include
  228. )
  229. else()
  230. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  231. DESTINATION include
  232. PATTERN "Python" EXCLUDE
  233. )
  234. endif()
  235. if(BUILD_SAMPLES)
  236. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  237. DESTINATION ${SAMPLES_DIR}/basic/treeview
  238. )
  239. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  240. DESTINATION ${SAMPLES_DIR}/basic/drag
  241. )
  242. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  243. DESTINATION ${SAMPLES_DIR}/invaders
  244. )
  245. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  246. DESTINATION ${SAMPLES_DIR}
  247. )
  248. endif()