CMakeLists.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. ####################################################################################
  2. # #
  3. # Copyright (c) 2014 - 2018 Axel Menzel <info@rttr.org> #
  4. # #
  5. # This file is part of RTTR (Run Time Type Reflection) #
  6. # License: MIT License #
  7. # #
  8. # Permission is hereby granted, free of charge, to any person obtaining #
  9. # a copy of this software and associated documentation files (the "Software"), #
  10. # to deal in the Software without restriction, including without limitation #
  11. # the rights to use, copy, modify, merge, publish, distribute, sublicense, #
  12. # and/or sell copies of the Software, and to permit persons to whom the #
  13. # Software is furnished to do so, subject to the following conditions: #
  14. # #
  15. # The above copyright notice and this permission notice shall be included in #
  16. # all copies or substantial portions of the Software. #
  17. # #
  18. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
  19. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
  20. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE #
  21. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
  22. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #
  23. # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
  24. # SOFTWARE. #
  25. # #
  26. ####################################################################################
  27. project(rttr LANGUAGES CXX)
  28. message(STATUS "Scanning " ${PROJECT_NAME} " module.")
  29. message(STATUS "===========================")
  30. generateLibraryVersionVariables(${RTTR_VERSION_MAJOR} ${RTTR_VERSION_MINOR} ${RTTR_VERSION_PATCH}
  31. "RTTR" "Copyright (c) 2014 - 2018 Axel Menzel <info@rttr.org>" "MIT License")
  32. loadFolder("rttr" HPP_FILES SRC_FILES BUILD_INSTALLER)
  33. if (USE_PCH)
  34. activate_precompiled_headers("detail/base/pch.h" SRC_FILES)
  35. endif()
  36. if (${BUILD_RTTR_DYNAMIC})
  37. add_library(rttr_core SHARED ${UnityBuild} ${SRC_FILES} ${HPP_FILES})
  38. add_library(RTTR::Core ALIAS rttr_core)
  39. target_compile_definitions(rttr_core PRIVATE RTTR_DLL_EXPORTS)
  40. target_compile_definitions(rttr_core PUBLIC RTTR_DLL)
  41. set_target_properties(rttr_core PROPERTIES
  42. VERSION ${RTTR_VERSION} SOVERSION ${RTTR_VERSION}
  43. EXPORT_NAME Core
  44. DEBUG_POSTFIX ${RTTR_DEBUG_POSTFIX}
  45. CXX_STANDARD ${MAX_CXX_STANDARD}
  46. CXX_VISIBILITY_PRESET hidden
  47. VISIBILITY_INLINES_HIDDEN 1)
  48. target_link_libraries(rttr_core PRIVATE ${CMAKE_DL_LIBS})
  49. if(${CMAKE_VERSION} VERSION_GREATER "3.8.0")
  50. target_compile_features(rttr_core PUBLIC cxx_std_11) # at least c++11 is needed to compile RTTR
  51. endif()
  52. target_include_directories(rttr_core PUBLIC
  53. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../>
  54. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  55. $<INSTALL_INTERFACE:include>)
  56. set_compiler_warnings(rttr_core)
  57. if (BUILD_INSTALLER)
  58. install(TARGETS rttr_core EXPORT rttr_targets
  59. RUNTIME DESTINATION ${RTTR_RUNTIME_INSTALL_DIR}
  60. LIBRARY DESTINATION ${RTTR_LIBRARY_INSTALL_DIR}
  61. ARCHIVE DESTINATION ${RTTR_ARCHIVE_INSTALL_DIR}
  62. FRAMEWORK DESTINATION ${RTTR_FRAMEWORK_INSTALL_DIR})
  63. # install also pdb file
  64. install_pdb_files(rttr_core)
  65. endif()
  66. endif()
  67. if (BUILD_STATIC)
  68. add_library(rttr_core_lib STATIC ${UnityBuild} ${SRC_FILES} ${HPP_FILES})
  69. add_library(RTTR::Core_Lib ALIAS rttr_core_lib)
  70. set_target_properties(rttr_core_lib PROPERTIES
  71. VERSION ${RTTR_VERSION} SOVERSION ${RTTR_VERSION}
  72. EXPORT_NAME Core_Lib
  73. CXX_STANDARD ${MAX_CXX_STANDARD}
  74. DEBUG_POSTFIX ${RTTR_DEBUG_POSTFIX})
  75. target_link_libraries(rttr_core_lib PRIVATE ${CMAKE_DL_LIBS})
  76. if (MSVC)
  77. set_target_properties(rttr_core_lib PROPERTIES OUTPUT_NAME librttr_core)
  78. elseif (CMAKE_COMPILER_IS_GNUCXX)
  79. set_target_properties(rttr_core_lib PROPERTIES OUTPUT_NAME rttr_core)
  80. elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  81. set_target_properties(rttr_core_lib PROPERTIES OUTPUT_NAME rttr_core)
  82. else()
  83. message(SEND_ERROR "Do not know how to name the static library.")
  84. endif()
  85. target_include_directories(rttr_core_lib PUBLIC
  86. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../>
  87. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  88. $<INSTALL_INTERFACE:include>)
  89. if(${CMAKE_VERSION} VERSION_GREATER "3.8.0")
  90. target_compile_features(rttr_core_lib PUBLIC cxx_std_11) # at least c++11 is needed to compile RTTR
  91. endif()
  92. set_compiler_warnings(rttr_core_lib)
  93. if (BUILD_INSTALLER)
  94. install(TARGETS rttr_core_lib EXPORT rttr_targets
  95. RUNTIME DESTINATION ${RTTR_RUNTIME_INSTALL_DIR}
  96. LIBRARY DESTINATION ${RTTR_LIBRARY_INSTALL_DIR}
  97. ARCHIVE DESTINATION ${RTTR_ARCHIVE_INSTALL_DIR}
  98. FRAMEWORK DESTINATION ${RTTR_FRAMEWORK_INSTALL_DIR})
  99. endif()
  100. endif()
  101. if (BUILD_WITH_STATIC_RUNTIME_LIBS)
  102. add_library(rttr_core_s SHARED ${UnityBuild} ${SRC_FILES} ${HPP_FILES})
  103. add_library(RTTR::Core_STL ALIAS rttr_core_s)
  104. target_compile_definitions(rttr_core_s PRIVATE RTTR_DLL_EXPORTS)
  105. target_compile_definitions(rttr_core_s PUBLIC RTTR_DLL)
  106. target_include_directories(rttr_core_s PUBLIC
  107. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../>
  108. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  109. $<INSTALL_INTERFACE:include>)
  110. target_link_libraries(rttr_core_s PRIVATE ${CMAKE_DL_LIBS})
  111. set_target_properties(rttr_core_s PROPERTIES
  112. VERSION ${RTTR_VERSION} SOVERSION ${RTTR_VERSION}
  113. EXPORT_NAME Core_STL
  114. CXX_STANDARD ${MAX_CXX_STANDARD}
  115. DEBUG_POSTFIX ${RTTR_DEBUG_POSTFIX}
  116. CXX_VISIBILITY_PRESET hidden
  117. VISIBILITY_INLINES_HIDDEN 1)
  118. if(${CMAKE_VERSION} VERSION_GREATER "3.8.0")
  119. target_compile_features(rttr_core_s PUBLIC cxx_std_11) # at least c++11 is needed to compile RTTR
  120. endif()
  121. set_compiler_warnings(rttr_core_s)
  122. if (MSVC)
  123. target_compile_options(rttr_core_s PUBLIC "/MT$<$<CONFIG:Debug>:d>")
  124. elseif(CMAKE_COMPILER_IS_GNUCXX)
  125. set_target_properties(rttr_core_s PROPERTIES LINK_FLAGS ${GNU_STATIC_LINKER_FLAGS})
  126. elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  127. set_target_properties(rttr_core_s PROPERTIES LINK_FLAGS ${CLANG_STATIC_LINKER_FLAGS})
  128. else()
  129. message(SEND_ERROR "Do not know how to statically link against the standard library with this compiler.")
  130. endif()
  131. if (BUILD_INSTALLER)
  132. install_pdb_files(rttr_core_s)
  133. install(TARGETS rttr_core_s EXPORT rttr_targets
  134. RUNTIME DESTINATION ${RTTR_RUNTIME_INSTALL_DIR}
  135. LIBRARY DESTINATION ${RTTR_LIBRARY_INSTALL_DIR}
  136. ARCHIVE DESTINATION ${RTTR_ARCHIVE_INSTALL_DIR}
  137. FRAMEWORK DESTINATION ${RTTR_FRAMEWORK_INSTALL_DIR})
  138. endif()
  139. if (BUILD_STATIC)
  140. add_library(rttr_core_lib_s STATIC ${UnityBuild} ${SRC_FILES} ${HPP_FILES})
  141. add_library(RTTR::Core_Lib_STL ALIAS rttr_core_lib_s)
  142. target_include_directories(rttr_core_lib_s PUBLIC
  143. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../>
  144. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
  145. $<INSTALL_INTERFACE:include>)
  146. set_target_properties(rttr_core_lib_s PROPERTIES
  147. VERSION ${RTTR_VERSION} SOVERSION ${RTTR_VERSION}
  148. EXPORT_NAME Core_Lib_STL
  149. CXX_STANDARD ${MAX_CXX_STANDARD}
  150. DEBUG_POSTFIX ${RTTR_DEBUG_POSTFIX})
  151. target_link_libraries(rttr_core_lib_s PRIVATE ${CMAKE_DL_LIBS})
  152. if(${CMAKE_VERSION} VERSION_GREATER "3.8.0")
  153. target_compile_features(rttr_core_lib_s PUBLIC cxx_std_11) # at least c++11 is needed to compile RTTR
  154. endif()
  155. set_compiler_warnings(rttr_core_lib_s)
  156. if (MSVC)
  157. target_compile_options(rttr_core_lib_s PUBLIC "/MT$<$<CONFIG:Debug>:d>")
  158. set_target_properties(rttr_core_lib PROPERTIES OUTPUT_NAME librttr_core_s)
  159. elseif(CMAKE_COMPILER_IS_GNUCXX)
  160. set_target_properties(rttr_core_lib_s PROPERTIES LINK_FLAGS ${GNU_STATIC_LINKER_FLAGS} OUTPUT_NAME rttr_core_s)
  161. elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  162. set_target_properties(rttr_core_lib_s PROPERTIES LINK_FLAGS ${CLANG_STATIC_LINKER_FLAGS} OUTPUT_NAME rttr_core_s)
  163. else()
  164. message(SEND_ERROR "Do not know how to statically link against the standard library with this compiler.")
  165. endif()
  166. if (BUILD_INSTALLER)
  167. install(TARGETS rttr_core_lib_s EXPORT rttr_targets
  168. RUNTIME DESTINATION ${RTTR_RUNTIME_INSTALL_DIR}
  169. LIBRARY DESTINATION ${RTTR_LIBRARY_INSTALL_DIR}
  170. ARCHIVE DESTINATION ${RTTR_ARCHIVE_INSTALL_DIR}
  171. FRAMEWORK DESTINATION ${RTTR_FRAMEWORK_INSTALL_DIR})
  172. endif()
  173. endif()
  174. endif()
  175. if(BUILD_INSTALLER)
  176. install(EXPORT rttr_targets
  177. DESTINATION ${RTTR_CMAKE_CONFIG_INSTALL_DIR}
  178. NAMESPACE RTTR::
  179. FILE rttr-config.cmake)
  180. endif()
  181. message(STATUS "Scanning " ${PROJECT_NAME} " module finished!")
  182. message(STATUS "")