CMakeLists.txt 17.1 KB
Newer Older
H
Hongze Cheng 已提交
1 2 3
# ================================================================================================
# Download
# ================================================================================================
H
Hongze Cheng 已提交
4 5 6 7 8 9
function(cat IN_FILE OUT_FILE)
    file(READ ${IN_FILE} CONTENTS)
    file(APPEND ${OUT_FILE} "${CONTENTS}")
endfunction(cat IN_FILE OUT_FILE)

set(CONTRIB_TMP_FILE "${CMAKE_BINARY_DIR}/deps_tmp_CMakeLists.txt.in")
wafwerar's avatar
wafwerar 已提交
10
configure_file("${TD_SUPPORT_DIR}/deps_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
11

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# taos-tools
if(${BUILD_TOOLS})
    cat("${TD_SUPPORT_DIR}/taostools_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

# taosws-rs
if(${WEBSOCKET})
    cat("${TD_SUPPORT_DIR}/taosws_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

# taosadapter
if(${BUILD_HTTP})
    MESSAGE("BUILD_HTTP is on")
else ()
    MESSAGE("BUILD_HTTP is off, use taosAdapter")
    cat("${TD_SUPPORT_DIR}/taosadapter_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

30 31
# pthread
if(${BUILD_PTHREAD})
wafwerar's avatar
wafwerar 已提交
32
    cat("${TD_SUPPORT_DIR}/pthread_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
33 34
endif()

35 36 37 38 39
# iconv
if(${BUILD_WITH_ICONV})
    cat("${TD_SUPPORT_DIR}/iconv_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

wafwerar's avatar
wafwerar 已提交
40 41 42 43 44
# jemalloc
if(${JEMALLOC_ENABLED})
    cat("${TD_SUPPORT_DIR}/jemalloc_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

45 46 47 48 49 50 51 52 53 54 55 56 57
# msvc regex
if(${BUILD_MSVCREGEX})
    cat("${TD_SUPPORT_DIR}/msvcregex_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

# wcwidth
if(${BUILD_WCWIDTH})
    cat("${TD_SUPPORT_DIR}/wcwidth_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

# wingetopt
if(${BUILD_WINGETOPT})
    cat("${TD_SUPPORT_DIR}/wingetopt_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
58 59
endif()

H
Hongze Cheng 已提交
60
# googletest
H
Hongze Cheng 已提交
61
if(${BUILD_TEST})
wafwerar's avatar
wafwerar 已提交
62 63
    cat("${TD_SUPPORT_DIR}/gtest_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
    cat("${TD_SUPPORT_DIR}/stub_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
64 65
endif(${BUILD_TEST})

H
Hongze Cheng 已提交
66
# lz4
wafwerar's avatar
wafwerar 已提交
67
cat("${TD_SUPPORT_DIR}/lz4_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
68

H
Hongze Cheng 已提交
69
# zlib
wafwerar's avatar
wafwerar 已提交
70
cat("${TD_SUPPORT_DIR}/zlib_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
71

H
Hongze Cheng 已提交
72
# cJson
wafwerar's avatar
wafwerar 已提交
73
cat("${TD_SUPPORT_DIR}/cjson_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
74

H
Hongze Cheng 已提交
75
# leveldb
H
Hongze Cheng 已提交
76
if(${BUILD_WITH_LEVELDB})
wafwerar's avatar
wafwerar 已提交
77
    cat("${TD_SUPPORT_DIR}/leveldb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
78 79
endif(${BUILD_WITH_LEVELDB})

H
Hongze Cheng 已提交
80
# rocksdb
H
Hongze Cheng 已提交
81
if(${BUILD_WITH_ROCKSDB})
wafwerar's avatar
wafwerar 已提交
82
    cat("${TD_SUPPORT_DIR}/rocksdb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
83 84 85
    add_definitions(-DUSE_ROCKSDB)
endif(${BUILD_WITH_ROCKSDB})

M
Minghao Li 已提交
86 87
# canonical-raft
if(${BUILD_WITH_CRAFT})
wafwerar's avatar
wafwerar 已提交
88
    cat("${TD_SUPPORT_DIR}/craft_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
89
    SET(BUILD_WITH_UV ON CACHE BOOL "craft need libuv" FORCE)
M
Minghao Li 已提交
90 91
endif(${BUILD_WITH_CRAFT})

M
Minghao Li 已提交
92 93
# traft
if(${BUILD_WITH_TRAFT})
wafwerar's avatar
wafwerar 已提交
94
    cat("${TD_SUPPORT_DIR}/traft_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
M
Minghao Li 已提交
95 96 97
    SET(BUILD_WITH_UV ON CACHE BOOL "traft need libuv" FORCE)
endif(${BUILD_WITH_TRAFT})

H
Hongze Cheng 已提交
98 99
#libuv
if(${BUILD_WITH_UV})
wafwerar's avatar
wafwerar 已提交
100
    cat("${TD_SUPPORT_DIR}/libuv_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
101 102
endif(${BUILD_WITH_UV})

H
Hongze Cheng 已提交
103
# bdb
H
Hongze Cheng 已提交
104 105 106
if(${BUILD_WITH_BDB})
    cat("${TD_SUPPORT_DIR}/bdb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif(${BUILD_WITH_BDB})
H
Hongze Cheng 已提交
107

H
Hongze Cheng 已提交
108
# sqlite
H
Hongze Cheng 已提交
109
if(${BUILD_WITH_SQLITE})
wafwerar's avatar
wafwerar 已提交
110
    cat("${TD_SUPPORT_DIR}/sqlite_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
111 112
endif(${BUILD_WITH_SQLITE})

H
Hongze Cheng 已提交
113
# lucene
H
Hongze Cheng 已提交
114
if(${BUILD_WITH_LUCENE})
wafwerar's avatar
wafwerar 已提交
115
    cat("${TD_SUPPORT_DIR}/lucene_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
116 117 118
    add_definitions(-DUSE_LUCENE)
endif(${BUILD_WITH_LUCENE})

H
Hongze Cheng 已提交
119
# NuRaft
H
Hongze Cheng 已提交
120
if(${BUILD_WITH_NURAFT})
wafwerar's avatar
wafwerar 已提交
121
    cat("${TD_SUPPORT_DIR}/nuraft_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
H
Hongze Cheng 已提交
122 123
endif(${BUILD_WITH_NURAFT})

wafwerar's avatar
wafwerar 已提交
124 125 126 127 128
# crashdump
if(${BUILD_CRASHDUMP})
    cat("${TD_SUPPORT_DIR}/crashdump_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif(${BUILD_CRASHDUMP})

wafwerar's avatar
wafwerar 已提交
129 130
# addr2line
if(${BUILD_ADDR2LINE})
wafwerar's avatar
wafwerar 已提交
131 132 133 134
    if(NOT ${TD_WINDOWS})
        cat("${TD_SUPPORT_DIR}/libdwarf_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
        cat("${TD_SUPPORT_DIR}/addr2line_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
    endif(NOT ${TD_WINDOWS})
wafwerar's avatar
wafwerar 已提交
135 136
endif(${BUILD_ADDR2LINE})

D
Dingle Zhang 已提交
137 138 139 140 141
# geos
if(${BUILD_GEOS})
    cat("${TD_SUPPORT_DIR}/geos_CMakeLists.txt.in" ${CONTRIB_TMP_FILE})
endif()

H
Hongze Cheng 已提交
142
# download dependencies
wafwerar's avatar
wafwerar 已提交
143
configure_file(${CONTRIB_TMP_FILE} "${TD_CONTRIB_DIR}/deps-download/CMakeLists.txt")
H
Hongze Cheng 已提交
144
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
wafwerar's avatar
wafwerar 已提交
145
        WORKING_DIRECTORY "${TD_CONTRIB_DIR}/deps-download")
H
Hongze Cheng 已提交
146
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
wafwerar's avatar
wafwerar 已提交
147
        WORKING_DIRECTORY "${TD_CONTRIB_DIR}/deps-download")
H
Hongze Cheng 已提交
148

H
Hongze Cheng 已提交
149
# ================================================================================================
H
Hongze Cheng 已提交
150
# Build
H
Hongze Cheng 已提交
151
# ================================================================================================
H
Hongze Cheng 已提交
152
# googletest
H
refact  
Hongze Cheng 已提交
153
if(${BUILD_TEST})
wafwerar's avatar
wafwerar 已提交
154
    set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
wafwerar's avatar
wafwerar 已提交
155
    add_subdirectory(googletest EXCLUDE_FROM_ALL)
X
Xiaoyu Wang 已提交
156 157 158 159
    target_include_directories(
        gtest
        PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cpp-stub/src>
    )
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    if(${TD_WINDOWS})
        target_include_directories(
            gtest
            PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cpp-stub/src_win>
        )
    endif(${TD_WINDOWS})
    if(${TD_LINUX})
        target_include_directories(
            gtest
            PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cpp-stub/src_linux>
        )
    endif(${TD_LINUX})
    if(${TD_DARWIN})
        target_include_directories(
            gtest
            PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cpp-stub/src_darwin>
        )
    endif(${TD_DARWIN})
178 179


H
refact  
Hongze Cheng 已提交
180
endif(${BUILD_TEST})
H
refact  
Hongze Cheng 已提交
181

H
Hongze Cheng 已提交
182
# cJson
H
Hongze Cheng 已提交
183
# see https://stackoverflow.com/questions/37582508/silence-cmp0048-warnings-in-vendored-projects
wafwerar's avatar
wafwerar 已提交
184
set(CMAKE_PROJECT_INCLUDE_BEFORE "${TD_SUPPORT_DIR}/EnableCMP0048.txt.in")
H
Hongze Cheng 已提交
185 186 187
option(ENABLE_CJSON_TEST "Enable building cJSON test" OFF)
option(CJSON_OVERRIDE_BUILD_SHARED_LIBS "Override BUILD_SHARED_LIBS with CJSON_BUILD_SHARED_LIBS" ON)
option(CJSON_BUILD_SHARED_LIBS "Overrides BUILD_SHARED_LIBS if CJSON_OVERRIDE_BUILD_SHARED_LIBS is enabled" OFF)
wafwerar's avatar
wafwerar 已提交
188
add_subdirectory(cJson EXCLUDE_FROM_ALL)
S
Shengliang Guan 已提交
189 190
target_include_directories(
    cjson
H
Hongze Cheng 已提交
191 192
    # see https://stackoverflow.com/questions/25676277/cmake-target-include-directories-prints-an-error-when-i-try-to-add-the-source
    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cJson>
S
Shengliang Guan 已提交
193
)
H
Hongze Cheng 已提交
194
unset(CMAKE_PROJECT_INCLUDE_BEFORE)
S
Shengliang Guan 已提交
195

H
Hongze Cheng 已提交
196
# lz4
wafwerar's avatar
wafwerar 已提交
197
add_subdirectory(lz4/build/cmake EXCLUDE_FROM_ALL)
S
Shengliang Guan 已提交
198 199 200 201 202
target_include_directories(
    lz4_static
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/lz4/lib
)

H
Hongze Cheng 已提交
203
# zlib
wafwerar's avatar
wafwerar 已提交
204
set(CMAKE_PROJECT_INCLUDE_BEFORE "${TD_SUPPORT_DIR}/EnableCMP0048.txt.in")
wafwerar's avatar
wafwerar 已提交
205
add_subdirectory(zlib EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
206
target_include_directories(
H
Haojun Liao 已提交
207 208 209 210 211 212
    zlibstatic
    PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/zlib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/zlib
)
target_include_directories(
    zlib
H
Hongze Cheng 已提交
213 214 215
    PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/zlib
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/zlib
)
H
Hongze Cheng 已提交
216
unset(CMAKE_PROJECT_INCLUDE_BEFORE)
H
Hongze Cheng 已提交
217 218 219

# leveldb
if(${BUILD_WITH_LEVELDB})
H
more  
Hongze Cheng 已提交
220
    option(LEVELDB_BUILD_TESTS "" OFF)
wafwerar's avatar
wafwerar 已提交
221
    add_subdirectory(leveldb EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
222 223 224 225 226 227 228
    target_include_directories(
        leveldb
        PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/leveldb/include>
    )
endif(${BUILD_WITH_LEVELDB})

# rocksdb
H
Hongze Cheng 已提交
229
# To support rocksdb build on ubuntu: sudo apt-get install libgflags-dev
H
Hongze Cheng 已提交
230
if(${BUILD_WITH_ROCKSDB})
dengyihao's avatar
dengyihao 已提交
231
    if(${TD_LINUX})
K
kailixu 已提交
232
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_REL} -Wno-error=maybe-uninitialized -Wno-error=unused-but-set-variable -Wno-error=unused-variable -Wno-error=unused-function -Wno-errno=unused-private-field -Wno-error=unused-result")
K
kailixu 已提交
233
        IF ("${CMAKE_BUILD_TYPE}" STREQUAL "")
K
kailixu 已提交
234 235
            SET(CMAKE_BUILD_TYPE Release)
        endif()
dengyihao's avatar
dengyihao 已提交
236
    endif(${TD_LINUX})
Y
yihaoDeng 已提交
237
    MESSAGE(STATUS "CXXXX STATUS CONFIG: " ${CMAKE_CXX_FLAGS})
dengyihao's avatar
dengyihao 已提交
238

dengyihao's avatar
dengyihao 已提交
239
    if(${TD_DARWIN})
dengyihao's avatar
dengyihao 已提交
240
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=maybe-uninitialized")
dengyihao's avatar
dengyihao 已提交
241
    endif(${TD_DARWIN})
dengyihao's avatar
dengyihao 已提交
242

T
t_max 已提交
243 244 245 246
    if (${TD_DARWIN_ARM64})
        set(HAS_ARMV8_CRC true)
    endif(${TD_DARWIN_ARM64})

dengyihao's avatar
dengyihao 已提交
247
    if (${TD_WINDOWS})
248
        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4819")
dengyihao's avatar
dengyihao 已提交
249 250
    endif(${TD_WINDOWS})

dengyihao's avatar
dengyihao 已提交
251

dengyihao's avatar
dengyihao 已提交
252
    if(${TD_DARWIN})
dengyihao's avatar
dengyihao 已提交
253 254 255 256
        option(HAVE_THREAD_LOCAL "" OFF)
        option(WITH_IOSTATS_CONTEXT "" OFF)
        option(WITH_PERF_CONTEXT "" OFF)
    endif(${TD_DARWIN})
dengyihao's avatar
dengyihao 已提交
257 258

    if(${TD_WINDOWS})
K
kailixu 已提交
259
        option(WITH_JNI "" OFF)
dengyihao's avatar
dengyihao 已提交
260
    endif(${TD_WINDOWS})
dengyihao's avatar
dengyihao 已提交
261 262 263 264 265

    if(${TD_WINDOWS})
        option(WITH_MD_LIBRARY "build with MD" OFF)
        set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib)
    endif(${TD_WINDOWS})
266 267


dengyihao's avatar
dengyihao 已提交
268
    option(WITH_FALLOCATE "" OFF)
dengyihao's avatar
dengyihao 已提交
269 270
    option(WITH_JEMALLOC "" OFF)
    option(WITH_GFLAGS "" OFF)
dengyihao's avatar
dengyihao 已提交
271
    option(PORTABLE "" ON)
dengyihao's avatar
dengyihao 已提交
272 273 274
    option(WITH_LIBURING "" OFF)
    option(FAIL_ON_WARNINGS OFF)

H
Hongze Cheng 已提交
275 276
    option(WITH_TESTS "" OFF)
    option(WITH_BENCHMARK_TOOLS "" OFF)
L
Liu Jicong 已提交
277 278
    option(WITH_TOOLS "" OFF)
    option(WITH_LIBURING "" OFF)
279
    IF (TD_LINUX)
dengyihao's avatar
dengyihao 已提交
280
    option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" OFF)
281
    ELSE()
H
refact  
Hongze Cheng 已提交
282
    option(ROCKSDB_BUILD_SHARED "Build shared versions of the RocksDB libraries" OFF)
283
    ENDIF()
wafwerar's avatar
wafwerar 已提交
284
    add_subdirectory(rocksdb EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
285 286 287 288 289
    target_include_directories(
        rocksdb
        PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/include>
    )
endif(${BUILD_WITH_ROCKSDB})
H
Hongze Cheng 已提交
290 291 292 293 294

# lucene
# To support build on ubuntu: sudo apt-get install libboost-all-dev
if(${BUILD_WITH_LUCENE})
    option(ENABLE_TEST "Enable the tests" OFF)
wafwerar's avatar
wafwerar 已提交
295
    add_subdirectory(lucene EXCLUDE_FROM_ALL)
dengyihao's avatar
dengyihao 已提交
296
    target_include_directories(
297
      lucene++
dengyihao's avatar
dengyihao 已提交
298
      PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lucene/include>
299 300
    )

H
Hongze Cheng 已提交
301
endif(${BUILD_WITH_LUCENE})
H
Hongze Cheng 已提交
302

H
Hongze Cheng 已提交
303 304
# NuRaft
if(${BUILD_WITH_NURAFT})
wafwerar's avatar
wafwerar 已提交
305
    add_subdirectory(nuraft EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
306 307
endif(${BUILD_WITH_NURAFT})

308 309
# pthread
if(${BUILD_PTHREAD})
wafwerar's avatar
wafwerar 已提交
310
    set(CMAKE_BUILD_TYPE debug)
wafwerar's avatar
wafwerar 已提交
311
    add_definitions(-DPTW32_STATIC_LIB)
wafwerar's avatar
wafwerar 已提交
312
    add_subdirectory(pthread EXCLUDE_FROM_ALL)
313
    set_target_properties(libpthreadVC3 PROPERTIES OUTPUT_NAME pthread)
wafwerar's avatar
wafwerar 已提交
314 315
    add_library(pthread INTERFACE)
    target_link_libraries(pthread INTERFACE libpthreadVC3)
316 317
endif()

wafwerar's avatar
wafwerar 已提交
318 319 320 321 322 323 324
# jemalloc
if(${JEMALLOC_ENABLED})
    include(ExternalProject)
    ExternalProject_Add(jemalloc
        PREFIX        "jemalloc"
        SOURCE_DIR    ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc
        BUILD_IN_SOURCE     1
H
Haojun Liao 已提交
325
        CONFIGURE_COMMAND  ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls
wafwerar's avatar
wafwerar 已提交
326 327 328 329 330
        BUILD_COMMAND       ${MAKE}
    )
    INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/build/include)
endif()

wafwerar's avatar
wafwerar 已提交
331 332 333 334 335 336 337 338 339 340
# crashdump
if(${BUILD_CRASHDUMP})
    add_executable(dumper "crashdump/dumper/dumper.c")
    target_link_libraries(dumper User32.lib dbghelp.lib)
    file(READ "crashdump/crasher/crasher.c" CRASHDUMP_CONTENT)
    string(REPLACE "main(" "main_crashdump(" CRASHDUMP_CONTENT "${CRASHDUMP_CONTENT}")
    file(WRITE "crashdump/crasher/crasher.c" "${CRASHDUMP_CONTENT}")
    add_library(crashdump STATIC "crashdump/crasher/crasher.c")
endif()

341 342
# iconv
if(${BUILD_WITH_ICONV})
wafwerar's avatar
wafwerar 已提交
343
    add_library(iconv STATIC iconv/win_iconv.c)
344 345 346 347
endif(${BUILD_WITH_ICONV})

# wingetopt
if(${BUILD_WINGETOPT})
wafwerar's avatar
wafwerar 已提交
348
    add_subdirectory(wingetopt EXCLUDE_FROM_ALL)
349 350 351 352 353 354 355 356 357 358 359
endif(${BUILD_WINGETOPT})

# msvcregex
if(${BUILD_MSVCREGEX})
    add_library(msvcregex STATIC "")
    target_sources(msvcregex
        PRIVATE "msvcregex/regex.c"
    )
    target_include_directories(msvcregex
        PRIVATE "msvcregex"
    )
360
    target_link_libraries(msvcregex
361 362 363 364 365
        INTERFACE Shell32
    )
    SET_TARGET_PROPERTIES(msvcregex PROPERTIES OUTPUT_NAME msvcregex)
endif(${BUILD_MSVCREGEX})

wafwerar's avatar
wafwerar 已提交
366
# wcwidth
367 368 369 370 371 372 373 374 375 376 377
if(${BUILD_WCWIDTH})
    add_library(wcwidth STATIC "")
    target_sources(wcwidth
        PRIVATE "wcwidth/wcwidth.c"
    )
    target_include_directories(wcwidth
        PRIVATE "wcwidth"
    )
    SET_TARGET_PROPERTIES(wcwidth PROPERTIES OUTPUT_NAME wcwidth)
endif(${BUILD_WCWIDTH})

M
Minghao Li 已提交
378 379 380 381 382
# CRAFT
if(${BUILD_WITH_CRAFT})
    add_library(craft STATIC IMPORTED GLOBAL)
    set_target_properties(craft PROPERTIES
        IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/craft/.libs/libraft.a"
H
Hongze Cheng 已提交
383
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/craft/include"
M
Minghao Li 已提交
384
    )
H
Hongze Cheng 已提交
385 386 387
    # target_link_libraries(craft
    #     INTERFACE pthread
    # )
M
Minghao Li 已提交
388 389
endif(${BUILD_WITH_CRAFT})

M
Minghao Li 已提交
390 391 392 393 394 395 396 397 398 399 400 401
# TRAFT
if(${BUILD_WITH_TRAFT})
    add_library(traft STATIC IMPORTED GLOBAL)
    set_target_properties(traft PROPERTIES
        IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/traft/.libs/libraft.a"
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/traft/include"
    )
    # target_link_libraries(craft
    #     INTERFACE pthread
    # )
endif(${BUILD_WITH_TRAFT})

H
Hongze Cheng 已提交
402 403
# LIBUV
if(${BUILD_WITH_UV})
wafwerar's avatar
wafwerar 已提交
404 405 406 407 408
    if (TD_WINDOWS)
        # There is no GetHostNameW function on win7.
        file(READ "libuv/src/win/util.c" LIBUV_WIN_UTIL_CONTENT)
        string(REPLACE "if (GetHostNameW(buf, UV_MAXHOSTNAMESIZE" "DWORD  nSize = UV_MAXHOSTNAMESIZE;\n  if (GetComputerNameW(buf, &nSize" LIBUV_WIN_UTIL_CONTENT "${LIBUV_WIN_UTIL_CONTENT}")
        file(WRITE "libuv/src/win/util.c" "${LIBUV_WIN_UTIL_CONTENT}")
409
    endif ()
wafwerar's avatar
wafwerar 已提交
410
    add_subdirectory(libuv EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
411 412
endif(${BUILD_WITH_UV})

H
Hongze Cheng 已提交
413 414
# BDB
if(${BUILD_WITH_BDB})
415
    add_library(bdb STATIC IMPORTED GLOBAL)
H
Hongze Cheng 已提交
416 417 418 419
    set_target_properties(bdb PROPERTIES
        IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/bdb/libdb.a"
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/bdb"
    )
420 421
    target_link_libraries(bdb
        INTERFACE pthread
H
Hongze Cheng 已提交
422
    )
H
Hongze Cheng 已提交
423 424
endif(${BUILD_WITH_BDB})

H
Hongze Cheng 已提交
425
# SQLite
426
# see https://stackoverflow.com/questions/8774593/cmake-link-to-external-library#comment58570736_10550334
H
Hongze Cheng 已提交
427
if(${BUILD_WITH_SQLITE})
428
    add_library(sqlite STATIC IMPORTED GLOBAL)
H
Hongze Cheng 已提交
429 430
    set_target_properties(sqlite PROPERTIES
        IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/sqlite/.libs/libsqlite3.a"
H
Hongze Cheng 已提交
431 432
        INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/sqlite"
    )
433 434 435
    target_link_libraries(sqlite
        INTERFACE m
        INTERFACE pthread
H
Hongze Cheng 已提交
436
    )
437
    if(NOT TD_WINDOWS)
438
        target_link_libraries(sqlite
439 440 441
            INTERFACE dl
        )
    endif(NOT TD_WINDOWS)
H
Hongze Cheng 已提交
442 443
endif(${BUILD_WITH_SQLITE})

wafwerar's avatar
wafwerar 已提交
444 445
# addr2line
if(${BUILD_ADDR2LINE})
446 447 448 449 450 451 452 453 454
    if(NOT ${TD_WINDOWS})
        check_include_file( "sys/types.h"     HAVE_SYS_TYPES_H)
        check_include_file( "sys/stat.h"      HAVE_SYS_STAT_H )
        check_include_file( "inttypes.h"      HAVE_INTTYPES_H   )
        check_include_file( "stddef.h"        HAVE_STDDEF_H   )
        check_include_file( "stdlib.h"        HAVE_STDLIB_H   )
        check_include_file( "string.h"        HAVE_STRING_H   )
        check_include_file( "memory.h"        HAVE_MEMORY_H   )
        check_include_file( "strings.h"       HAVE_STRINGS_H  )
wafwerar's avatar
wafwerar 已提交
455 456 457 458
        check_include_file( "stdint.h"        HAVE_STDINT_H   )
        check_include_file( "unistd.h"        HAVE_UNISTD_H   )
        check_include_file( "sgidefs.h"       HAVE_SGIDEFS_H  )
        check_include_file( "stdafx.h"        HAVE_STDAFX_H   )
459 460 461
        check_include_file( "elf.h"           HAVE_ELF_H      )
        check_include_file( "libelf.h"        HAVE_LIBELF_H   )
        check_include_file( "libelf/libelf.h" HAVE_LIBELF_LIBELF_H)
wafwerar's avatar
wafwerar 已提交
462 463 464 465 466 467 468
        check_include_file( "alloca.h"        HAVE_ALLOCA_H   )
        check_include_file( "elfaccess.h"     HAVE_ELFACCESS_H)
        check_include_file( "sys/elf_386.h"   HAVE_SYS_ELF_386_H  )
        check_include_file( "sys/elf_amd64.h" HAVE_SYS_ELF_AMD64_H)
        check_include_file( "sys/elf_sparc.h" HAVE_SYS_ELF_SPARC_H)
        check_include_file( "sys/ia64/elf.h"  HAVE_SYS_IA64_ELF_H )
        set(VERSION 0.3.1)
469
        set(PACKAGE_VERSION "\"${VERSION}\"")
wafwerar's avatar
wafwerar 已提交
470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
        configure_file(libdwarf/cmake/config.h.cmake config.h)
        file(GLOB_RECURSE LIBDWARF_SOURCES "libdwarf/src/lib/libdwarf/*.c")
        add_library(libdwarf STATIC ${LIBDWARF_SOURCES})
        set_target_properties(libdwarf PROPERTIES OUTPUT_NAME "libdwarf")
        if(HAVE_LIBELF_H OR HAVE_LIBELF_LIBELF_H)
            target_link_libraries(libdwarf PUBLIC libelf)
        endif()
        target_include_directories(libdwarf SYSTEM PUBLIC "libdwarf/src/lib/libdwarf" ${CMAKE_CURRENT_BINARY_DIR})
        file(READ "addr2line/addr2line.c" ADDR2LINE_CONTENT)
        string(REPLACE "static int" "int" ADDR2LINE_CONTENT "${ADDR2LINE_CONTENT}")
        string(REPLACE "static void" "void" ADDR2LINE_CONTENT "${ADDR2LINE_CONTENT}")
        string(REPLACE "main(" "main_addr2line(" ADDR2LINE_CONTENT "${ADDR2LINE_CONTENT}")
        file(WRITE "addr2line/addr2line.c" "${ADDR2LINE_CONTENT}")
        add_library(addr2line STATIC "addr2line/addr2line.c")
        target_link_libraries(addr2line PUBLIC libdwarf dl z)
        target_include_directories(addr2line PUBLIC "libdwarf/src/lib/libdwarf" )
    endif(NOT ${TD_WINDOWS})
wafwerar's avatar
wafwerar 已提交
487
endif(${BUILD_ADDR2LINE})
H
Hongze Cheng 已提交
488

D
Dingle Zhang 已提交
489 490
# geos
if(${BUILD_GEOS})
K
kailixu 已提交
491 492 493
    if(${TD_LINUX})
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS_REL}")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_REL}")
K
kailixu 已提交
494 495
        IF ("${CMAKE_BUILD_TYPE}" STREQUAL "")
            SET(CMAKE_BUILD_TYPE Release)
K
kailixu 已提交
496
        endif()
K
kailixu 已提交
497
    endif(${TD_LINUX})
D
Dingle Zhang 已提交
498 499
    option(BUILD_SHARED_LIBS "Build GEOS with shared libraries" OFF)
    add_subdirectory(geos EXCLUDE_FROM_ALL)
500
    unset(CMAKE_CXX_STANDARD CACHE) # undo libgeos's setting of global CMAKE_CXX_STANDARD
D
Dingle Zhang 已提交
501 502 503 504 505
    target_include_directories(
        geos_c
        PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/geos/include>
    )
endif(${BUILD_GEOS})
H
Hongze Cheng 已提交
506

H
Hongze Cheng 已提交
507
# ================================================================================================
H
Hongze Cheng 已提交
508
# Build test
H
Hongze Cheng 已提交
509 510
# ================================================================================================
if(${BUILD_DEPENDENCY_TESTS})
wafwerar's avatar
wafwerar 已提交
511
    add_subdirectory(test EXCLUDE_FROM_ALL)
H
Hongze Cheng 已提交
512
endif(${BUILD_DEPENDENCY_TESTS})