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.
 
 
 

136 lines
7.5 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 ( Sanitizers QUIET )
  6. Find_Package ( cppcore QUIET )
  7. If ( cppcore )
  8. Set ( CPPLOGGING_HAS_CPPCORE true )
  9. EndIf ( )
  10. Find_Package ( nlohmann_json QUIET )
  11. If ( nlohmann_json_FOUND )
  12. Set ( CPPLOGGING_HAS_NLOHMANN_JSON true )
  13. EndIf ( )
  14. # Object Library ##################################################################################
  15. Set ( CPPLOGGING_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include )
  16. Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in
  17. ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging/config.h )
  18. Set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
  19. Set ( CPPLOGGING_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include )
  20. File ( GLOB_RECURSE CPPLOGGING_HEADER_FILES ${CPPLOGGING_INCLUDE_DIR}/*.h )
  21. File ( GLOB_RECURSE CPPLOGGING_INLINE_FILES ${CPPLOGGING_INCLUDE_DIR}/*.inl )
  22. File ( GLOB_RECURSE CPPLOGGING_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp )
  23. Add_Library ( cpplogging-objects
  24. OBJECT
  25. ${CPPLOGGING_HEADER_FILES}
  26. ${CPPLOGGING_INLINE_FILES}
  27. ${CPPLOGGING_SOURCE_FILES} )
  28. If ( CPPLOGGING_HAS_CPPCORE )
  29. Target_Link_Libraries ( cpplogging-objects
  30. PRIVATE
  31. cppcore::cppcore )
  32. EndIf ( )
  33. If ( CPPLOGGING_HAS_NLOHMANN_JSON )
  34. Target_Link_Libraries ( cpplogging-objects
  35. PRIVATE
  36. nlohmann_json::nlohmann_json )
  37. EndIf ( )
  38. Target_Include_Directories ( cpplogging-objects
  39. PUBLIC
  40. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  41. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  42. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  43. # Static Library ##################################################################################
  44. Add_Library ( cpplogging-static STATIC $<TARGET_OBJECTS:cpplogging-objects> )
  45. Set_Target_Properties ( cpplogging-static
  46. PROPERTIES
  47. OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}"
  48. VERSION ${CPPLOGGING_VERSION} )
  49. Target_Include_Directories ( cpplogging-static
  50. PUBLIC
  51. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  52. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  53. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  54. # Shared Library ##################################################################################
  55. Add_Library ( cpplogging-shared SHARED $<TARGET_OBJECTS:cpplogging-objects> )
  56. Set_Target_Properties ( cpplogging-shared
  57. PROPERTIES
  58. OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}"
  59. VERSION ${CPPLOGGING_VERSION}
  60. SOVERSION ${CPPLOGGING_VERSION_SHORT} )
  61. Target_Include_Directories ( cpplogging-shared
  62. PUBLIC
  63. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  64. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  65. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  66. # Optimization ####################################################################################
  67. # sanitizers
  68. If ( Sanitizers_FOUND )
  69. Add_Sanitizers ( cpplogging-objects )
  70. EndIf ( )
  71. # pedantic
  72. If ( HAS_PEDANTIC )
  73. Pedantic_Apply_Flags_Target ( cpplogging-objects ALL )
  74. Pedantic_Apply_Flags_Target ( cpplogging-static ALL )
  75. Pedantic_Apply_Flags_Target ( cpplogging-shared ALL )
  76. EndIf ( )
  77. # cotire
  78. If ( HAS_COTIRE )
  79. Cotire ( cpplogging-objects )
  80. Cotire ( cpplogging-static )
  81. Cotire ( cpplogging-shared )
  82. EndIf ( )
  83. # Install #########################################################################################
  84. Set ( CPPLOGGING_HAS_EXPORT False PARENT_SCOPE )
  85. # Header
  86. If ( CPPLOGGING_INSTALL_HEADER )
  87. Install ( DIRECTORY ${CPPLOGGING_INCLUDE_DIR}/cpplogging
  88. DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} )
  89. Install ( DIRECTORY ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging
  90. DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} )
  91. EndIf ( )
  92. # Static
  93. If ( CPPLOGGING_INSTALL_STATIC )
  94. Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE )
  95. Install ( TARGETS cpplogging-static
  96. EXPORT cpplogging
  97. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  98. EndIf ( )
  99. # Shared
  100. If ( CPPLOGGING_INSTALL_SHARED )
  101. Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE )
  102. Install ( TARGETS cpplogging-shared
  103. EXPORT cpplogging
  104. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  105. EndIf ( )
  106. # Debug
  107. If ( HAS_STRIP_SYMBOLS AND NOT CPPLOGGING_NO_STRIP )
  108. Strip_Symbols ( cpplogging-shared CPPLOGGING_DBG_FILE )
  109. If ( CPPLOGGING_INSTALL_DEBUG )
  110. Install ( FILES ${CPPLOGGING_DBG_FILE}
  111. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  112. EndIf ( )
  113. EndIf ( )