CMakeLists.txt 8.22 KB
Newer Older
limm's avatar
limm committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#[===================================================================[
    parallel-hashmap library by Gregory Popovitch

    CMake projects that wish to use this library may do
    something like :

    include(FetchContent)
    FetchContent_Declare(
        parallel-hashmap
        GIT_REPOSITORY https://github.com/greg7mdp/parallel-hashmap.git
        GIT_TAG        v1.3.12 # adjust tag/branch/commit as needed
    )
    FetchContent_MakeAvailable(parallel-hashmap)

    ...
    include_directories(${parallel-hashmap_SOURCE_DIR})

#]===================================================================]

limm's avatar
limm committed
20
21
22
23
24
25
cmake_minimum_required(VERSION 3.8)

list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

include(DetectVersion)

limm's avatar
limm committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
cmake_policy(SET CMP0048 NEW)             ## set VERSION as documented by the project() command.
cmake_policy(SET CMP0076 NEW)             ## accept new policy

if(NOT CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 11)            ## compile with C++11 support
endif()

if(NOT CMAKE_CXX_STANDARD_REQUIRED)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()

if(NOT DEFINED PHMAP_MASTER_PROJECT)
    set(PHMAP_MASTER_PROJECT OFF)
    if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
        set(PHMAP_MASTER_PROJECT ON)
    endif()
endif()
limm's avatar
limm committed
43
44
45

project(phmap VERSION ${DETECTED_PHMAP_VERSION} LANGUAGES CXX)

limm's avatar
limm committed
46
47
48
49
## ----------------------------- options -----------------------------
option(PHMAP_INSTALL "Enable installation" ${PHMAP_MASTER_PROJECT})


limm's avatar
limm committed
50
51
52
53
set(PHMAP_DIR parallel_hashmap)
set(PHMAP_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap.h 
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_base.h 
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_bits.h 
limm's avatar
limm committed
54
55
56
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_config.h
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_dump.h 
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_fwd_decl.h 
limm's avatar
limm committed
57
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/phmap_utils.h 
limm's avatar
limm committed
58
59
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/meminfo.h 
                  ${CMAKE_CURRENT_SOURCE_DIR}/${PHMAP_DIR}/btree.h)
limm's avatar
limm committed
60
61
62
63
64
65
66
67
68
69
70
71

include(helpers)

add_library(${PROJECT_NAME} INTERFACE)

target_sources(${PROJECT_NAME} INTERFACE ${PHMAP_HEADERS})

target_include_directories(
     ${PROJECT_NAME} INTERFACE
     $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
     $<INSTALL_INTERFACE:include>)

