CMakeLists.txt 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. #===================================
  2. # Build script for libRocket =======
  3. #===================================
  4. # We use the new OSX_ARCHITECTURES property
  5. # and GNUInstallDirs module
  6. cmake_minimum_required(VERSION 2.8.5)
  7. if(COMMAND cmake_policy)
  8. cmake_policy(SET CMP0015 NEW)
  9. endif(COMMAND cmake_policy)
  10. project(libRocket C CXX)
  11. # paths
  12. include(GNUInstallDirs)
  13. set(LIBROCKET_VERSION_MAJOR 1)
  14. set(LIBROCKET_VERSION_MINOR 3)
  15. set(LIBROCKET_VERSION_PATCH 0)
  16. set(LIBROCKET_VERSION_TWEAK 0)
  17. set(PROJECT_VERSION ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH}.${LIBROCKET_VERSION_TWEAK})
  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 2 REQUIRED)
  64. find_package(PythonLibs 2 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 ${CMAKE_INSTALL_LIBDIR}
  111. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  112. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  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(tutorials template datagrid datagrid_tree tutorial_drag)
  162. set(sample_LIBRARIES
  163. shell
  164. RocketCore
  165. RocketControls
  166. RocketDebugger
  167. )
  168. # Find OpenGL
  169. find_package(OpenGL REQUIRED)
  170. if(OPENGL_FOUND)
  171. include_directories(${OPENGL_INCLUDE_DIR})
  172. list(APPEND sample_LIBRARIES ${OPENGL_LIBRARIES})
  173. endif()
  174. # Set up required system libraries
  175. if(WIN32)
  176. list(APPEND samples directx)
  177. list(APPEND sample_LIBRARIES d3d9 d3dx9)
  178. elseif(APPLE)
  179. include(FindCarbon)
  180. find_package(Carbon REQUIRED)
  181. if (Carbon_FOUND)
  182. include_directories(${Carbon_INCLUDE_DIR})
  183. list(APPEND sample_LIBRARIES ${Carbon_LIBRARIES})
  184. endif()
  185. else()
  186. find_package(X11 REQUIRED)
  187. if (X11_FOUND)
  188. list(APPEND sample_LIBRARIES ${X11_LIBRARIES})
  189. endif()
  190. endif()
  191. set(SAMPLES_DIR opt/Rocket/Samples CACHE PATH "path to samples dir")
  192. # The samples and tutorials use the shell library
  193. include_directories(${PROJECT_SOURCE_DIR}/Samples/shell/include)
  194. # Build and install sample shell library
  195. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  196. if (APPLE)
  197. # We only support i386 for the samples as it still uses Carbon
  198. set_target_properties(shell PROPERTIES OSX_ARCHITECTURES "i386;")
  199. endif()
  200. install(TARGETS shell
  201. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  202. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  203. )
  204. # Build and install the basic samples
  205. foreach(sample ${samples})
  206. bl_sample(${sample} ${sample_LIBRARIES})
  207. # The samples always set this as their current working directory
  208. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  209. install(TARGETS ${sample}
  210. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  211. BUNDLE DESTINATION ${SAMPLES_DIR})
  212. endforeach()
  213. # Build and install the tutorials
  214. foreach(tutorial ${tutorials})
  215. bl_sample(${tutorial} ${sample_LIBRARIES})
  216. # The tutorials always set this as their current working directory
  217. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/tutorial/${tutorial})
  218. install(TARGETS ${tutorial}
  219. RUNTIME DESTINATION ${SAMPLES_DIR}/${tutorial}
  220. BUNDLE DESTINATION ${SAMPLES_DIR})
  221. endforeach()
  222. # Build and install invaders sample
  223. bl_sample(invaders ${sample_LIBRARIES})
  224. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  225. install(TARGETS invaders
  226. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  227. BUNDLE DESTINATION ${SAMPLES_DIR})
  228. endif()
  229. #===================================
  230. # Installation =====================
  231. #===================================
  232. if(BUILD_PYTHON_BINDINGS)
  233. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  234. DESTINATION ${PYTHON_INSTDIR}
  235. )
  236. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  237. DESTINATION include
  238. )
  239. else()
  240. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  241. DESTINATION include
  242. PATTERN "Python" EXCLUDE
  243. )
  244. endif()
  245. if(BUILD_SAMPLES)
  246. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/template/data
  247. DESTINATION ${SAMPLES_DIR}/tutorial/template
  248. )
  249. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid/data
  250. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid
  251. )
  252. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid_tree/data
  253. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid_tree
  254. )
  255. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/tutorial_drag/data
  256. DESTINATION ${SAMPLES_DIR}/tutorial/tutorial_drag
  257. )
  258. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  259. DESTINATION ${SAMPLES_DIR}/basic/treeview
  260. )
  261. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  262. DESTINATION ${SAMPLES_DIR}/basic/drag
  263. )
  264. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  265. DESTINATION ${SAMPLES_DIR}/invaders
  266. )
  267. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  268. DESTINATION ${SAMPLES_DIR}
  269. )
  270. endif()