-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathCMakeLists.txt.in
More file actions
128 lines (104 loc) · 4.24 KB
/
Copy pathCMakeLists.txt.in
File metadata and controls
128 lines (104 loc) · 4.24 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.5...3.29)
project(duckdb-odbc C CXX)
find_package(ODBC)
find_package(Threads REQUIRED)
set(CMAKE_CXX_STANDARD "17" CACHE STRING "C++ standard to enforce")
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
if(NOT ODBC_FOUND)
message(FATAL_ERROR "No ODBC found; you need to install unixodbc-dev.")
endif()
# variables set by vendor.py
set(DUCKDB_INCLUDE_DIRS
${INCLUDES})
set(JEMALLOC_INCLUDE_DIRS
${JEMALLOC_INCLUDES})
set(DUCKDB_DEFINITIONS
${DEFINES})
set(DUCKDB_SRC_FILES
${SOURCES})
set(JEMALLOC_SRC_FILES
${JEMALLOC_SOURCES})
set(LINK_LIB_LIST "")
if(ODBC_FOUND)
message(STATUS "ODBC library found at: " ${ODBC_LIBRARIES})
get_filename_component(ODBC_LIB_DIR ${ODBC_LIBRARIES} DIRECTORY)
message(STATUS "ODBC library path: " ${ODBC_LIB_DIR})
find_library(ODBCINST_LIB NAMES odbcinst libodbcinst HINTS ${ODBC_LIB_DIR})
if(ODBCINST_LIB)
list(APPEND LINK_LIB_LIST ${ODBCINST_LIB})
add_definitions(-DODBC_LINK_ODBCINST)
message(STATUS "Found ODBCINST_LIB: " ${ODBCINST_LIB})
endif()
if(WIN32)
file(READ src/duckdb/src/function/table/version/pragma_version.cpp PRAGMA_VERSION_CPP_TEXT)
string(REGEX MATCH "^.*#define[ \t]+DUCKDB_VERSION[ \t]+\"v([0-9]+)\.([0-9]+)\.([0-9]+).*$" _ ${PRAGMA_VERSION_CPP_TEXT})
set(DUCKDB_ENGINE_VERSION ${CMAKE_MATCH_1}${CMAKE_MATCH_2}${CMAKE_MATCH_3})
message(STATUS "Version number parsed out from pragma_version.cpp: ${DUCKDB_ENGINE_VERSION}")
set(DUCKDB_ODBC_VERSION "00")
set(DUCKDB_WIN_COMMA_VERSiON "${DUCKDB_ENGINE_VERSION},${DUCKDB_ODBC_VERSION},00,00")
set(DUCKDB_WIN_DOT_VERSiON "${DUCKDB_ENGINE_VERSION}.${DUCKDB_ODBC_VERSION}.00.00")
configure_file(${CMAKE_CURRENT_LIST_DIR}/duckdb_odbc.rc.in ${CMAKE_CURRENT_BINARY_DIR}/duckdb_odbc.rc)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
add_subdirectory(winsetup)
list(APPEND LINK_LIB_LIST $<$<PLATFORM_ID:Windows>:odbccp32>)
list(APPEND LINK_LIB_LIST
$<$<PLATFORM_ID:Windows>:legacy_stdio_definitions>)
endif()
endif()
set(DUCKDB_SYSTEM_LIBS ${CMAKE_DL_LIBS})
if(MSVC)
set(DUCKDB_SYSTEM_LIBS ${DUCKDB_SYSTEM_LIBS} ws2_32 rstrtmgr bcrypt)
endif()
if(OSX_BUILD_UNIVERSAL)
SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE)
endif()
add_definitions(-DDUCKDB_BUILD_LIBRARY -DNO_FRAMEWORKS ${DUCKDB_DEFINITIONS})
include_directories(src/duckdb/src/include/ ${DUCKDB_INCLUDE_DIRS} ${ODBC_INCLUDE_DIRS} include third_party)
add_subdirectory(src)
set(CORE_OBJECT_FILES ${DUCKDB_SRC_FILES})
if(NOT WIN32)
list(APPEND CORE_OBJECT_FILES ${JEMALLOC_SRC_FILES})
endif()
add_library(duckdb_core_obj OBJECT ${CORE_OBJECT_FILES})
target_compile_definitions(duckdb_core_obj PRIVATE
-DDUCKDB_STATIC_BUILD
-DDUCKDB_EXTENSION_AUTOLOAD_DEFAULT
-DDUCKDB_EXTENSION_AUTOINSTALL_DEFAULT )
if(WIN32)
target_compile_options(duckdb_core_obj PRIVATE /bigobj /utf-8)
else()
target_compile_options(duckdb_core_obj PRIVATE -DDUCKDB_ENABLE_JEMALLOC)
target_include_directories(duckdb_core_obj PRIVATE ${JEMALLOC_INCLUDE_DIRS})
endif()
set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} $<TARGET_OBJECTS:duckdb_core_obj>)
if(WIN32)
list(APPEND ALL_OBJECT_FILES
duckdb_odbc.def
${CMAKE_CURRENT_BINARY_DIR}/duckdb_odbc.rc)
endif()
add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES})
target_compile_definitions(duckdb_odbc PRIVATE -DDUCKDB_STATIC_BUILD)
if(WIN32)
target_compile_options(duckdb_odbc PRIVATE /bigobj /utf-8)
endif()
set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API")
target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} )
target_link_libraries(duckdb_odbc Threads::Threads ${DUCKDB_SYSTEM_LIBS})
if(NOT WIN32)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_link_options(duckdb_odbc PRIVATE
-Bsymbolic
-Bsymbolic-functions
-fvisibility=hidden
-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/duckdb_odbc.map)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
target_link_options(duckdb_odbc PRIVATE
-fvisibility=hidden
-Wl,-exported_symbols_list,${CMAKE_CURRENT_LIST_DIR}/duckdb_odbc.exp)
endif()
endif()
if(NOT CLANG_TIDY)
add_subdirectory(test)
endif()