CMakeLists.txt 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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. #===================================
  42. # Find dependencies ================
  43. #===================================
  44. # FreeType
  45. find_package(Freetype REQUIRED)
  46. if(FREETYPE_FOUND)
  47. include_directories(${FREETYPE_INCLUDE_DIRS})
  48. link_directories(${FREETYPE_LINK_DIRS})
  49. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARY})
  50. endif()
  51. mark_as_advanced(FREETYPE_INCLUDE_DIRS FREETYPE_LIBRARY FREETYPE_LINK_DIRECTORIES)
  52. # Boost and Python
  53. if(BUILD_PYTHON_BINDINGS)
  54. find_package(PythonInterp REQUIRED)
  55. find_package(PythonLibs REQUIRED)
  56. execute_process(
  57. COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))"
  58. OUTPUT_VARIABLE PYTHON_INSTDIR
  59. OUTPUT_STRIP_TRAILING_WHITESPACE
  60. )
  61. if(PYTHONLIBS_FOUND)
  62. include_directories(${PYTHON_INCLUDE_DIR})
  63. endif()
  64. #set(Boost_USE_STATIC_LIBS OFF)
  65. #set(Boost_USE_MULTITHREADED ON)
  66. find_package(Boost 1.40.0 COMPONENTS python REQUIRED)
  67. if(Boost_FOUND)
  68. include_directories(${Boost_INCLUDE_DIR})
  69. list(APPEND PY_BINDINGS_LINK_LIBS ${Boost_LIBRARIES})
  70. endif()
  71. endif()
  72. #===================================
  73. # Setup paths ======================
  74. #===================================
  75. set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..)
  76. include_directories(
  77. ${PROJECT_SOURCE_DIR}/Include
  78. )
  79. # Include list of source files
  80. include(FileList)
  81. #===================================
  82. # Build libraries ==================
  83. #===================================
  84. set(LIBRARIES Core Controls Debugger)
  85. foreach(library ${LIBRARIES})
  86. set(NAME Rocket${library})
  87. add_library(${NAME} ${${library}_SRC_FILES}
  88. ${${library}_HDR_FILES}
  89. ${${library}_PUB_HDR_FILES}
  90. )
  91. set_target_properties(${NAME} PROPERTIES
  92. VERSION ${PROJECT_VERSION}
  93. SOVERSION ${LIBROCKET_VERSION_MAJOR}
  94. )
  95. if(APPLE)
  96. set_target_properties(${NAME} PROPERTIES
  97. OSX_ARCHITECTURES "i386;x86_64;"
  98. )
  99. endif()
  100. install(TARGETS ${NAME}
  101. LIBRARY DESTINATION lib
  102. ARCHIVE DESTINATION lib
  103. RUNTIME DESTINATION bin
  104. )
  105. endforeach(library)
  106. # Build python bindings
  107. if(BUILD_PYTHON_BINDINGS)
  108. set(LIBRARIES core controls)
  109. foreach(library ${LIBRARIES})
  110. set(NAME _rocket${library})
  111. add_library(${NAME} ${Py${library}_SRC_FILES}
  112. ${Py${library}_HDR_FILES}
  113. ${Py${library}_PUB_HDR_FILES}
  114. )
  115. set_target_properties(${NAME} PROPERTIES PREFIX "")
  116. install(TARGETS ${NAME}
  117. LIBRARY DESTINATION ${PYTHON_INSTDIR}
  118. )
  119. endforeach(library)
  120. endif()
  121. #===================================
  122. # Link libraries ===================
  123. #===================================
  124. target_link_libraries(RocketCore ${CORE_LINK_LIBS})
  125. target_link_libraries(RocketControls RocketCore)
  126. target_link_libraries(RocketDebugger RocketCore)
  127. if(BUILD_PYTHON_BINDINGS)
  128. target_link_libraries(_rocketcore RocketCore ${PY_BINDINGS_LINK_LIBS})
  129. target_link_libraries(_rocketcontrols RocketControls ${PY_BINDINGS_LINK_LIBS})
  130. endif()
  131. #===================================
  132. # Build samples ====================
  133. #===================================
  134. # Build and link the samples
  135. macro(bl_sample NAME)
  136. if (WIN32)
  137. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  138. elseif(APPLE)
  139. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  140. else()
  141. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  142. endif()
  143. if (APPLE)
  144. # We only support i386 for the samples as it still uses Carbon
  145. set_target_properties(${NAME} PROPERTIES OSX_ARCHITECTURES "i386;" )
  146. endif()
  147. target_link_libraries(${NAME} ${ARGN})
  148. endmacro()
  149. if(BUILD_SAMPLES)
  150. include(SampleFileList)
  151. set(samples treeview customlog drag loaddocument)
  152. set(sample_LIBRARIES
  153. shell
  154. RocketCore
  155. RocketControls
  156. RocketDebugger
  157. )
  158. # Find OpenGL
  159. find_package(OpenGL REQUIRED)
  160. if(OPENGL_FOUND)
  161. include_directories(${OPENGL_INCLUDE_DIR})
  162. list(APPEND sample_LIBRARIES ${OPENGL_LIBRARIES})
  163. endif()
  164. # Set up required system libraries
  165. if(WIN32)
  166. list(APPEND samples directx)
  167. list(APPEND sample_LIBRARIES d3d9 d3dx9)
  168. elseif(APPLE)
  169. include(FindCarbon)
  170. find_package(Carbon REQUIRED)
  171. if (Carbon_FOUND)
  172. include_directories(${Carbon_INCLUDE_DIR})
  173. list(APPEND sample_LIBRARIES ${Carbon_LIBRARIES})
  174. endif()
  175. else()
  176. find_package(X11 REQUIRED)
  177. if (X11_FOUND)
  178. list(APPEND sample_LIBRARIES ${X11_LIBRARIES})
  179. endif()
  180. endif()
  181. set(SAMPLES_DIR opt/Rocket/Samples)
  182. # The samples use the shell library
  183. include_directories(${PROJECT_SOURCE_DIR}/Samples/shell/include)
  184. # Build and install sample shell library
  185. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  186. if (APPLE)
  187. # We only support i386 for the samples as it still uses Carbon
  188. set_target_properties(shell PROPERTIES OSX_ARCHITECTURES "i386;")
  189. endif()
  190. install(TARGETS shell
  191. LIBRARY DESTINATION lib
  192. ARCHIVE DESTINATION lib
  193. )
  194. # Build and install the basic samples
  195. foreach(sample ${samples})
  196. bl_sample(${sample} ${sample_LIBRARIES})
  197. # The samples always set this as their current working directory
  198. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  199. install(TARGETS ${sample}
  200. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  201. BUNDLE DESTINATION ${SAMPLES_DIR})
  202. endforeach()
  203. # Build and install invaders sample
  204. bl_sample(invaders ${sample_LIBRARIES})
  205. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  206. install(TARGETS invaders
  207. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  208. BUNDLE DESTINATION ${SAMPLES_DIR})
  209. endif()
  210. #===================================
  211. # Installation =====================
  212. #===================================
  213. if(BUILD_PYTHON_BINDINGS)
  214. install(FILES ${PROJECT_SOURCE_DIR}/bin/rocket.py
  215. DESTINATION ${PYTHON_INSTDIR}
  216. )
  217. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  218. DESTINATION include
  219. )
  220. else()
  221. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/Rocket
  222. DESTINATION include
  223. PATTERN "Python" EXCLUDE
  224. )
  225. endif()
  226. if(BUILD_SAMPLES)
  227. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  228. DESTINATION ${SAMPLES_DIR}/basic/treeview
  229. )
  230. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  231. DESTINATION ${SAMPLES_DIR}/basic/drag
  232. )
  233. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  234. DESTINATION ${SAMPLES_DIR}/invaders
  235. )
  236. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  237. DESTINATION ${SAMPLES_DIR}
  238. )
  239. endif()