CMakeLists.txt 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. #===================================
  2. # Build script for RmlUi ===========
  3. #===================================
  4. cmake_minimum_required(VERSION 3.1)
  5. if(APPLE)
  6. # This has to be before most other options so CMake properly handles the
  7. # compiler variables, it MUST bebefore the project() definition
  8. if(IOS_PLATFORM)
  9. set(CMAKE_TOOLCHAIN_FILE CMake/Platform/iOS.cmake)
  10. endif(IOS_PLATFORM)
  11. option(BUILD_UNIVERSAL_BINARIES "Build universal binaries for all architectures supported" ON)
  12. if (NOT CMAKE_OSX_ARCHITECTURES AND BUILD_UNIVERSAL_BINARIES)
  13. if(IOS)
  14. # set the architecture for iOS
  15. if (${IOS_PLATFORM} STREQUAL "OS")
  16. set (IOS_ARCH armv6 armv7 armv7s arm64)
  17. set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS")
  18. else (${IOS_PLATFORM} STREQUAL "OS")
  19. set (IOS_ARCH x86_64)
  20. set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS Simulator")
  21. endif (${IOS_PLATFORM} STREQUAL "OS")
  22. else(IOS)
  23. # set the architectures for OS X
  24. set (OSXI_ARCH x86_64)
  25. set (CMAKE_OSX_ARCHITECTURES ${OSXI_ARCH} CACHE STRING "Build architecture for OS X universal binaries")
  26. endif(IOS)
  27. endif (NOT CMAKE_OSX_ARCHITECTURES AND BUILD_UNIVERSAL_BINARIES)
  28. endif(APPLE)
  29. if(COMMAND cmake_policy)
  30. cmake_policy(SET CMP0015 NEW)
  31. endif(COMMAND cmake_policy)
  32. # Enable the use of MACOSX_RPATH by default for CMake v3.0+; this effectively
  33. # allows plug 'n' play functionality, so to speak -- the resulting shared
  34. # library files can simply be copied over into the end-user's application
  35. # bundle or framework bundle. No mucking around with install_name_tool.
  36. #
  37. # See also:
  38. # cmake --help-policy cmp0042
  39. # http://www.kitware.com/blog/home/post/510
  40. if(POLICY CMP0042)
  41. cmake_policy(SET CMP0042 NEW)
  42. endif(POLICY CMP0042)
  43. if (POLICY CMP0072)
  44. cmake_policy (SET CMP0072 NEW)
  45. endif(POLICY CMP0072)
  46. if(POLICY CMP0074)
  47. cmake_policy(SET CMP0074 NEW)
  48. endif(POLICY CMP0074)
  49. project(RmlUi LANGUAGES C CXX VERSION 5.0)
  50. set(RMLUI_VERSION_RELEASE false)
  51. if(RMLUI_VERSION_RELEASE)
  52. set(RMLUI_VERSION_SUFFIX "")
  53. else()
  54. set(RMLUI_VERSION_SUFFIX "-dev")
  55. endif()
  56. set(RMLUI_VERSION_SHORT ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}${RMLUI_VERSION_SUFFIX})
  57. list(APPEND CORE_PRIVATE_DEFS RMLUI_VERSION="${RMLUI_VERSION_SHORT}")
  58. if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
  59. option(BUILD_TESTING "" OFF)
  60. include(CTest)
  61. if(BUILD_TESTING)
  62. set(RMLUI_TESTS_ENABLED ON)
  63. set(VISUAL_TESTS_RML_DIRECTORIES "" CACHE PATH "Specify additional directories containing *.rml test documents for VisualTests. Separate multiple directories by comma.")
  64. set(VISUAL_TESTS_COMPARE_DIRECTORY "" CACHE PATH "Set the input directory for screenshot comparison performed by VisualTests.")
  65. set(VISUAL_TESTS_CAPTURE_DIRECTORY "" CACHE PATH "Set the output directory for screenshots generated by VisualTests.")
  66. endif()
  67. endif()
  68. # paths
  69. include(GNUInstallDirs)
  70. # Search in the 'cmake' directory for additional CMake modules.
  71. list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMake;${PROJECT_SOURCE_DIR}/CMake/Modules)
  72. #===================================
  73. # Environment tests ================
  74. #===================================
  75. include(TestForANSIForScope)
  76. include(TestForANSIStreamHeaders)
  77. include(TestForSTDNamespace)
  78. #===================================
  79. # Provide hints as to where depends=
  80. # might be found =
  81. #===================================
  82. if(NOT DEFINED ENV{FREETYPE_DIR})
  83. set(ENV{FREETYPE_DIR} "${PROJECT_SOURCE_DIR}/Dependencies")
  84. endif()
  85. if(NOT DEFINED ENV{LUA_DIR})
  86. set(ENV{LUA_DIR} "${PROJECT_SOURCE_DIR}/Dependencies")
  87. endif()
  88. if(NOT DEFINED ENV{SDL2DIR})
  89. set(ENV{SDL2DIR} "${PROJECT_SOURCE_DIR}/Dependencies")
  90. endif()
  91. if(NOT DEFINED ENV{SDL2_IMAGE_DIR})
  92. set(ENV{SDL2_IMAGE_DIR} "${PROJECT_SOURCE_DIR}/Dependencies")
  93. endif()
  94. if(NOT DEFINED ENV{SFML_ROOT})
  95. set(ENV{SFML_ROOT} "${PROJECT_SOURCE_DIR}/Dependencies")
  96. endif()
  97. if(NOT DEFINED ENV{TRACY_DIR})
  98. set(ENV{TRACY_DIR} "${PROJECT_SOURCE_DIR}/Dependencies")
  99. endif()
  100. if(NOT DEFINED ENV{RLOTTIE_DIR})
  101. set(ENV{RLOTTIE_DIR} "${PROJECT_SOURCE_DIR}/Dependencies/rlottie")
  102. endif()
  103. if(NOT DEFINED ENV{LUNASVG_DIR})
  104. set(ENV{LUNASVG_DIR} "${PROJECT_SOURCE_DIR}/Dependencies/lunasvg")
  105. endif()
  106. #===================================
  107. # Plaform specific global hacks ====
  108. #===================================
  109. if(APPLE)
  110. # Disables naked builtins from AssertMacros.h which
  111. # This prevents naming collisions such as those from the check()
  112. # function macro with LuaType::check
  113. add_definitions(-D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0)
  114. endif(APPLE)
  115. #===================================
  116. # Build options ====================
  117. #===================================
  118. if(NOT CMAKE_BUILD_TYPE)
  119. set(CMAKE_BUILD_TYPE Release CACHE STRING
  120. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  121. FORCE)
  122. endif()
  123. if(NOT IOS)
  124. option(BUILD_SHARED_LIBS "Build shared (dynamic) libraries" ON)
  125. endif(NOT IOS)
  126. option(BUILD_LUA_BINDINGS "Build Lua bindings" OFF)
  127. if(APPLE)
  128. option(BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF)
  129. endif()
  130. option(BUILD_SAMPLES "Build samples" OFF)
  131. set(SAMPLES_BACKEND "auto" CACHE STRING "Backend platform and renderer used for the samples.")
  132. set_property(CACHE SAMPLES_BACKEND PROPERTY STRINGS auto Win32_GL2 X11_GL2 SDL_GL2 SDL_GL3 SDL_SDLrenderer SFML_GL2 GLFW_GL2 GLFW_GL3)
  133. if(SAMPLES_BACKEND STREQUAL "auto")
  134. if(EMSCRIPTEN)
  135. set(SAMPLES_BACKEND SDL_GL3)
  136. elseif(WIN32)
  137. set(SAMPLES_BACKEND Win32_GL2)
  138. elseif(APPLE)
  139. set(SAMPLES_BACKEND SDL_SDLrenderer)
  140. else()
  141. set(SAMPLES_BACKEND X11_GL2)
  142. endif()
  143. endif()
  144. option(MATRIX_ROW_MAJOR "Use row-major matrices. Column-major matrices are used by default." OFF)
  145. if(APPLE)
  146. if(IOS)
  147. if(BUILD_SHARED_LIBS)
  148. message(FATAL_ERROR "BUILD_SHARED_LIBS must be OFF for iOS builds. iOS does not support shared libraries.")
  149. endif(BUILD_SHARED_LIBS)
  150. endif(IOS)
  151. if(BUILD_FRAMEWORK)
  152. if(NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
  153. message(FATAL_ERROR "You should use Xcode generator with BUILD_FRAMEWORK enabled")
  154. endif()
  155. if(NOT BUILD_SHARED_LIBS)
  156. message(FATAL_ERROR "BUILD_SHARED_LIBS must be ON with BUILD_FRAMEWORK enabled")
  157. endif()
  158. endif()
  159. else(APPLE)
  160. if(BUILD_FRAMEWORK)
  161. message(FATAL_ERROR "BUILD_FRAMEWORK is only supported on Mac OS X with the Xcode generator")
  162. endif()
  163. endif(APPLE)
  164. option(NO_FONT_INTERFACE_DEFAULT "Do not include the default font engine in the build. Allows building without the FreeType dependency, but a custom font engine must be created and set." OFF)
  165. if(NO_FONT_INTERFACE_DEFAULT)
  166. list(APPEND CORE_PRIVATE_DEFS RMLUI_NO_FONT_INTERFACE_DEFAULT)
  167. endif()
  168. if(WIN32 AND BUILD_SHARED_LIBS AND BUILD_TESTING)
  169. message(FATAL_ERROR "-- The RmlUi testing framework cannot be built when using shared libraries on Windows. Please disable either BUILD_SHARED_LIBS or BUILD_TESTING.")
  170. endif()
  171. if(EMSCRIPTEN AND BUILD_SHARED_LIBS)
  172. message(FATAL_ERROR "-- Dynamic libraries not supported when using Emscripten. Please disable BUILD_SHARED_LIBS.")
  173. endif()
  174. if(NOT BUILD_SHARED_LIBS)
  175. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_STATIC_LIB)
  176. message("-- Building static libraries. Make sure to #define RMLUI_STATIC_LIB before including RmlUi in your project.")
  177. endif()
  178. option(NO_THIRDPARTY_CONTAINERS "Only use standard library containers." OFF)
  179. if( NO_THIRDPARTY_CONTAINERS )
  180. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_NO_THIRDPARTY_CONTAINERS)
  181. message("-- No third-party containers will be used: Make sure to #define RMLUI_NO_THIRDPARTY_CONTAINERS before including RmlUi in your project.")
  182. endif()
  183. option(CUSTOM_CONFIGURATION "Customize RmlUi configuration files for overriding the default configuration and types." OFF)
  184. set(CUSTOM_CONFIGURATION_FILE "" CACHE STRING "Custom configuration file to be included in place of <RmlUi/Config/Config.h>.")
  185. if( CUSTOM_CONFIGURATION AND CUSTOM_CONFIGURATION_FILE )
  186. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_CUSTOM_CONFIGURATION_FILE="${CUSTOM_CONFIGURATION_FILE}")
  187. message("-- Including ${CUSTOM_CONFIGURATION_FILE} instead of <RmlUi/Config/Config.h>")
  188. endif ()
  189. set(CUSTOM_INCLUDE_DIRS "" CACHE STRING "Extra include directories (use with CUSTOM_CONFIGURATION_FILE).")
  190. if( CUSTOM_CONFIGURATION AND CUSTOM_INCLUDE_DIRS )
  191. include_directories(${CUSTOM_INCLUDE_DIRS})
  192. endif ()
  193. set(CUSTOM_LINK_LIBRARIES "" CACHE STRING "Extra link libraries (use with CUSTOM_CONFIGURATION_FILE).")
  194. if( CUSTOM_CONFIGURATION )
  195. mark_as_advanced( CLEAR CUSTOM_CONFIGURATION_FILE CUSTOM_INCLUDE_DIRS CUSTOM_LINK_LIBRARIES )
  196. else()
  197. mark_as_advanced( FORCE CUSTOM_CONFIGURATION_FILE CUSTOM_INCLUDE_DIRS CUSTOM_LINK_LIBRARIES )
  198. if( CUSTOM_CONFIGURATION_FILE OR CUSTOM_INCLUDE_DIRS OR CUSTOM_LINK_LIBRARIES )
  199. message("-- CUSTOM_CONFIGURATION disabled, but custom configuration variables are set. They will have no effect.")
  200. endif()
  201. endif()
  202. option(ENABLE_TRACY_PROFILING "Enable profiling with Tracy. Source files can be placed in Dependencies/tracy." OFF)
  203. if( ENABLE_TRACY_PROFILING )
  204. find_package(Tracy REQUIRED)
  205. include_directories(${TRACY_INCLUDE_DIR})
  206. if( CMAKE_CONFIGURATION_TYPES )
  207. list(APPEND CMAKE_CONFIGURATION_TYPES Tracy)
  208. list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
  209. set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
  210. "Add the configurations that we need"
  211. FORCE)
  212. set(CMAKE_C_FLAGS_TRACY "${CMAKE_CXX_FLAGS_RELEASE} -DRMLUI_ENABLE_PROFILING")
  213. set(CMAKE_CXX_FLAGS_TRACY "${CMAKE_CXX_FLAGS_RELEASE} -DRMLUI_ENABLE_PROFILING")
  214. set(CMAKE_EXE_LINKER_FLAGS_TRACY "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
  215. set(CMAKE_SHARED_LINKER_FLAGS_TRACY "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
  216. message("-- Tracy profiling enabled in configuration 'Tracy'.")
  217. else()
  218. message("-- Tracy profiling enabled.")
  219. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_ENABLE_PROFILING)
  220. endif()
  221. elseif( CMAKE_CONFIGURATION_TYPES )
  222. list(REMOVE_ITEM CMAKE_CONFIGURATION_TYPES Tracy)
  223. endif()
  224. option(ENABLE_LOTTIE_PLUGIN "Enable plugin for Lottie animations. Requires the rlottie library." OFF)
  225. option(ENABLE_SVG_PLUGIN "Enable plugin for SVG images. Requires the lunasvg library." OFF)
  226. option(DISABLE_RTTI_AND_EXCEPTIONS "Build with rtti and exceptions disabled." OFF)
  227. if(DISABLE_RTTI_AND_EXCEPTIONS)
  228. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_USE_CUSTOM_RTTI)
  229. message("-- C++ RTTI and exceptions will be disabled: Make sure to #define RMLUI_USE_CUSTOM_RTTI before including RmlUi in your project.")
  230. endif()
  231. option(ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" ON)
  232. set(PRECOMPILED_HEADERS_ENABLED OFF)
  233. if (ENABLE_PRECOMPILED_HEADERS AND (CMAKE_VERSION VERSION_LESS 3.16.0))
  234. message("-- Could not enable precompiled headers. Need CMake version 3.16.0 or greater.")
  235. elseif (ENABLE_PRECOMPILED_HEADERS)
  236. set(PRECOMPILED_HEADERS_ENABLED ON)
  237. endif()
  238. option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors." OFF)
  239. mark_as_advanced(WARNINGS_AS_ERRORS)
  240. macro(add_common_target_options NAME)
  241. # C++ language version
  242. if(CMAKE_VERSION VERSION_LESS 3.8.0)
  243. set_target_properties(${NAME} PROPERTIES
  244. CXX_STANDARD 14
  245. CXX_STANDARD_REQUIRED YES
  246. )
  247. else()
  248. target_compile_features(${NAME} PUBLIC cxx_std_14)
  249. endif()
  250. set_target_properties(${NAME} PROPERTIES CXX_EXTENSIONS OFF)
  251. # Compiler warnings
  252. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  253. target_compile_options(${NAME} PRIVATE -Wall -pedantic -Wextra)
  254. if(WARNINGS_AS_ERRORS)
  255. target_compile_options(${NAME} PRIVATE -Werror)
  256. endif()
  257. elseif(MSVC)
  258. target_compile_options(${NAME} PRIVATE /MP /W4 /w44062 /permissive-)
  259. target_compile_definitions(${NAME} PRIVATE _CRT_SECURE_NO_WARNINGS)
  260. if(WARNINGS_AS_ERRORS)
  261. target_compile_options(${NAME} PRIVATE /WX)
  262. endif()
  263. endif()
  264. endmacro()
  265. #===================================
  266. # Setup paths ======================
  267. #===================================
  268. include_directories(
  269. ${PROJECT_SOURCE_DIR}/Include
  270. )
  271. # Include list of source files
  272. include(FileList)
  273. #===================================
  274. # Find dependencies ================
  275. #===================================
  276. # FreeType
  277. if(NOT NO_FONT_INTERFACE_DEFAULT)
  278. if(EMSCRIPTEN)
  279. set(EMSCRIPTEN_FLAGS "${EMSCRIPTEN_FLAGS} -sUSE_FREETYPE=1")
  280. else()
  281. find_package(Freetype REQUIRED)
  282. if(MSVC AND FREETYPE_VERSION_STRING STREQUAL "2.11.0")
  283. message(WARNING "You are using FreeType version 2.11.0 which introduced an issue that causes a crash on startup on some of the samples. Please avoid this version specifically.")
  284. endif()
  285. list(APPEND CORE_LINK_LIBS ${FREETYPE_LIBRARIES})
  286. list(APPEND CORE_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS})
  287. endif()
  288. endif()
  289. # Lua
  290. if(BUILD_LUA_BINDINGS)
  291. find_package(Lua REQUIRED)
  292. list(APPEND LUA_BINDINGS_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
  293. list(APPEND LUA_BINDINGS_LINK_LIBS ${LUA_LIBRARIES})
  294. endif()
  295. # rlottie
  296. if( ENABLE_LOTTIE_PLUGIN )
  297. # Try to find the rlottie library.
  298. if(NOT DEFINED rlottie_DIR)
  299. set(rlottie_DIR $ENV{RLOTTIE_DIR})
  300. endif()
  301. list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Dependencies/rlottie/build)
  302. find_package(rlottie CONFIG)
  303. find_path(rlottie_INCLUDE_DIR rlottie.h HINTS ${rlottie_DIR} $ENV{rlottie_DIR} PATH_SUFFIXES inc rlottie/inc )
  304. if(rlottie_FOUND AND rlottie_INCLUDE_DIR)
  305. message("-- Can Lottie plugin be added to RmlCore - yes - rlottie library found")
  306. list(APPEND CORE_LINK_LIBS rlottie::rlottie)
  307. list(APPEND CORE_INCLUDE_DIRS ${rlottie_INCLUDE_DIR})
  308. list(APPEND CORE_PRIVATE_DEFS RMLUI_ENABLE_LOTTIE_PLUGIN)
  309. list(APPEND Core_HDR_FILES ${Lottie_HDR_FILES})
  310. list(APPEND Core_PUB_HDR_FILES ${Lottie_PUB_HDR_FILES})
  311. list(APPEND Core_SRC_FILES ${Lottie_SRC_FILES})
  312. else()
  313. if(rlottie_FOUND)
  314. message(FATAL_ERROR "-- Can Lottie plugin be added to RmlCore - no - rlottie library found - rlottie include directory not found")
  315. elseif(rlottie_INCLUDE_DIR)
  316. message(FATAL_ERROR "-- Can Lottie plugin be added to RmlCore - no - rlottie library not found - rlottie include directory found at ${rlottie_INCLUDE_DIR}")
  317. else()
  318. message(FATAL_ERROR "-- Can Lottie plugin be added to RmlCore - no - rlottie not found")
  319. endif()
  320. endif()
  321. endif()
  322. # lunasvg
  323. if( ENABLE_SVG_PLUGIN )
  324. if(NOT DEFINED LUNASVG_DIR)
  325. set(LUNASVG_DIR $ENV{LUNASVG_DIR})
  326. endif()
  327. message("-- Can SVG plugin be enabled - looking for lunasvg library")
  328. find_package(lunasvg REQUIRED)
  329. list(APPEND CORE_LINK_LIBS ${LUNASVG_LIBRARIES})
  330. list(APPEND CORE_INCLUDE_DIRS ${LUNASVG_INCLUDE_DIR})
  331. list(APPEND CORE_PRIVATE_DEFS RMLUI_ENABLE_SVG_PLUGIN)
  332. list(APPEND Core_HDR_FILES ${SVG_HDR_FILES})
  333. list(APPEND Core_PUB_HDR_FILES ${SVG_PUB_HDR_FILES})
  334. list(APPEND Core_SRC_FILES ${SVG_SRC_FILES})
  335. message("-- Can SVG plugin be enabled - yes - lunasvg library found")
  336. endif()
  337. if(NOT BUILD_FRAMEWORK)
  338. #===================================
  339. # Build libraries ==================
  340. #===================================
  341. set(LIBRARIES Core Debugger)
  342. foreach(library ${LIBRARIES})
  343. set(NAME Rml${library})
  344. add_library(${NAME}
  345. ${${library}_HDR_FILES}
  346. ${${library}_PUB_HDR_FILES}
  347. ${MASTER_${library}_PUB_HDR_FILES}
  348. ${${library}_SRC_FILES}
  349. )
  350. set_target_properties(${NAME} PROPERTIES
  351. VERSION ${PROJECT_VERSION}
  352. SOVERSION ${PROJECT_VERSION_MAJOR}
  353. )
  354. add_common_target_options(${NAME})
  355. install(TARGETS ${NAME}
  356. EXPORT RmlUiTargets
  357. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  358. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  359. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  360. )
  361. set(RMLUI_EXPORTED_TARGETS ${RMLUI_EXPORTED_TARGETS} ${NAME})
  362. endforeach(library)
  363. if( CUSTOM_CONFIGURATION )
  364. foreach(library ${CUSTOM_LINK_LIBRARIES})
  365. install(TARGETS ${library}
  366. EXPORT RmlUiTargets
  367. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  368. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  369. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  370. )
  371. set(RMLUI_EXPORTED_TARGETS ${RMLUI_EXPORTED_TARGETS} ${library})
  372. endforeach(library ${CUSTOM_LINK_LIBRARIES})
  373. endif()
  374. if( MATRIX_ROW_MAJOR )
  375. list(APPEND CORE_PUBLIC_DEFS -DRMLUI_MATRIX_ROW_MAJOR)
  376. endif ()
  377. if( CUSTOM_CONFIGURATION AND CUSTOM_LINK_LIBRARIES )
  378. target_link_libraries(RmlCore PUBLIC ${CUSTOM_LINK_LIBRARIES})
  379. endif ()
  380. if (PRECOMPILED_HEADERS_ENABLED)
  381. target_precompile_headers(RmlCore PRIVATE ${PROJECT_SOURCE_DIR}/Source/Core/precompiled.h)
  382. endif()
  383. else(NOT BUILD_FRAMEWORK)
  384. #===================================
  385. # Build combined Framework =========
  386. #===================================
  387. set(NAME RmlUi)
  388. set(MASTER_PUB_HDR_FILES
  389. ${MASTER_Core_PUB_HDR_FILES}
  390. ${MASTER_Debugger_PUB_HDR_FILES}
  391. )
  392. add_library(${NAME}
  393. ${Core_HDR_FILES}
  394. ${MASTER_Core_PUB_HDR_FILES}
  395. ${Core_PUB_HDR_FILES}
  396. ${Core_SRC_FILES}
  397. ${Debugger_HDR_FILES}
  398. ${MASTER_Debugger_PUB_HDR_FILES}
  399. ${Debugger_PUB_HDR_FILES}
  400. ${Debugger_SRC_FILES}
  401. )
  402. set_target_properties(${NAME} PROPERTIES
  403. VERSION ${PROJECT_VERSION}
  404. SOVERSION ${PROJECT_VERSION_MAJOR}
  405. )
  406. set_property(SOURCE ${MASTER_PUB_HDR_FILES}
  407. PROPERTY MACOSX_PACKAGE_LOCATION Headers
  408. )
  409. set_property(SOURCE ${Core_PUB_HDR_FILES}
  410. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Core
  411. )
  412. set_property(SOURCE ${Debugger_PUB_HDR_FILES}
  413. PROPERTY MACOSX_PACKAGE_LOCATION Headers/Debugger
  414. )
  415. set_target_properties(${NAME} PROPERTIES
  416. FRAMEWORK TRUE
  417. FRAMEWORK_VERSION ${PROJECT_VERSION}
  418. MACOSX_FRAMEWORK_IDENTIFIER com.rmlui.${NAME}
  419. MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${RMLUI_VERSION_SHORT}
  420. MACOSX_FRAMEWORK_BUNDLE_VERSION ${PROJECT_VERSION}
  421. XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
  422. PUBLIC_HEADER ${MASTER_PUB_HDR_FILES}
  423. )
  424. install(TARGETS ${NAME}
  425. EXPORT RmlUiTargets
  426. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  427. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  428. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  429. FRAMEWORK DESTINATION Library/Frameworks
  430. )
  431. set(RMLUI_EXPORTED_TARGETS ${RMLUI_EXPORTED_TARGETS} ${NAME})
  432. endif(NOT BUILD_FRAMEWORK)
  433. # Build Lua bindings
  434. if(BUILD_LUA_BINDINGS)
  435. set(NAME RmlLua)
  436. add_library(${NAME} ${Lua_SRC_FILES}
  437. ${Lua_HDR_FILES}
  438. ${Lua_PUB_HDR_FILES}
  439. )
  440. set_target_properties(${NAME} PROPERTIES
  441. VERSION ${PROJECT_VERSION}
  442. SOVERSION ${PROJECT_VERSION_MAJOR}
  443. )
  444. add_common_target_options(${NAME})
  445. install(TARGETS ${NAME}
  446. EXPORT RmlUiTargets
  447. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  448. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  449. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  450. )
  451. set(RMLUI_EXPORTED_TARGETS ${RMLUI_EXPORTED_TARGETS} ${NAME})
  452. endif()
  453. if(DISABLE_RTTI_AND_EXCEPTIONS)
  454. if( CMAKE_COMPILER_IS_GNUCXX )
  455. add_definitions( -fno-rtti -fno-exceptions )
  456. elseif( MSVC )
  457. add_definitions( -D_HAS_EXCEPTIONS=0 /GR- )
  458. if(CMAKE_CXX_FLAGS MATCHES "/EHsc ")
  459. string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  460. message(STATUS "CMAKE_CXX_FLAGS matches /EHsc before end of string replaced...")
  461. endif()
  462. if(CMAKE_CXX_FLAGS MATCHES "/EHsc$")
  463. string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
  464. message(STATUS "CMAKE_CXX_FLAGS matches /EHsc at end of string replaced...")
  465. endif()
  466. else()
  467. message(STATUS "Could not create build configuration without rtti and exceptions...")
  468. endif()
  469. endif()
  470. #===================================
  471. # Link libraries ===================
  472. #===================================
  473. if(NOT BUILD_FRAMEWORK)
  474. target_include_directories(RmlCore PRIVATE ${CORE_INCLUDE_DIRS})
  475. target_include_directories(RmlCore INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Include> $<INSTALL_INTERFACE:include>)
  476. target_link_libraries(RmlCore PRIVATE ${CORE_LINK_LIBS})
  477. target_link_libraries(RmlDebugger RmlCore)
  478. target_compile_definitions(RmlCore PRIVATE ${CORE_PRIVATE_DEFS})
  479. target_compile_definitions(RmlCore PUBLIC ${CORE_PUBLIC_DEFS})
  480. else()
  481. target_include_directories(RmlUi PRIVATE ${CORE_INCLUDE_DIRS})
  482. target_link_libraries(RmlUi PRIVATE ${CORE_LINK_LIBS})
  483. target_compile_definitions(RmlUi PRIVATE ${CORE_PRIVATE_DEFS})
  484. target_compile_definitions(RmlUi PUBLIC ${CORE_PUBLIC_DEFS})
  485. endif()
  486. if(BUILD_LUA_BINDINGS)
  487. if(NOT BUILD_FRAMEWORK)
  488. target_link_libraries(RmlLua RmlCore ${LUA_BINDINGS_LINK_LIBS})
  489. target_include_directories(RmlLua PUBLIC ${LUA_BINDINGS_INCLUDE_DIRS})
  490. else()
  491. target_link_libraries(RmlUi ${LUA_BINDINGS_LINK_LIBS})
  492. target_include_directories(RmlUi PUBLIC ${LUA_BINDINGS_INCLUDE_DIRS})
  493. endif()
  494. endif()
  495. #===================================
  496. # Build samples ====================
  497. #===================================
  498. # Build and link the samples
  499. macro(bl_sample NAME)
  500. if (WIN32)
  501. add_executable(${NAME} WIN32 ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  502. elseif(APPLE)
  503. add_executable(${NAME} MACOSX_BUNDLE ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  504. # The first rpath is to the proper location where the framework/library SHOULD be, the second is to the location actually seen
  505. # in the build environment
  506. if(BUILD_FRAMEWORK)
  507. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../Frameworks")
  508. else()
  509. set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-rpath @executable_path/../lib")
  510. endif()
  511. else()
  512. add_executable(${NAME} ${${NAME}_SRC_FILES} ${${NAME}_HDR_FILES} )
  513. endif()
  514. add_common_target_options(${NAME})
  515. target_link_libraries(${NAME} ${ARGN})
  516. endmacro()
  517. # Build shell
  518. if(BUILD_SAMPLES OR BUILD_TESTING)
  519. message("-- Adding shell with '${SAMPLES_BACKEND}' backend.")
  520. include(SampleFileList)
  521. include(BackendFileList)
  522. if(NOT BUILD_FRAMEWORK)
  523. set(sample_LIBRARIES
  524. shell
  525. RmlCore
  526. RmlDebugger
  527. )
  528. else()
  529. set(sample_LIBRARIES
  530. shell
  531. RmlUi
  532. )
  533. endif()
  534. set(SAMPLES_DIR opt/RmlUi/Samples CACHE PATH "Path to samples directory.")
  535. if(WIN32)
  536. mark_as_advanced(SAMPLES_DIR)
  537. endif()
  538. set(BACKEND_SRC_FILES "${${SAMPLES_BACKEND}_SRC_FILES}")
  539. set(BACKEND_HDR_FILES "${${SAMPLES_BACKEND}_HDR_FILES}")
  540. if("${BACKEND_SRC_FILES}" STREQUAL "" OR "${BACKEND_HDR_FILES}" STREQUAL "")
  541. message(FATAL_ERROR "Unknown samples backend '${SAMPLES_BACKEND}'.")
  542. endif()
  543. list(APPEND shell_SRC_FILES ${BACKEND_SRC_FILES})
  544. list(APPEND shell_HDR_FILES ${BACKEND_HDR_FILES} ${BACKEND_COMMON_HDR_FILES})
  545. add_library(shell STATIC ${shell_SRC_FILES} ${shell_HDR_FILES})
  546. target_include_directories(shell PUBLIC
  547. ${PROJECT_SOURCE_DIR}/Backends
  548. ${PROJECT_SOURCE_DIR}/Samples/shell/include
  549. )
  550. add_common_target_options(shell)
  551. target_link_libraries(shell PUBLIC RmlCore RmlDebugger)
  552. # Add OS dependencies.
  553. if (WIN32)
  554. target_link_libraries(shell PRIVATE shlwapi imm32)
  555. elseif(APPLE)
  556. target_link_libraries(shell PRIVATE "-framework Cocoa")
  557. elseif(UNIX AND NOT APPLE AND NOT EMSCRIPTEN)
  558. find_package(X11)
  559. if (X11_FOUND)
  560. message("-- Found X11 library.")
  561. target_link_libraries(shell PRIVATE ${X11_LIBRARIES})
  562. # Platform_X11 uses Xkb if possible instead of XGetKeyboardMapping for performance.
  563. if(X11_Xkb_FOUND)
  564. FIND_PACKAGE_MESSAGE(X11 "Found X11 KBlib: ${X11_X11_LIB}" "[${X11_X11_LIB}][${X11_XkbINCLUDE_DIR}]")
  565. target_compile_definitions(shell PRIVATE HAS_X11XKBLIB)
  566. endif()
  567. endif()
  568. endif()
  569. # Add platform dependencies.
  570. if(SAMPLES_BACKEND MATCHES "^X11")
  571. if(NOT X11_FOUND)
  572. message(FATAL_ERROR "X11 not found or not supported on this platform, select a different sample backend.")
  573. endif()
  574. endif()
  575. if(SAMPLES_BACKEND MATCHES "^SDL")
  576. message("-- Looking for SDL2 library for samples backend.")
  577. if(EMSCRIPTEN)
  578. set(EMSCRIPTEN_FLAGS "${EMSCRIPTEN_FLAGS} -sUSE_SDL=2 -sUSE_SDL_IMAGE=2 -sSDL2_IMAGE_FORMATS='[tga]'")
  579. else()
  580. find_package(SDL2 REQUIRED)
  581. find_package(SDL2_image REQUIRED)
  582. if(NOT SDL2_FOUND)
  583. message(FATAL_ERROR "SDL2 not found")
  584. elseif(NOT SDL2_IMAGE_FOUND)
  585. message(FATAL_ERROR "SDL2_image not found")
  586. endif()
  587. if(SAMPLES_BACKEND STREQUAL "SDL_GL2")
  588. find_package(GLEW REQUIRED)
  589. if(NOT GLEW_FOUND)
  590. message(FATAL_ERROR "GLEW not found")
  591. endif()
  592. endif()
  593. # Check version requirement for the SDL renderer.
  594. if(SAMPLES_BACKEND STREQUAL "SDL_SDLrenderer" AND "${SDL2_VERSION}" VERSION_LESS "2.0.20")
  595. message(FATAL_ERROR "SDL2 native renderer backend (${SAMPLES_BACKEND}) requires SDL 2.0.20 (found ${SDL2_VERSION}).")
  596. endif()
  597. target_include_directories(shell PRIVATE ${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIR} ${GLEW_INCLUDE_DIR})
  598. target_link_libraries(shell PRIVATE ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${GLEW_LIBRARIES})
  599. endif()
  600. endif()
  601. if(SAMPLES_BACKEND MATCHES "^SFML")
  602. message("-- Looking for SFML 2.x library for samples backend.")
  603. if (WIN32)
  604. find_package(SFML 2 REQUIRED COMPONENTS graphics window system main)
  605. else()
  606. find_package(SFML 2 REQUIRED COMPONENTS graphics window system)
  607. endif()
  608. target_include_directories(shell PRIVATE ${SFML_INCLUDE_DIR})
  609. target_link_libraries(shell PRIVATE ${SFML_LIBRARIES})
  610. endif()
  611. if(SAMPLES_BACKEND MATCHES "^GLFW")
  612. message("-- Looking for GLFW3 library for samples backend.")
  613. find_package(glfw3 3.3 CONFIG REQUIRED)
  614. target_link_libraries(shell PRIVATE glfw)
  615. message("-- Found GLFW version ${glfw3_VERSION}.")
  616. endif()
  617. # Add renderer dependencies.
  618. if(SAMPLES_BACKEND MATCHES "GL2$")
  619. message("-- Adding OpenGL 2 renderer backend.")
  620. find_package(OpenGL REQUIRED)
  621. target_include_directories(shell PRIVATE ${OPENGL_INCLUDE_DIR})
  622. target_link_libraries(shell PRIVATE ${OPENGL_LIBRARIES})
  623. target_compile_definitions(shell PRIVATE RMLUI_RENDERER_GL2)
  624. if(APPLE)
  625. target_compile_definitions(shell PRIVATE GL_SILENCE_DEPRECATION)
  626. endif()
  627. endif()
  628. if(SAMPLES_BACKEND MATCHES "GL3$")
  629. message("-- Adding OpenGL 3 renderer backend.")
  630. if(EMSCRIPTEN)
  631. set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} -sMAX_WEBGL_VERSION=2")
  632. else()
  633. find_package(OpenGL REQUIRED)
  634. target_include_directories(shell PRIVATE ${OPENGL_INCLUDE_DIR})
  635. target_link_libraries(shell PRIVATE ${OPENGL_LIBRARIES} ${CMAKE_DL_LIBS})
  636. target_compile_definitions(shell PRIVATE RMLUI_RENDERER_GL3)
  637. if(APPLE)
  638. target_compile_definitions(shell PRIVATE GL_SILENCE_DEPRECATION)
  639. endif()
  640. endif()
  641. endif()
  642. endif()
  643. if(BUILD_SAMPLES)
  644. set(samples treeview customlog drag loaddocument transform bitmapfont animation benchmark demo databinding)
  645. set(tutorials template datagrid datagrid_tree drag)
  646. if(ENABLE_LOTTIE_PLUGIN)
  647. list(APPEND samples "lottie")
  648. endif()
  649. if(ENABLE_SVG_PLUGIN)
  650. list(APPEND samples "svg")
  651. endif()
  652. # Build and install the basic samples
  653. foreach(sample ${samples})
  654. bl_sample(${sample} ${sample_LIBRARIES})
  655. # The samples always set this as their current working directory
  656. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/basic/${sample})
  657. install(TARGETS ${sample}
  658. RUNTIME DESTINATION ${SAMPLES_DIR}/${sample}
  659. BUNDLE DESTINATION ${SAMPLES_DIR})
  660. endforeach()
  661. # Build and install the tutorials
  662. foreach(tutorial ${tutorials})
  663. set(tutorial_fullname tutorial_${tutorial})
  664. bl_sample(${tutorial_fullname} ${sample_LIBRARIES})
  665. # The tutorials always set this as their current working directory
  666. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/tutorial/${tutorial})
  667. install(TARGETS ${tutorial_fullname}
  668. RUNTIME DESTINATION ${SAMPLES_DIR}/${tutorial}
  669. BUNDLE DESTINATION ${SAMPLES_DIR})
  670. endforeach()
  671. # Build and install invaders sample
  672. bl_sample(invaders ${sample_LIBRARIES})
  673. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/invaders)
  674. install(TARGETS invaders
  675. RUNTIME DESTINATION ${SAMPLES_DIR}/invaders
  676. BUNDLE DESTINATION ${SAMPLES_DIR})
  677. if(BUILD_LUA_BINDINGS)
  678. bl_sample(luainvaders RmlLua ${sample_LIBRARIES} ${LUA_BINDINGS_LINK_LIBS})
  679. install(DIRECTORY DESTINATION ${SAMPLES_DIR}/luainvaders)
  680. install(TARGETS luainvaders
  681. RUNTIME DESTINATION ${SAMPLES_DIR}/luainvaders
  682. BUNDLE DESTINATION ${SAMPLES_DIR})
  683. endif()
  684. # Add assets to emscripten binaries
  685. if(EMSCRIPTEN)
  686. message("-- Preloading emscipten sample assets")
  687. set(COMMON_ASSET_FOLDER "Samples/assets/")
  688. set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/${COMMON_ASSET_FOLDER}@/${COMMON_ASSET_FOLDER}")
  689. foreach(sample ${samples})
  690. set(SAMPLE_DATA_FOLDER "Samples/basic/${sample}/data/")
  691. set(ABS_SAMPLE_DATA_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/${SAMPLE_DATA_FOLDER}")
  692. if(EXISTS ${ABS_SAMPLE_DATA_FOLDER})
  693. target_link_libraries(${sample} "--preload-file ${ABS_SAMPLE_DATA_FOLDER}@/${SAMPLE_DATA_FOLDER}")
  694. endif()
  695. endforeach()
  696. foreach(tutorial ${tutorials})
  697. set(TUTORIAL_DATA_FOLDER "Samples/tutorial/${tutorial}/data/")
  698. set(ABS_TUTORIAL_DATA_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/${TUTORIAL_DATA_FOLDER}")
  699. if(EXISTS ${ABS_TUTORIAL_DATA_FOLDER})
  700. target_link_libraries("tutorial_${tutorial}" "--preload-file ${ABS_TUTORIAL_DATA_FOLDER}@/${TUTORIAL_DATA_FOLDER}")
  701. endif()
  702. endforeach()
  703. set(INVADER_DATA_FOLDER "Samples/invaders/data/")
  704. target_link_libraries(invaders "-sALLOW_MEMORY_GROWTH --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/${INVADER_DATA_FOLDER}@/${INVADER_DATA_FOLDER}")
  705. endif()
  706. endif()
  707. #===================================
  708. # Add global options ===============
  709. #===================================
  710. if(EMSCRIPTEN)
  711. # Enables Asyncify which we only need since the backend doesn't control the main loop. This enables us to yield to the browser during the backend call to
  712. # Backend::ProcessEvents(). Asyncify results in larger and slower code, users are instead encouraged to use 'emscripten_set_main_loop()' and family.
  713. set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} -sASYNCIFY")
  714. message(STATUS "Compiling for Emscripten.\n\t- Flags:${EMSCRIPTEN_FLAGS}\n\t- ExeFlags:${EMSCRIPTEN_EXE_FLAGS}")
  715. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EMSCRIPTEN_FLAGS}")
  716. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EMSCRIPTEN_FLAGS}")
  717. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EMSCRIPTEN_FLAGS} ${EMSCRIPTEN_EXE_FLAGS}")
  718. set(CMAKE_EXECUTABLE_SUFFIX .html)
  719. endif()
  720. #===================================
  721. # Add tests ========================
  722. #===================================
  723. if(RMLUI_TESTS_ENABLED)
  724. add_subdirectory(Tests)
  725. endif()
  726. #===================================
  727. # Installation =====================
  728. #===================================
  729. if(BUILD_LUA_BINDINGS)
  730. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/RmlUi
  731. DESTINATION include
  732. )
  733. else()
  734. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Include/RmlUi
  735. DESTINATION include
  736. PATTERN "Lua" EXCLUDE
  737. )
  738. endif()
  739. if(BUILD_SAMPLES)
  740. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/assets
  741. DESTINATION ${SAMPLES_DIR}
  742. )
  743. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/template/data
  744. DESTINATION ${SAMPLES_DIR}/tutorial/template
  745. )
  746. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid/data
  747. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid
  748. )
  749. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/datagrid_tree/data
  750. DESTINATION ${SAMPLES_DIR}/tutorial/datagrid_tree
  751. )
  752. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/tutorial/drag/data
  753. DESTINATION ${SAMPLES_DIR}/tutorial/drag
  754. )
  755. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/animation/data
  756. DESTINATION ${SAMPLES_DIR}/basic/animation
  757. )
  758. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/benchmark/data
  759. DESTINATION ${SAMPLES_DIR}/basic/benchmark
  760. )
  761. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/bitmapfont/data
  762. DESTINATION ${SAMPLES_DIR}/basic/bitmapfont
  763. )
  764. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/databinding/data
  765. DESTINATION ${SAMPLES_DIR}/basic/databinding
  766. )
  767. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/demo/data
  768. DESTINATION ${SAMPLES_DIR}/basic/demo
  769. )
  770. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/transform/data
  771. DESTINATION ${SAMPLES_DIR}/basic/transform
  772. )
  773. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/treeview/data
  774. DESTINATION ${SAMPLES_DIR}/basic/treeview
  775. )
  776. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/drag/data
  777. DESTINATION ${SAMPLES_DIR}/basic/drag
  778. )
  779. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/invaders/data
  780. DESTINATION ${SAMPLES_DIR}/invaders
  781. )
  782. if(TARGET lottie)
  783. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/lottie/data
  784. DESTINATION ${SAMPLES_DIR}/basic/lottie
  785. )
  786. endif()
  787. if(TARGET svg)
  788. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/basic/svg/data
  789. DESTINATION ${SAMPLES_DIR}/basic/svg
  790. )
  791. endif()
  792. if(BUILD_LUA_BINDINGS)
  793. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/data
  794. DESTINATION ${SAMPLES_DIR}/luainvaders
  795. )
  796. install(DIRECTORY ${PROJECT_SOURCE_DIR}/Samples/luainvaders/lua
  797. DESTINATION ${SAMPLES_DIR}/luainvaders
  798. )
  799. endif()
  800. endif()
  801. #===================================
  802. # Generate Config.cmake files ======
  803. #===================================
  804. # Try to include helper module
  805. include(CMakePackageConfigHelpers OPTIONAL RESULT_VARIABLE PkgHelpers_AVAILABLE)
  806. # guard against older versions of cmake which do not provide it
  807. if(PkgHelpers_AVAILABLE)
  808. set (INCLUDE_INSTALL_DIR "include")
  809. set (LIB_INSTALL_DIR "lib")
  810. set (INCLUDE_DIR "${PROJECT_SOURCE_DIR}/Include")
  811. # generate configuration for install tree
  812. configure_package_config_file(${PROJECT_SOURCE_DIR}/CMake/RmlUiConfig.cmake.install.in
  813. ${CMAKE_CURRENT_BINARY_DIR}/install/RmlUiConfig.cmake
  814. INSTALL_DESTINATION ${LIB_INSTALL_DIR}/RmlUi/cmake
  815. PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
  816. write_basic_package_version_file(
  817. ${CMAKE_CURRENT_BINARY_DIR}/install/RmlUiConfigVersion.cmake
  818. VERSION ${PROJECT_VERSION}
  819. COMPATIBILITY SameMajorVersion )
  820. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/install/RmlUiConfig.cmake
  821. ${CMAKE_CURRENT_BINARY_DIR}/install/RmlUiConfigVersion.cmake
  822. DESTINATION ${LIB_INSTALL_DIR}/RmlUi/cmake )
  823. install(EXPORT RmlUiTargets
  824. DESTINATION ${LIB_INSTALL_DIR}/RmlUi/cmake)
  825. # generate configuration for build tree
  826. configure_package_config_file(${PROJECT_SOURCE_DIR}/CMake/RmlUiConfig.cmake.build.in
  827. ${CMAKE_CURRENT_BINARY_DIR}/RmlUiConfig.cmake
  828. INSTALL_DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
  829. PATH_VARS INCLUDE_DIR CMAKE_CURRENT_BINARY_DIR)
  830. export(TARGETS ${RMLUI_EXPORTED_TARGETS}
  831. FILE "${CMAKE_CURRENT_BINARY_DIR}/RmlUiTargets.cmake")
  832. write_basic_package_version_file(
  833. ${CMAKE_CURRENT_BINARY_DIR}/RmlUiConfigVersion.cmake
  834. VERSION ${PROJECT_VERSION}
  835. COMPATIBILITY SameMajorVersion )
  836. set(RmlUi_DIR "${CMAKE_CURRENT_BINARY_DIR}" CACHE PATH "The directory containing a CMake configuration file for RmlUi.")
  837. else()
  838. message("If you wish to use find_package(RmlUi) in your own project to find RmlUi library"
  839. " please update cmake to version which provides CMakePackageConfighelpers module"
  840. " or write generators for RmlUiConfig.cmake by yourself.")
  841. endif()