CMakeLists.txt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. cmake_minimum_required(VERSION 3.20)
  2. project(mcl LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED on)
  5. # Includes
  6. include(GNUInstallDirs)
  7. include(CMakePackageConfigHelpers)
  8. # Paths
  9. set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/mcl
  10. CACHE PATH "Location of include files")
  11. set(LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}
  12. CACHE PATH "Location of library files")
  13. set(SYSCONFIG_INSTALL_DIR ${CMAKE_INSTALL_SYSCONFDIR}/mcl
  14. CACHE PATH "Location of system config files")
  15. # Headers
  16. add_library(interface INTERFACE)
  17. add_library(mcl::interface ALIAS interface)
  18. target_include_directories(interface INTERFACE
  19. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes>
  20. $<INSTALL_INTERFACE:include>
  21. )
  22. # Assert
  23. add_library(mcl_assert STATIC src/assert.cpp)
  24. add_library(mcl::assert ALIAS mcl_assert)
  25. set_property(TARGET mcl_assert PROPERTY EXPORT_NAME assert)
  26. target_include_directories(mcl_assert PRIVATE
  27. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes>
  28. $<INSTALL_INTERFACE:include>
  29. )
  30. # Memory
  31. add_library(mcl_memory STATIC
  32. src/memory/sys_resource.cpp
  33. src/memory/rallocator.cpp
  34. )
  35. add_library(mcl::memory ALIAS mcl_memory)
  36. set_property(TARGET mcl_memory PROPERTY EXPORT_NAME memory)
  37. target_include_directories(mcl_memory PRIVATE
  38. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes>
  39. $<INSTALL_INTERFACE:include>
  40. )
  41. # Install
  42. install(DIRECTORY ${PROJECT_SOURCE_DIR}/includes/mcl/
  43. DESTINATION ${INCLUDE_INSTALL_DIR}
  44. )
  45. install(TARGETS mcl_assert mcl_memory
  46. EXPORT mclTargets
  47. LIBRARY
  48. DESTINATION ${LIBRARY_INSTALL_DIR}
  49. )
  50. install(EXPORT mclTargets
  51. NAMESPACE mcl::
  52. FILE mclTargets.cmake
  53. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mcl/
  54. )
  55. # Testing
  56. option(ENABLE_TESTS OFF)
  57. if(ENABLE_TESTS)
  58. enable_testing()
  59. add_subdirectory(tests)
  60. endif()
  61. # Configure package
  62. configure_package_config_file(
  63. ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in
  64. ${CMAKE_CURRENT_BINARY_DIR}/mclConfig.cmake
  65. INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mcl
  66. PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR SYSCONFIG_INSTALL_DIR
  67. )
  68. write_basic_package_version_file(
  69. ${CMAKE_CURRENT_BINARY_DIR}/mclConfigVersion.cmake
  70. VERSION 0.6.0a4
  71. COMPATIBILITY SameMajorVersion
  72. )
  73. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mclConfig.cmake
  74. ${CMAKE_CURRENT_BINARY_DIR}/mclConfigVersion.cmake
  75. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/mcl
  76. )