CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
  2. PROJECT(ARTIS_STAR_ADDONS CXX C)
  3. ENABLE_TESTING()
  4. SET(CMAKE_CXX_STANDARD 17)
  5. SET(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. SET(ARTIS_STAR_ADDONS_MAJOR 1)
  7. SET(ARTIS_STAR_ADDONS_MINOR 0)
  8. SET(ARTIS_STAR_ADDONS_PATCH 0)
  9. SET(ARTIS_STAR_ADDONS_EXTRA "")
  10. SET(ARTIS_STAR_ADDONS_VERSION "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}.${ARTIS_STAR_ADDONS_PATCH}")
  11. SET(ARTIS_STAR_ADDONS_VERSION_SHORT "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}")
  12. SET(ARTIS_STAR_ADDONS_NAME "artis-star-addons")
  13. SET(ARTIS_STAR_ADDONS_NAME_VERSION "${ARTIS_STAR_ADDONS_NAME}-${ARTIS_STAR_ADDONS_VERSION}")
  14. SET(ARTIS_STAR_ADDONS_LOCALE_NAME "${ARTIS_STAR_ADDONS_NAME}-${ARTIS_STAR_ADDONS_MAJOR}-${ARTIS_STAR_ADDONS_MINOR}")
  15. IF ("${ARTIS_STAR_ADDONS_EXTRA}" STREQUAL "")
  16. SET(ARTIS_STAR_ADDONS_COMPLETE "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}.${ARTIS_STAR_ADDONS_PATCH}")
  17. ELSE ("${ARTIS_STAR_ADDONS_EXTRA}" STREQUAL "")
  18. SET(ARTIS_STAR_ADDONS_COMPLETE "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}.${ARTIS_STAR_ADDONS_PATCH}-${ARTIS_STAR_ADDONS_EXTRA}")
  19. ENDIF ("${ARTIS_STAR_ADDONS_EXTRA}" STREQUAL "")
  20. SET(ARTIS_STAR_ADDONS_NAME_COMPLETE "${ARTIS_STAR_ADDONS_NAME}-${ARTIS_STAR_ADDONS_COMPLETE}")
  21. #
  22. # Installation variables
  23. #
  24. SET(ARTIS_STAR_ADDONS_LIBRARY_DIRS "lib/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}")
  25. SET(ARTIS_STAR_ADDONS_INCLUDE_DIRS "include/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}/artis-star-addons")
  26. SET(ARTIS_STAR_ADDONS_INCLUDE_DIR "include/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}")
  27. SET(ARTIS_STAR_ADDONS_MANPAGE_PATH "share/man/man1")
  28. SET(ARTIS_STAR_ADDONS_SHARE_DIRS "share/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}")
  29. #
  30. # Append the library version information to the library target
  31. # properties.
  32. #
  33. SET(ARTIS_STAR_ADDONS_LIBRARY_PROPERTIES VERSION 0)
  34. SET(ARTIS_STAR_ADDONS_APP_PROPERTIES SOVERSION "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}"
  35. VERSION "${ARTIS_STAR_ADDONS_MAJOR}.${ARTIS_STAR_ADDONS_MINOR}")
  36. #
  37. # Debug mode
  38. #
  39. IF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
  40. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
  41. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++17 -pthread")
  42. IF (UNIX)
  43. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic")
  44. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
  45. ENDIF (UNIX)
  46. ENDIF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
  47. if (CMAKE_BUILD_TYPE STREQUAL "")
  48. SET(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build" FORCE)
  49. endif ()
  50. #
  51. # Modules
  52. #
  53. INCLUDE(CheckIncludeFileCXX)
  54. INCLUDE(CheckIncludeFile)
  55. INCLUDE(CheckLibraryExists)
  56. INCLUDE(CMakeDetermineCCompiler)
  57. #
  58. # Check libraries with pkgconfig
  59. #
  60. FIND_PACKAGE(PkgConfig REQUIRED)
  61. PKG_CHECK_MODULES(ARTIS REQUIRED artis-star-1.0)
  62. #
  63. # Boost libraries.
  64. #
  65. set(Boost_USE_STATIC_LIBS OFF)
  66. set(Boost_USE_MULTITHREADED ON)
  67. set(Boost_USE_STATIC_RUNTIME OFF)
  68. find_package(Boost 1.71.0 COMPONENTS mpi serialization)
  69. #
  70. # Generate the config.h
  71. #
  72. CHECK_INCLUDE_FILE_CXX(cxxabi.h ARTIS_STAR_ADDONS_HAVE_GCC_ABI_DEMANGLE)
  73. CHECK_INCLUDE_FILE_CXX(execinfo.h ARTIS_STAR_ADDONS_HAVE_EXECINFO)
  74. CHECK_INCLUDE_FILE_CXX(signal.h ARTIS_STAR_ADDONS_HAVE_SIGNAL)
  75. #
  76. # Generate the artis-star-addons.pc pkg-config file.
  77. #
  78. SET(ARTIS_STAR_ADDONS_PKGCONFIG_PREFIXPATH "${CMAKE_INSTALL_PREFIX}")
  79. SET(ARTIS_STAR_ADDONS_PKGCONFIG_BOOSTINCLUDE_DIRS "${Boost_INCLUDE_DIRS}")
  80. SET(ARTIS_STAR_ADDONS_PKGCONFIG_LIBDIR "lib")
  81. CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/artis-star-addons.pc.in
  82. ${ARTIS_STAR_ADDONS_BINARY_DIR}/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}.pc @ONLY)
  83. INSTALL(FILES ${ARTIS_STAR_ADDONS_BINARY_DIR}/artis-star-addons-${ARTIS_STAR_ADDONS_VERSION_SHORT}.pc
  84. DESTINATION lib/pkgconfig)
  85. #
  86. # Install the README
  87. #
  88. IF (UNIX)
  89. INSTALL(FILES "README" DESTINATION "${ARTIS_STAR_ADDONS_SHARE_DIRS}")
  90. INSTALL(FILES "COPYING" DESTINATION "${ARTIS_STAR_ADDONS_SHARE_DIRS}")
  91. ELSE (UNIX)
  92. INSTALL(FILES "README" DESTINATION "${ARTIS_STAR_ADDONS_SHARE_DIRS}" RENAME "Readme.txt")
  93. INSTALL(FILES "COPYING" DESTINATION "${ARTIS_STAR_ADDONS_SHARE_DIRS}" RENAME "CopyRight.txt")
  94. ENDIF (UNIX)
  95. #
  96. # Add sources for a target
  97. # add_sources(<target> <source1> [<source2> ...])
  98. #
  99. function(ADD_SOURCES target)
  100. get_property(prop_defined GLOBAL PROPERTY ${target}_SRCS DEFINED)
  101. if(NOT prop_defined)
  102. define_property(GLOBAL PROPERTY ${target}_SRCS
  103. BRIEF_DOCS "Sources for the ${target} target"
  104. FULL_DOCS "List of source files for the ${target} target")
  105. endif()
  106. set(SRCS)
  107. foreach(src ${ARGN})
  108. if(NOT IS_ABSOLUTE "${src}")
  109. get_filename_component(src "${src}" ABSOLUTE)
  110. endif()
  111. list(APPEND SRCS "${src}")
  112. endforeach()
  113. set_property(GLOBAL APPEND PROPERTY "${target}_SRCS" "${SRCS}")
  114. endfunction()
  115. #
  116. # Browse the src subdirectory
  117. #
  118. ADD_SUBDIRECTORY(src)
  119. #
  120. # Status
  121. #
  122. MESSAGE(STATUS "- - - -")
  123. MESSAGE(STATUS "${ARTIS_STAR_ADDONS_NAME} configured successfully")
  124. MESSAGE(STATUS "Using ${CMAKE_INSTALL_PREFIX} for installation")
  125. MESSAGE(STATUS "Build type ${CMAKE_BUILD_TYPE}")
  126. IF (ARTIS_STAR_ADDONS_HAVE_GCC_ABI_DEMANGLE)
  127. MESSAGE(STATUS "Build with GCC ABI Demangle...: yes")
  128. ENDIF (ARTIS_STAR_ADDONS_HAVE_GCC_ABI_DEMANGLE)
  129. IF (ARTIS_STAR_ADDONS_HAVE_EXECINFO)
  130. MESSAGE(STATUS "Build with execinfo.h.........: yes")
  131. ENDIF (ARTIS_STAR_ADDONS_HAVE_EXECINFO)
  132. IF (Boost_FOUND)
  133. MESSAGE(STATUS "Build with boost..............: yes")
  134. ENDIF (Boost_FOUND)
  135. MESSAGE(STATUS "- - - -")