1- cmake_minimum_required (VERSION 3.19 )
2- set (CMAKE_CXX_STANDARD 17)
1+ cmake_minimum_required (VERSION 3.20 )
2+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
3+
4+ include (utils )
5+ datamanagement_extract_version ()
36
47project (
5- DataManagement
6- VERSION 1.0.0
8+ datamanagement
9+ VERSION ${DATAMANAGEMENT_VERSION}
710 DESCRIPTION "A Data Management Library Used By Syndemics Lab Simulation Models"
11+ LANGUAGES CXX
812)
913
10- set (CMAKE_INCLUDE_CURRENT_DIR ON )
11- set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON )
12-
13- SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
14+ message (STATUS "Build data management: ${DATAMANAGEMENT_VERSION} " )
1415
15- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /../lib)
16- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /../lib)
17- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /../bin)
18-
19- find_package (SQLite3 REQUIRED )
20- find_package (Boost REQUIRED )
16+ include (GNUInstallDirs )
2117
22- option (BUILD_TESTS "enable DataManagement unit tests" OFF )
23- if (NOT BUILD_TESTS STREQUAL OFF )
24- add_subdirectory (tests )
18+ # ---------------------------------------------------------------------------------------
19+ # Set default build to release
20+ # ---------------------------------------------------------------------------------------
21+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
22+ set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose Release or Debug" FORCE )
2523endif ()
2624
27- option (BUILD_SHARED_LIBS "Build Using Shared Libraries" ON )
25+ # ---------------------------------------------------------------------------------------
26+ # Compiler config
27+ # ---------------------------------------------------------------------------------------
28+ set (CMAKE_CXX_STANDARD 20)
29+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
30+
31+ # ---------------------------------------------------------------------------------------
32+ # Windows CXX Extensions
33+ # ---------------------------------------------------------------------------------------
34+ set (CMAKE_CXX_EXTENSIONS OFF )
35+ if (CMAKE_SYSTEM_NAME MATCHES "CYGWIN" OR CMAKE_SYSTEM_NAME MATCHES "MSYS" OR CMAKE_SYSTEM_NAME MATCHES "MINGW" )
36+ set (CMAKE_CXX_EXTENSIONS ON )
37+ endif ()
2838
29- if (BUILD_SHARED_LIBS )
30- add_library (${PROJECT_NAME} SHARED )
31- else ()
32- add_library (${PROJECT_NAME} STATIC )
39+ # ---------------------------------------------------------------------------------------
40+ # Set DATAMANAGEMENT_MASTER_PROJECT to ON if we are building synmodels directly
41+ # ---------------------------------------------------------------------------------------
42+ if (NOT DEFINED DATAMANAGEMENT_MASTER_PROJECT)
43+ if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR )
44+ set ( DATAMANAGEMENT_MASTER_PROJECT ON )
45+ else ()
46+ set ( DATAMANAGEMENT_MASTER_PROJECT OFF )
47+ endif ()
3348endif ()
3449
35- target_sources ( ${PROJECT_NAME}
36- PRIVATE
37- ${PROJECT_SOURCE_DIR} /src/DataManager.cpp
38- )
50+ # ---------------------------------------------------------------------------------------
51+ # Set all default options
52+ # ---------------------------------------------------------------------------------------
53+ include ( options )
3954
40- target_include_directories (${PROJECT_NAME}
41- PUBLIC
42- $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
43- $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} >
44- PRIVATE
45- ${Boost_INCLUDE_DIRS}
46- )
55+ # ---------------------------------------------------------------------------------------
56+ # Set position independent code
57+ # ---------------------------------------------------------------------------------------
58+ if (DATAMANAGEMENT_BUILD_PIC)
59+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
60+ endif ()
4761
48- target_link_libraries (${PROJECT_NAME}
49- PRIVATE
50- ${SQLite3_LIBRARIES}
51- ${Boost_LIBRARY_DIRS}
52- ${Boost_LIBRARIES}
53- )
62+ # ---------------------------------------------------------------------------------------
63+ # Build the library
64+ # ---------------------------------------------------------------------------------------
65+ add_library (datamanagement INTERFACE )
66+ add_library (datamanagement::datamanagement ALIAS datamanagement )
5467
55- # note that it is not CMAKE_INSTALL_PREFIX we are checking here
56- if (DEFINED CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
57- message (
58- STATUS
59- "CMAKE_INSTALL_PREFIX is not set\n "
60- "Default value: ${CMAKE_INSTALL_PREFIX} \n "
61- "Will set it to ${CMAKE_SOURCE_DIR} /install"
62- )
63- set (CMAKE_INSTALL_PREFIX
64- "${CMAKE_SOURCE_DIR} /install"
65- CACHE PATH "Where the library will be installed to" FORCE
66- )
67- else ()
68- message (
69- STATUS
70- "CMAKE_INSTALL_PREFIX was already set\n "
71- "Current value: ${CMAKE_INSTALL_PREFIX} "
72- )
68+ option (BUILD_TESTS "enable datamanagement unit tests" OFF )
69+ if (NOT BUILD_TESTS STREQUAL OFF )
70+ add_subdirectory (tests )
7371endif ()
7472
75- SET (public_headers
76- include/DataManager.hpp
77- include/DataManagerBase.hpp
73+ target_include_directories (${PROJECT_NAME}
74+ INTERFACE
75+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
76+ $<INSTALL_INTERFACE :${CMAKE_INSTALL_INCLUDEDIR} /include >
7877)
7978
80- set_target_properties (${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${public_headers} " )
81-
82- set_target_properties (${PROJECT_NAME} PROPERTIES DEBUG_POSTFIX "d" )
79+ # ---------------------------------------------------------------------------------------
80+ # Link Dependencies
81+ # ---------------------------------------------------------------------------------------
82+ include (MakeDependenciesAvailable )
8383
84- include (GNUInstallDirs )
85-
86- # install the target and create export-set
87- install (TARGETS ${PROJECT_NAME}
88- EXPORT "${PROJECT_NAME} Targets"
89- # these get default values from GNUInstallDirs, no need to set them
90- #RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # bin
91- #LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
92- #ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
93- # except for public headers, as we want them to be inside a library folder
94- PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /${PROJECT_NAME} # include/SomeLibrary
95- INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} # include
84+ target_link_libraries (${PROJECT_NAME}
85+ INTERFACE
86+ SQLiteCpp
87+ Boost::boost
88+ spdlog::spdlog
89+ Eigen3::Eigen
9690)
9791
98- # generate and install export file
99- install (EXPORT "${PROJECT_NAME} Targets"
100- FILE "${PROJECT_NAME} Targets.cmake"
101- NAMESPACE DataManagement::
102- DESTINATION cmake
103- )
92+ set_target_properties (datamanagement PROPERTIES VERSION ${DATAMANAGEMENT_VERSION} SOVERSION ${DATAMANAGEMENT_VERSION_MAJOR} .${DATAMANAGEMENT_VERSION_MINOR} )
10493
105- include (CMakePackageConfigHelpers )
94+ # ---------------------------------------------------------------------------------------
95+ # Build Tests
96+ # ---------------------------------------------------------------------------------------
97+ if (DATAMANAGEMENT_BUILD_TESTS)
98+ message (STATUS "Generating tests" )
99+ enable_testing ()
100+ add_subdirectory (tests )
101+ endif ()
106102
107- # generate the version file for the config file
108- write_basic_package_version_file (
109- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake"
110- VERSION "${version} "
111- COMPATIBILITY AnyNewerVersion
112- )
113- # create config file
114- configure_package_config_file (${CMAKE_CURRENT_SOURCE_DIR} /Config.cmake.in
115- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
116- INSTALL_DESTINATION cmake
117- )
118- # install config files
119- install (FILES
120- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
121- "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake"
122- DESTINATION cmake
123- )
103+ # ---------------------------------------------------------------------------------------
104+ # Install
105+ # ---------------------------------------------------------------------------------------
106+ if (DATAMANAGEMENT_INSTALL)
107+ include (InstallDatamanagement )
108+ endif ()
0 commit comments