This repository was archived by the owner on Apr 17, 2026. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
138 lines (111 loc) · 4.27 KB
/
Copy pathCMakeLists.txt
File metadata and controls
138 lines (111 loc) · 4.27 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
136
137
138
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cmake_minimum_required (VERSION 3.2)
project (cpu_check VERSION 20181130 LANGUAGES C CXX)
# Options
# Use clang/llvm by default.
option(USE_CLANG "build with clang" ON)
# Build semi-statically by default.
option(BUILD_STATIC "build targets semi-statically linked" ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif(NOT CMAKE_BUILD_TYPE)
# Config header
configure_file (
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
include_directories("${PROJECT_BINARY_DIR}")
if (USE_CLANG)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CC clang)
set(CXX clang++)
endif(USE_CLANG)
set(CMAKE_C_FLAGS_DEBUG "-g -Wall -O0")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -O0")
set(CMAKE_C_FLAGS_RELEASE "-Wall -O2")
set(CMAKE_CXX_FLAGS_RELEASE "-Wall -O2")
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF) # we want c11 not gnu11
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) # we want c++17 not gnu++17
add_executable(cpu_check cpu_check.cc)
add_executable(crc32c_test crc32c_test.cc)
# Third party library - available as git submodule
add_library(farmhash third_party/farmhash/src/farmhash.cc)
add_library(avx avx.cc)
add_library(compressor compressor.cc)
add_library(crc32c crc32c.c)
add_library(crypto crypto.cc)
add_library(fvt_controller fvt_controller.cc)
add_library(hasher hasher.cc)
add_library(malign_buffer malign_buffer.cc)
add_library(pattern_generator pattern_generator.cc)
add_library(silkscreen silkscreen.cc)
add_library(utils utils.cc)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-march=sandybridge" ARCH_SANDYBRIDGE)
if(ARCH_SANDYBRIDGE)
target_compile_options(farmhash PUBLIC -march=sandybridge)
target_compile_options(crc32c PUBLIC -march=sandybridge)
endif(ARCH_SANDYBRIDGE)
if (BUILD_STATIC)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
endif(BUILD_STATIC)
# Needs abseil
find_package(absl REQUIRED)
target_link_libraries(compressor absl::status absl::strings)
target_link_libraries(crypto absl::status absl::strings)
target_link_libraries(fvt_controller absl::strings)
target_link_libraries(malign_buffer absl::strings)
target_link_libraries(silkscreen absl::status absl::strings)
target_link_libraries(utils absl::strings)
target_link_libraries(cpu_check absl::failure_signal_handler absl::statusor absl::strings absl::symbolize)
# Needs pthreads
find_package(Threads REQUIRED)
target_link_libraries(cpu_check Threads::Threads)
# Needs zlib
find_package (ZLIB REQUIRED)
if(ZLIB_INCLUDE_DIRS)
include_directories(${ZLIB_INCLUDE_DIRS})
endif(ZLIB_INCLUDE_DIRS)
if(ZLIB_LIBRARIES)
target_link_libraries(cpu_check ${ZLIB_LIBRARIES})
target_link_libraries(compressor ${ZLIB_LIBRARIES})
target_link_libraries(hasher ${ZLIB_LIBRARIES})
endif(ZLIB_LIBRARIES)
# Needs OpenSSL
find_package (OpenSSL REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIRS})
target_link_libraries(cpu_check ${OPENSSL_LIBRARIES})
target_link_libraries(crypto ${OPENSSL_LIBRARIES})
target_link_libraries(hasher ${OPENSSL_LIBRARIES})
# Static linking of OpenSSL may require -ldl, link it if found.
find_library (dl dl)
if(dl)
target_link_libraries(cpu_check dl)
endif(dl)
# link malign_buffer first as it has a lot of dependencies.
target_link_libraries(malign_buffer utils)
target_link_libraries(crc32c_test crc32c)
target_link_libraries(compressor malign_buffer)
target_link_libraries(crypto malign_buffer)
target_link_libraries(hasher crc32c farmhash malign_buffer utils)
target_link_libraries(pattern_generator malign_buffer)
target_link_libraries(silkscreen utils)
target_link_libraries(cpu_check avx compressor crc32c crypto fvt_controller hasher malign_buffer pattern_generator silkscreen utils)
install (TARGETS cpu_check DESTINATION bin)