-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
105 lines (85 loc) · 4.01 KB
/
CMakeLists.txt
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
cmake_minimum_required(VERSION 3.16)
project(DAGHL)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "-pipe -march=native -Wfatal-errors -pthread -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
set(CMAKE_CXX_FLAGS_RELEASE "-ffast-math -DNDEBUG -O3 -g")
set(CMAKE_CXX_FLAGS_DEBUG "-rdynamic -Werror -Wpedantic -pedantic-errors -Wall -Wextra -g -fno-omit-frame-pointer -O0")
set(CMAKE_CXX_FLAGS_SANITIZE "-fsanitize=address,undefined -fno-omit-frame-pointer -g -O1")
set(CMAKE_LINKER_FLAGS_SANITIZE "-fsanitize=address,undefined")
if(CMAKE_BUILD_TYPE STREQUAL "Sanitize")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_SANITIZE}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS_SANITIZE}")
message(STATUS "Sanitizer build enabled")
endif()
# External dependencies
add_subdirectory(external/ips4o EXCLUDE_FROM_ALL)
# Build DAGHL from main.cpp
add_executable(DAGHL main.cpp)
target_include_directories(DAGHL PUBLIC datastructures)
target_link_libraries(DAGHL PRIVATE ips4o)
# Build Benchmark-DAGHL from main.cpp
add_executable(hldag_bench benchmark/hldag_bench.cpp)
target_include_directories(hldag_bench PUBLIC datastructures)
target_link_libraries(hldag_bench PRIVATE ips4o)
# Build PLL from pll.cpp
add_executable(PLL pll.cpp)
target_include_directories(PLL PUBLIC datastructures)
target_link_libraries(PLL PRIVATE ips4o)
# Build Labels vs CompressedLabel
add_executable(LabelVSCompLabel benchmark/label_vs_compressed_label.cpp)
target_include_directories(LabelVSCompLabel PUBLIC datastructures)
target_link_libraries(LabelVSCompLabel PRIVATE ips4o)
# Enable testing
enable_testing()
find_package(GTest)
if(GTest_FOUND)
add_executable(unit_test
tests/bit_vector_test.cpp
tests/bfs_tools_test.cpp
tests/drawer_test.cpp
tests/golomb_rice_test.cpp
tests/compressed_vector_test.cpp
tests/forest_test.cpp
tests/graph_test.cpp
tests/priority_queue_test.cpp
tests/utils_test.cpp
)
target_include_directories(unit_test PUBLIC datastructures)
target_link_libraries(unit_test PRIVATE GTest::gtest_main ips4o)
target_compile_options(unit_test PRIVATE -fopenmp)
add_test(NAME unit_test COMMAND unit_test)
else()
message(STATUS "GoogleTest not found, skipping unit tests")
endif()
find_package(benchmark)
if(benchmark_FOUND)
add_executable(queue_bench benchmark/queue_bench.cpp)
target_include_directories(queue_bench PUBLIC datastructures benchmark)
target_link_libraries(queue_bench PRIVATE benchmark::benchmark benchmark::benchmark_main ips4o)
if(OpenMP_CXX_FOUND)
target_link_libraries(queue_bench PUBLIC OpenMP::OpenMP_CXX)
endif()
add_executable(parr_bfs_bench benchmark/parr_bfs_bench.cpp)
target_include_directories(parr_bfs_bench PUBLIC datastructures benchmark)
target_link_libraries(parr_bfs_bench PRIVATE benchmark::benchmark benchmark::benchmark_main ips4o)
if(OpenMP_CXX_FOUND)
target_link_libraries(parr_bfs_bench PUBLIC OpenMP::OpenMP_CXX)
endif()
add_executable(edgetree_bench benchmark/edgetree_bench.cpp)
target_include_directories(edgetree_bench PUBLIC datastructures benchmark)
target_link_libraries(edgetree_bench PRIVATE benchmark::benchmark benchmark::benchmark_main ips4o)
if(OpenMP_CXX_FOUND)
target_link_libraries(edgetree_bench PUBLIC OpenMP::OpenMP_CXX)
endif()
add_executable(compress_vector_bench benchmark/compress_vector_bench.cpp)
target_include_directories(compress_vector_bench PUBLIC datastructures benchmark)
target_link_libraries(compress_vector_bench PRIVATE benchmark::benchmark benchmark::benchmark_main ips4o)
add_executable(bit_vector_bench benchmark/bit_vector_bench.cpp)
target_include_directories(bit_vector_bench PUBLIC datastructures benchmark)
target_link_libraries(bit_vector_bench PRIVATE benchmark::benchmark benchmark::benchmark_main ips4o)
else()
message(STATUS "Google Benchmark not found, skipping benchmarks")
endif()