CMakeLists.txt 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  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 2)
  15. set(LIBROCKET_VERSION_PATCH 1)
  16. set(PROJECT_VERSION ${LIBROCKET_VERSION_MAJOR}.${LIBROCKET_VERSION_MINOR}.${LIBROCKET_VERSION_PATCH})
  17. # Search in the 'cmake' directory for additional CMake modules.
  18. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
  19. set(CMAKE_DEBUG_POSTFIX "_d")
  20. #===================================
  21. # Environment tests ================
  22. #===================================
  23. include(TestForANSIForScope)
  24. include(TestForANSIStreamHeaders)
  25. include(TestForSTDNamespace)
  26. #===================================
  27. # Build options ====================
  28. #===================================
  29. if(NOT CMAKE_BUILD_TYPE)
  30. set(CMAKE_BUILD_TYPE Release CACHE STRING
  31. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  32. FORCE)
  33. endif()
  34. option(BUILD_SHARED_LIBS "Build shared libraries" ON)
  35. option(BUILD_PYTHON_BINDINGS "Build python bindings" OFF)
  36. option(BUILD_SAMPLES "Build samples" OFF)
  37. if(NOT BUILD_SHARED_LIBS)
  38. add_definitions(-DSTATIC_LIB)
  39. endif()
  40. #on windows, check for VC10 and fix the multiple compile target issue.
  41. IF(WIN32)
  42. if(MSVC)
  43. if(${MSVC_VERSION} STREQUAL 1600 OR ${MSVC_VERSION} STRGREATER 1600)
  44. message("Visual Studio 2010 (${MSVC_VERSION}) build fix at play (/FORCE:MULTIPLE)")
  45. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE")
  46. endif()
  47. endif()
  48. ENDIF(WIN32)
  49. #===================================
  50. # Find dependencies ================
  51. #===================================
  52. # FreeType
  53. find_package(Freetype REQUIRED)
  54. if(FREETYPE_FOUND)
  55. include_directories(${FREETYPE_INCLUDE_DIRS})
  56. link_directories(${FREETYPE_LINK_DIRS})
  57. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARY})
  58. endif()
  59. mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARY FREETYPE_LINK_DIRECTORIES)
  60. # Boost and Python
  61. if(BUILD_PYTHON_BINDINGS)
  62. find_package(PythonInterp REQUIRED)
  63. find_package(PythonLibs REQUIRED)
  64. execute_process(
  65. COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))"
  66. OUTPUT_VARIABLE PYTHON_INSTDIR
  67. OUTPUT_STRIP_TRAILING_WHITESPACE
  68. )
  69. if(PYTHONLIBS_FOUND)
  70. include_directories(${PYTHON_INCLUDE_DIR})
  71. endif()
  72. #set(Boost_USE_STATIC_LIBS OFF)
  73. #set(Boost_USE_MULTITHREADED ON)
  74. find_package(Boost 1.40.0 COMPONENTS python REQUIRED)
  75. if(Boost_FOUND)
  76. include_directories(${Boost_INCLUDE_DIR})
  77. list(APPEND PY_BINDINGS_LINK_LIBS ${Boost_LIBRARIES})
  78. endif()
  79. endif()
  80. #===================================
  81. # Setup paths ======================
  82. #===================================
  83. set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..)
  84. include_directories(
  85. ${PROJECT_SOURCE_DIR}/Include
  86. )
  87. # Include list of source files
  88. include(FileList)
  89. #===================================
  90. # Build libraries ==================
  91. #===================================
  92. set(LIBRARIES Core Controls Debugger)
  93. foreach(library ${LIBRARIES})
  94. set(NAME Rocket${library})
  95. add_library(${NAME} ${${library}_SRC_FILES}
  96. ${${library}_HDR_FILES}
  97. ${${library}_PUB_HDR_FILES}
  98. )
  99. set_target_properties(${NAME} PROPERTIES
  100. VERSION ${PROJECT_VERSION}
  101. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  102. )
  103. if(APPLE)
  104. set_target_properties(${NAME} PROPERTIES
  105. OSX_ARCHITECTURES "i386;x86_64;"
  106. )
  107. endif()
  108. install(TARGETS ${NAME}
  109. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  110. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  111. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  112. )
  113. endforeach(library)
  114. # Build python bindings
  115. if(BUILD_PYTHON_BINDINGS)
  116. set(LIBRARIES core controls)
  117. foreach(library ${LIBRARIES})
  118. set(NAME _rocket${library})
  119. add_library(${NAME} ${Py${library}_SRC_FILES}
  120. ${Py${library}_HDR_FILES}
  121. ${Py${library}_PUB_HDR_FILES}
  122. )
  123. set_target_properties(${NAME} PROPERTIES PREFIX "")
  124. install(TARGETS ${NAME}
  125. LIBRARY DESTINATION ${PYTHON_INSTDIR}
  126. )
  127. endforeach(library)
  128. endif()
  129. #===================================
  130. # Link libraries ===================
  131. #===================================
  132. target_link_libraries(RocketCore ${CORE_LINK_LIBS})
  133. target_link_libraries(RocketControls RocketCore)
  134. target_link_libraries(RocketDebugger RocketCore)
  135. if(BUILD_PYTHON_BINDINGS)
  136. target_link_libraries(_rocketcore RocketCore ${PY_BINDINGS_LINK_LIBS})
  137. target_link_libraries(_rocketcontrols RocketControls ${PY_BINDINGS_LINK_LIBS})
  138. endif()
  139. #===================================
  140. # Build samples ====================
  141. #===================================
  142. # Build and link the samples
  143. macro(bl_sample NAME)
  144. if (WIN32)
  145. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  146. elseif(APPLE)
  147. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  148. else()
  149. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  150. endif()
  151. if (APPLE)
  152. # We only support i386 for the samples as it still uses Carbon
  153. set_target_properties(${NAME} PROPERTIES OSX_ARCHITECTURES "i386;" )
  154. endif()
  155. target_link_libraries(${NAME} ${ARGN})
  156. endmacro()
  157. if(BUILD_SAMPLES)
  158. include(SampleFileList)
  159. set(samples treeview customlog drag loaddocument)
  160. set(tutorials template datagrid datagrid_tree tutorial_drag)
  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 CACHE PATH "path to samples dir")
  191. # The samples and tutorials 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 ${CMAKE_INSTALL_LIBDIR}
  201. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  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 the tutorials
  213. foreach(tutorial ${tutorials})
  214. bl_sample(${tutorial} ${sample_LIBRARIES})
  215. # The tutorials always set this as their current working directory
  216. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/tutorial/${tutorial})
  217. install(TARGETS ${tutorial}
  218. RUNTIME DESTINATION ${SAMPLES_DIR}/${tutorial}
  219. BUNDLE DESTINATION ${SAMPLES_DIR})
  220. endforeach()
  221. # Build and install invaders sample
  222. bl_sample(invaders ${sample_LIBRARIES})
  223. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  224. install(TARGETS invaders
  225. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  226. BUNDLE DESTINATION ${SAMPLES_DIR})
  227. endif()
  228. #===================================
  229. # Installation =====================
  230. #===================================
  231. if(BUILD_PYTHON_BINDINGS)
  232. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  233. DESTINATION ${PYTHON_INSTDIR}
  234. )
  235. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  236. DESTINATION include
  237. )
  238. else()
  239. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  240. DESTINATION include
  241. PATTERN "Python" EXCLUDE
  242. )
  243. endif()
  244. if(BUILD_SAMPLES)
  245. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/template/data
  246. DESTINATION ${SAMPLES_DIR}/tutorial/template
  247. )
  248. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid/data
  249. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid
  250. )
  251. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid_tree/data
  252. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid_tree
  253. )
  254. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/tutorial_drag/data
  255. DESTINATION ${SAMPLES_DIR}/tutorial/tutorial_drag
  256. )
  257. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  258. DESTINATION ${SAMPLES_DIR}/basic/treeview
  259. )
  260. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  261. DESTINATION ${SAMPLES_DIR}/basic/drag
  262. )
  263. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  264. DESTINATION ${SAMPLES_DIR}/invaders
  265. )
  266. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  267. DESTINATION ${SAMPLES_DIR}
  268. )
  269. endif()