-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
128 lines (105 loc) · 4.38 KB
/
Copy pathCMakeLists.txt
File metadata and controls
128 lines (105 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
cmake_minimum_required(VERSION 3.14)
project(cppdb VERSION 0.6.0)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
option(WITH_SQLITE "Enable SQLite backend" OFF)
option(WITH_MYSQL "Enable MySQL backend" ON)
option(WITH_PQ "Enable PostgreSQL backend" OFF)
option(WITH_ODBC "Enable ODBC backend" OFF)
option(WITH_TEST "Enable Tests" OFF)
option(WITH_EXAMPLE "Enable Examples" OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) # for shared library
# Basic common configuration
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE
RelWithDebInfo
CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif(NOT CMAKE_BUILD_TYPE)
# Main library configuration
set(CPPDB_SRC
src/utils.cpp
src/driver_manager.cpp
src/conn_manager.cpp
src/pool.cpp
src/backend.cpp
src/frontend.cpp)
add_library(${PROJECT_NAME} STATIC ${CPPDB_SRC})
add_library(cppdb::cppdb ALIAS ${PROJECT_NAME})
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads)
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
target_compile_definitions(
${PROJECT_NAME} PRIVATE CPPDB_MAJOR=${PROJECT_VERSION_MAJOR} CPPDB_MINOR=${PROJECT_VERSION_MINOR}
CPPDB_PATCH=${PROJECT_VERSION_PATCH} CPPDB_VERSION="${PROJECT_VERSION}")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-potentially-evaluated-expression)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -Wno-potentially-evaluated-expression)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
target_compile_options(${PROJECT_NAME} PRIVATE -Wall)
elseif(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE /EHsc /W3)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
target_compile_options(${PROJECT_NAME} PRIVATE -mt)
endif()
endif()
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# Backend configuration
if(WITH_SQLITE)
find_package(SQLite3 REQUIRED)
if(NOT TARGET SQLite3::SQLite3) # CMake < 4.3
add_library(SQLite3::SQLite3 ALIAS SQLite::SQLite3)
endif()
add_library(${PROJECT_NAME}_sqlite3 INTERFACE)
target_link_libraries(${PROJECT_NAME}_sqlite3 INTERFACE SQLite3::SQLite3)
add_library(cppdb::sqlite3 ALIAS ${PROJECT_NAME}_sqlite3)
target_link_libraries(${PROJECT_NAME} PUBLIC cppdb::sqlite3)
endif()
if(WITH_MYSQL)
find_package(MYSQL REQUIRED)
add_library(${PROJECT_NAME}_mysql INTERFACE)
target_link_libraries(${PROJECT_NAME}_mysql INTERFACE MYSQL::MYSQL)
add_library(cppdb::mysql ALIAS ${PROJECT_NAME}_mysql)
target_link_libraries(${PROJECT_NAME} PUBLIC cppdb::mysql)
endif()
if(WITH_PQ)
find_package(PostgreSQL REQUIRED)
add_library(${PROJECT_NAME}_postgresql INTERFACE)
target_link_libraries(${PROJECT_NAME}_postgresql INTERFACE PostgreSQL::PostgreSQL)
add_library(cppdb::postgresql ALIAS ${PROJECT_NAME}_postgresql)
target_link_libraries(${PROJECT_NAME} PUBLIC cppdb::postgresql)
endif()
if(WITH_ODBC)
find_package(ODBC REQUIRED)
add_library(${PROJECT_NAME}_odbc INTERFACE)
target_link_libraries(${PROJECT_NAME}_odbc INTERFACE ODBC::ODBC)
add_library(cppdb::odbc ALIAS ${PROJECT_NAME}_odbc)
target_link_libraries(${PROJECT_NAME} PUBLIC cppdb::odbc)
endif()
# tests
if(WITH_TEST)
add_executable(test_perf test/test_perf.cpp)
add_executable(test_basic test/test_basic.cpp)
add_executable(test_backend test/test_backend.cpp)
add_executable(test_caching test/test_caching.cpp)
target_link_libraries(test_perf ${PROJECT_NAME})
target_link_libraries(test_basic ${PROJECT_NAME})
target_link_libraries(test_backend ${PROJECT_NAME})
target_link_libraries(test_caching ${PROJECT_NAME})
endif()
# examples
if(WITH_EXAMPLE)
add_executable(example examples/example1.cpp)
target_link_libraries(example cppdb::cppdb cppdb::sqlite3)
add_executable(example_logging examples/examplelogging.cpp)
target_link_libraries(example_logging cppdb::cppdb cppdb::mysql)
endif()
include(GNUInstallDirs)
install(
TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cppdb DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})