You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

152 lines
7.9 KiB

  1. # Initialize ######################################################################################
  2. Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
  3. Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
  4. Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )
  5. Find_Package ( Hana REQUIRED )
  6. Find_Package ( cppmp REQUIRED )
  7. Find_Package ( cppcore REQUIRED )
  8. Find_Package ( cppmariadb REQUIRED )
  9. If ( cppmariadb_FOUND )
  10. Set ( CPPHIBERNATE_HAS_CPPMARIADB true )
  11. EndIf ( )
  12. If ( CPPHIBERNATE_USE_CPPLOGGING )
  13. Find_Package ( cpplogging )
  14. If ( cpplogging_FOUND )
  15. Set ( CPPHIBERNATE_HAS_CPPLOGGING true )
  16. EndIf ( )
  17. EndIf ( )
  18. # Object Library ##################################################################################
  19. Set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
  20. Set ( CPPHIBERNATE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include )
  21. Set ( CPPHIBERNATE_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include )
  22. Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in
  23. ${CPPHIBERNATE_GENERATED_INCLUDE_DIR}/cpphibernate/config.h )
  24. File ( GLOB_RECURSE CPPHIBERNATE_HEADER_FILES ${CPPHIBERNATE_INCLUDE_DIR}/*.h )
  25. File ( GLOB_RECURSE CPPHIBERNATE_INLINE_FILES ${CPPHIBERNATE_INCLUDE_DIR}/*.inl )
  26. File ( GLOB_RECURSE CPPHIBERNATE_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp )
  27. Add_Library ( cpphibernate-objects
  28. OBJECT
  29. ${CPPHIBERNATE_HEADER_FILES}
  30. ${CPPHIBERNATE_INLINE_FILES}
  31. ${CPPHIBERNATE_SOURCE_FILES} )
  32. Target_Include_Directories ( cpphibernate-objects
  33. PUBLIC
  34. $<BUILD_INTERFACE:${CPPHIBERNATE_INCLUDE_DIR}>
  35. $<BUILD_INTERFACE:${CPPHIBERNATE_GENERATED_INCLUDE_DIR}>
  36. $<INSTALL_INTERFACE:${CPPHIBERNATE_INSTALL_DIR_INCLUDE}> )
  37. Target_Link_Libraries ( cpphibernate-objects
  38. PUBLIC
  39. hana
  40. cppmp::cppmp
  41. cppcore::cppcore )
  42. If ( CPPHIBERNATE_HAS_CPPMARIADB )
  43. Target_Link_Libraries ( cpphibernate-objects
  44. PUBLIC
  45. cppmariadb::cppmariadb-shared )
  46. EndIf ( )
  47. If ( CPPHIBERNATE_HAS_CPPLOGGING )
  48. Target_Link_Libraries ( cpphibernate-objects
  49. PUBLIC
  50. cpplogging::cpplogging-shared )
  51. EndIf ( )
  52. # Static Library ##################################################################################
  53. Add_Library ( cpphibernate-static STATIC $<TARGET_OBJECTS:cpphibernate-objects> )
  54. Set_Target_Properties ( cpphibernate-static
  55. PROPERTIES
  56. OUTPUT_NAME "${CPPHIBERNATE_OUTPUTNAME}"
  57. VERSION ${CPPHIBERNATE_VERSION} )
  58. Target_Include_Directories ( cpphibernate-static
  59. PUBLIC
  60. $<BUILD_INTERFACE:${CPPHIBERNATE_INCLUDE_DIR}>
  61. $<BUILD_INTERFACE:${CPPHIBERNATE_GENERATED_INCLUDE_DIR}>
  62. $<INSTALL_INTERFACE:${CPPHIBERNATE_INSTALL_DIR_INCLUDE}> )
  63. If ( CPPHIBERNATE_HAS_CPPMARIADB )
  64. Target_Link_Libraries ( cpphibernate-static
  65. PUBLIC
  66. cppmariadb::cppmariadb-static )
  67. EndIf ( )
  68. If ( CPPHIBERNATE_HAS_CPPLOGGING )
  69. Target_Link_Libraries ( cpphibernate-objects
  70. PUBLIC
  71. cpplogging::cpplogging-static )
  72. EndIf ( )
  73. # Shared Library ##################################################################################
  74. Add_Library ( cpphibernate-shared SHARED $<TARGET_OBJECTS:cpphibernate-objects> )
  75. Set_Target_Properties ( cpphibernate-shared
  76. PROPERTIES
  77. OUTPUT_NAME "${CPPHIBERNATE_OUTPUTNAME}"
  78. VERSION ${CPPHIBERNATE_VERSION}
  79. SOVERSION ${CPPHIBERNATE_VERSION_SHORT} )
  80. Target_Include_Directories ( cpphibernate-shared
  81. PUBLIC
  82. $<BUILD_INTERFACE:${CPPHIBERNATE_INCLUDE_DIR}>
  83. $<BUILD_INTERFACE:${CPPHIBERNATE_GENERATED_INCLUDE_DIR}>
  84. $<INSTALL_INTERFACE:${CPPHIBERNATE_INSTALL_DIR_INCLUDE}> )
  85. If ( CPPHIBERNATE_HAS_CPPMARIADB )
  86. Target_Link_Libraries ( cpphibernate-shared
  87. PUBLIC
  88. cppmariadb::cppmariadb-shared )
  89. EndIf ( )
  90. If ( CPPHIBERNATE_HAS_CPPLOGGING )
  91. Target_Link_Libraries ( cpphibernate-objects
  92. PUBLIC
  93. cpplogging::cpplogging-shared )
  94. EndIf ( )
  95. # Optimization ####################################################################################
  96. # pedantic
  97. If ( HAS_PEDANTIC )
  98. Pedantic_Apply_Flags_Target ( cpphibernate-objects ALL )
  99. Pedantic_Apply_Flags_Target ( cpphibernate-static ALL )
  100. Pedantic_Apply_Flags_Target ( cpphibernate-shared ALL )
  101. EndIf ( )
  102. # cotire
  103. If ( HAS_COTIRE )
  104. Cotire ( cpphibernate-objects )
  105. Cotire ( cpphibernate-static )
  106. Cotire ( cpphibernate-shared )
  107. EndIf ( )
  108. # Install #########################################################################################
  109. # Header
  110. If ( CPPHIBERNATE_INSTALL_HEADER )
  111. Install ( FILES ${CPPHIBERNATE_INCLUDE_DIR}/cpphibernate.h
  112. DESTINATION ${CPPHIBERNATE_INSTALL_DIR_INCLUDE} )
  113. Install ( DIRECTORY ${CPPHIBERNATE_INCLUDE_DIR}/cpphibernate
  114. DESTINATION ${CPPHIBERNATE_INSTALL_DIR_INCLUDE} )
  115. EndIf ( )
  116. # Static
  117. If ( CPPHIBERNATE_INSTALL_STATIC )
  118. Install ( TARGETS cpphibernate-static
  119. EXPORT cpphibernate
  120. DESTINATION ${CPPHIBERNATE_INSTALL_DIR_LIB} )
  121. EndIf ( )
  122. # Shared
  123. If ( CPPHIBERNATE_INSTALL_SHARED )
  124. Install ( TARGETS cpphibernate-shared
  125. EXPORT cpphibernate
  126. DESTINATION ${CPPHIBERNATE_INSTALL_DIR_LIB} )
  127. EndIf ( )
  128. # Debug
  129. If ( HAS_STRIP_SYMBOLS AND NOT CPPHIBERNATE_NO_STRIP )
  130. Strip_Symbols ( cpphibernate-shared CPPHIBERNATE_DBG_FILE )
  131. If ( CPPHIBERNATE_INSTALL_DEBUG )
  132. Install ( FILES ${CPPHIBERNATE_DBG_FILE}
  133. DESTINATION ${CPPHIBERNATE_INSTALL_DIR_LIB} )
  134. EndIf ( )
  135. EndIf ( )