-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (113 loc) · 5.01 KB
/
Copy pathCMakeLists.txt
File metadata and controls
135 lines (113 loc) · 5.01 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
129
130
131
132
133
134
135
cmake_minimum_required(VERSION 3.18)
project(qdata_cpp VERSION 1.0.0 LANGUAGES CXX)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the build type." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
endif()
option(QDATA_USE_TBB "Link oneTBB for multithreaded qdata/io consumers" ON)
find_package(PkgConfig QUIET)
set(QDATA_ZSTD_TARGET "")
find_package(zstd CONFIG QUIET)
if(TARGET zstd::libzstd_shared)
set(QDATA_ZSTD_TARGET zstd::libzstd_shared)
elseif(TARGET zstd::libzstd_static)
set(QDATA_ZSTD_TARGET zstd::libzstd_static)
elseif(TARGET zstd::libzstd)
set(QDATA_ZSTD_TARGET zstd::libzstd)
elseif(PkgConfig_FOUND)
pkg_check_modules(ZSTD IMPORTED_TARGET libzstd)
if(TARGET PkgConfig::ZSTD)
set(QDATA_ZSTD_TARGET PkgConfig::ZSTD)
endif()
endif()
if(NOT QDATA_ZSTD_TARGET)
message(FATAL_ERROR "zstd not found. Install zstd or expose it via CMake config or pkg-config.")
endif()
set(QDATA_TBB_TARGET "")
if(QDATA_USE_TBB)
find_package(TBB CONFIG QUIET)
if(TARGET TBB::tbb)
set(QDATA_TBB_TARGET TBB::tbb)
elseif(PkgConfig_FOUND)
pkg_check_modules(TBB IMPORTED_TARGET tbb)
if(TARGET PkgConfig::TBB)
set(QDATA_TBB_TARGET PkgConfig::TBB)
endif()
endif()
endif()
add_library(qdata INTERFACE)
add_library(qdata::qdata ALIAS qdata)
target_compile_features(qdata INTERFACE cxx_std_17)
target_compile_options(qdata
INTERFACE
$<$<CXX_COMPILER_ID:MSVC>:/bigobj>
)
target_include_directories(qdata
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(qdata INTERFACE ${QDATA_ZSTD_TARGET})
if(QDATA_TBB_TARGET)
target_link_libraries(qdata INTERFACE ${QDATA_TBB_TARGET})
target_compile_definitions(qdata INTERFACE QIO_HAS_TBB=1)
endif()
option(QDATA_BUILD_EXAMPLES "Build qdata-cpp examples" ON)
option(QDATA_BUILD_TESTS "Build qdata-cpp tests" ON)
option(QDATA_BUILD_BENCHMARKS "Build qdata-cpp benchmarks" ON)
if(QDATA_BUILD_EXAMPLES)
add_executable(qdata_mtcars_roundtrip examples/mtcars_roundtrip.cpp)
target_compile_features(qdata_mtcars_roundtrip PRIVATE cxx_std_17)
target_link_libraries(qdata_mtcars_roundtrip PRIVATE qdata)
endif()
if(QDATA_BUILD_BENCHMARKS AND QDATA_TBB_TARGET)
add_executable(qdata_benchmark benchmarks/qdata_benchmark.cpp)
target_compile_features(qdata_benchmark PRIVATE cxx_std_17)
target_link_libraries(qdata_benchmark PRIVATE qdata)
endif()
if(QDATA_BUILD_TESTS)
enable_testing()
add_executable(qdata_roundtrip_file tests/cpp/roundtrip_file.cpp)
target_compile_features(qdata_roundtrip_file PRIVATE cxx_std_17)
target_link_libraries(qdata_roundtrip_file PRIVATE qdata)
add_executable(qdata_roundtrip_memory tests/cpp/roundtrip_memory.cpp)
target_compile_features(qdata_roundtrip_memory PRIVATE cxx_std_17)
target_link_libraries(qdata_roundtrip_memory PRIVATE qdata)
add_executable(qdata_write_builtin_support tests/cpp/write_builtin_support.cpp)
target_compile_features(qdata_write_builtin_support PRIVATE cxx_std_17)
target_link_libraries(qdata_write_builtin_support PRIVATE qdata)
add_executable(qdata_buffer_api tests/cpp/buffer_api.cpp)
target_compile_features(qdata_buffer_api PRIVATE cxx_std_17)
target_link_libraries(qdata_buffer_api PRIVATE qdata)
add_test(NAME qdata_buffer_api COMMAND qdata_buffer_api)
set_tests_properties(qdata_buffer_api PROPERTIES TIMEOUT 120)
add_executable(qdata_compat_limits tests/cpp/compat_limits.cpp)
target_compile_features(qdata_compat_limits PRIVATE cxx_std_17)
target_link_libraries(qdata_compat_limits PRIVATE qdata)
add_test(NAME qdata_compat_limits COMMAND qdata_compat_limits)
set_tests_properties(qdata_compat_limits PROPERTIES TIMEOUT 120)
find_program(RSCRIPT_EXECUTABLE Rscript REQUIRED)
execute_process(
COMMAND ${RSCRIPT_EXECUTABLE} -e
"pkgs <- c('qs2', 'stringi', 'stringfish'); cat(as.integer(all(vapply(pkgs, requireNamespace, logical(1), quietly = TRUE))))"
OUTPUT_VARIABLE QDATA_HAS_R_TEST_DEPS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT QDATA_HAS_R_TEST_DEPS STREQUAL "1")
message(FATAL_ERROR "QDATA_BUILD_TESTS=ON requires Rscript with the qs2, stringi, and stringfish packages installed.")
endif()
add_test(
NAME qdata_builtin_write_support
COMMAND ${RSCRIPT_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/r/builtin_write_support.R
$<TARGET_FILE:qdata_write_builtin_support>
${CMAKE_CURRENT_BINARY_DIR}/builtin_cases
)
set_tests_properties(qdata_builtin_write_support PROPERTIES TIMEOUT 600)
add_test(
NAME qdata_roundtrip_qs2
COMMAND ${RSCRIPT_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/tests/r/roundtrip_testing.R
$<TARGET_FILE:qdata_roundtrip_file>
$<TARGET_FILE:qdata_roundtrip_memory>
)
endif()