CMakeLists.txt 8.1 KB

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