limm's avatar
limm committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
if(PHMAP_INSTALL)
    include(GNUInstallDirs)
    include(CMakePackageConfigHelpers)
    
    install(
        DIRECTORY ${PROJECT_SOURCE_DIR}/${PHMAP_DIR}/
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PHMAP_DIR})
    
    install(TARGETS ${PROJECT_NAME}
            EXPORT ${PROJECT_NAME}-targets)
    
    export(EXPORT ${PROJECT_NAME}-targets
           FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
endif()
limm's avatar
limm committed
86
87

## ------------------------- building tests and examples -------------
limm's avatar
limm committed
88
89
option(PHMAP_BUILD_TESTS    "Whether or not to build the tests"    ${PHMAP_MASTER_PROJECT})
option(PHMAP_BUILD_EXAMPLES "Whether or not to build the examples" ${PHMAP_MASTER_PROJECT})
limm's avatar
limm committed
90
91
92
93
94

if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
endif()

limm's avatar
limm committed
95
if (PHMAP_BUILD_TESTS OR PHMAP_BUILD_EXAMPLES)
limm's avatar
limm committed
96
    include_directories(${PROJECT_SOURCE_DIR})
limm's avatar
limm committed
97
98
99
endif()

if (PHMAP_BUILD_TESTS)
limm's avatar
limm committed
100

limm's avatar
limm committed
101
102
103
104
105
106
107
108
    if (NOT PHMAP_GTEST_LIBS)
        include(cmake/DownloadGTest.cmake)
    
        check_target(gtest)
        check_target(gtest_main)
        check_target(gmock)
        set(PHMAP_GTEST_LIBS gmock_main)
    endif()
limm's avatar
limm committed
109
110
111
112
113

    enable_testing()

    ## ---------------- regular hash maps ----------------------------
    phmap_cc_test(NAME container_memory SRCS "tests/container_memory_test.cc"
limm's avatar
limm committed
114
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
115
116

    phmap_cc_test(NAME hash_policy_testing SRCS "tests/hash_policy_testing_test.cc"
limm's avatar
limm committed
117
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
118
119

    phmap_cc_test(NAME node_hash_policy SRCS "tests/node_hash_policy_test.cc"
limm's avatar
limm committed
120
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
121
122

    phmap_cc_test(NAME raw_hash_set SRCS "tests/raw_hash_set_test.cc"
limm's avatar
limm committed
123
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
124
125

    phmap_cc_test(NAME raw_hash_set_allocator SRCS "tests/raw_hash_set_allocator_test.cc"
limm's avatar
limm committed
126
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
127
128
129

    ## ---------------- regular hash maps ----------------------------
    phmap_cc_test(NAME flat_hash_set SRCS "tests/flat_hash_set_test.cc"
limm's avatar
limm committed
130
                  COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
131
132

    phmap_cc_test(NAME flat_hash_map SRCS "tests/flat_hash_map_test.cc"
limm's avatar
limm committed
133
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
134
135

    phmap_cc_test(NAME node_hash_map SRCS "tests/node_hash_map_test.cc"
limm's avatar
limm committed
136
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
137
138

    phmap_cc_test(NAME node_hash_set SRCS "tests/node_hash_set_test.cc"
limm's avatar
limm committed
139
                  COPTS "-DUNORDERED_SET_CXX17" DEPS  ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
140
141
142

    ## --------------- parallel hash maps -----------------------------------------------
    phmap_cc_test(NAME parallel_flat_hash_map SRCS "tests/parallel_flat_hash_map_test.cc"
limm's avatar
limm committed
143
                  COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
144
145

    phmap_cc_test(NAME parallel_flat_hash_set SRCS "tests/parallel_flat_hash_set_test.cc"
limm's avatar
limm committed
146
                  COPTS "-DUNORDERED_SET_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
147
148

    phmap_cc_test(NAME parallel_node_hash_map SRCS "tests/parallel_node_hash_map_test.cc"
limm's avatar
limm committed
149
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
150
151

    phmap_cc_test(NAME parallel_node_hash_set SRCS "tests/parallel_node_hash_set_test.cc"
limm's avatar
limm committed
152
                  COPTS "-DUNORDERED_SET_CXX17" DEPS  ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
153
154

    phmap_cc_test(NAME parallel_flat_hash_map_mutex SRCS "tests/parallel_flat_hash_map_mutex_test.cc"
limm's avatar
limm committed
155
                  COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
156
157

    phmap_cc_test(NAME dump_load SRCS "tests/dump_load_test.cc"
limm's avatar
limm committed
158
                  COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
159
160

    phmap_cc_test(NAME erase_if SRCS "tests/erase_if_test.cc"
limm's avatar
limm committed
161
                  COPTS "-DUNORDERED_MAP_CXX17" DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
162
163
164

    ## --------------- btree -----------------------------------------------
    phmap_cc_test(NAME btree SRCS "tests/btree_test.cc"
limm's avatar
limm committed
165
                  DEPS ${PHMAP_GTEST_LIBS})
limm's avatar
limm committed
166
167
168
169
170
171


endif()

if (PHMAP_BUILD_EXAMPLES)
    if(NOT MSVC)
limm's avatar
limm committed
172
173
174
175
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wdisabled-optimization -Winit-self -Wlogical-op -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wshadow -Wstrict-null-sentinel  -Wswitch-default -Wno-unused")
        if (NOT CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -Wno-gnu-zero-variadic-macro-arguments")
        endif()
limm's avatar
limm committed
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
    else()
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /Zc:__cplusplus")
    endif()

    set(THREADS_PREFER_PTHREAD_FLAG ON)
    find_package(Threads REQUIRED)

    add_executable(ex_allmaps examples/allmaps.cc phmap.natvis)
    add_executable(ex_basic examples/basic.cc phmap.natvis)
    add_executable(ex_bench examples/bench.cc phmap.natvis)
    add_executable(ex_emplace examples/emplace.cc phmap.natvis)
    if (MSVC)
        add_executable(ex_lazy_emplace_l examples/lazy_emplace_l.cc phmap.natvis)
    endif()
    add_executable(ex_serialize examples/serialize.cc phmap.natvis)
limm's avatar
limm committed
191
    #target_include_directories(ex_serialize PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../cereal/include>)
limm's avatar
limm committed
192
193
    add_executable(ex_hash_std examples/hash_std.cc phmap.natvis)
    add_executable(ex_hash_value examples/hash_value.cc phmap.natvis)
limm's avatar
limm committed
194
    add_executable(ex_hash examples/hash.cc phmap.natvis)
limm's avatar
limm committed
195
196
197
198
199
    add_executable(ex_two_files examples/f1.cc examples/f2.cc phmap.natvis)
    add_executable(ex_insert_bench examples/insert_bench.cc phmap.natvis)
    add_executable(ex_knucleotide examples/knucleotide.cc phmap.natvis)
    add_executable(ex_dump_load examples/dump_load.cc phmap.natvis)
    add_executable(ex_btree examples/btree.cc phmap.natvis)
limm's avatar
limm committed
200
    add_executable(ex_hash_bench examples/hash_bench.cc phmap.natvis)
limm's avatar
limm committed
201
    add_executable(ex_matt examples/matt.cc phmap.natvis)
limm's avatar
limm committed
202
203
    add_executable(ex_mt_word_counter examples/mt_word_counter.cc phmap.natvis)
    add_executable(ex_p_bench examples/p_bench.cc phmap.natvis)
limm's avatar
limm committed
204
205
206
207
208

    target_link_libraries(ex_knucleotide Threads::Threads)
    target_link_libraries(ex_bench Threads::Threads)
endif()