-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
executable file
·143 lines (118 loc) · 2.81 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
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
139
140
141
142
143
cmake_minimum_required(VERSION 2.8)
# Change the compiler BEFORE the first `project()` command to avoid an infinite loop.
# See: https://public.kitware.com/pipermail/cmake/2009-November/033133.html
if(APPLE)
# If custom llvm compilers are available, use them (for openmp
# support), otherwise disable multicore.
if(EXISTS "/usr/local/opt/llvm/bin/clang")
set(CMAKE_C_COMPILER "/usr/local/opt/llvm/bin/clang")
set(CMAKE_CXX_COMPILER "/usr/local/opt/llvm/bin/clang++")
endif()
endif()
project(libfqfft)
set(
CURVE
"BN128"
CACHE
STRING
"Default curve: one of ALT_BN128, BN128, EDWARDS, MNT4, MNT6"
)
option(
MULTICORE
"Enable parallelized execution, using OpenMP"
OFF
)
option(
WITH_PROCPS
"Use procps for memory profiling"
ON
)
option(
PROF_DOUBLE
"Use Double for profiling"
ON
)
option(
IS_LIBFQFFT_PARENT
"Install submodule dependencies if caller originates from here"
ON
)
set(
OPT_FLAGS
""
CACHE
STRING
"Override C++ compiler optimization flags"
)
if(NOT "${ROOT_DEPENDS_DIR}" STREQUAL "")
set(IS_PARENT_CMAKE OFF)
set(DEPENDS_DIR "${ROOT_DEPENDS_DIR}")
elseif("${DEPENDS_DIR}" STREQUAL "")
set(
DEPENDS_DIR
"${CMAKE_CURRENT_SOURCE_DIR}/depends"
CACHE
STRING
"Optionally specify the dependency installation directory relative to the source directory (default: inside dependency folder)"
)
else()
set(DEPENDS_DIR "${DEPENDS_DIR}")
endif()
if(APPLE)
set(WITH_PROCPS OFF)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "^(Apple)?Clang$")
# Common compilation flags and warning configuration
set(
CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wfatal-errors -pthread"
)
if("${MULTICORE}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
endif()
# Default optimizations flags (to override, use -DOPT_FLAGS=...)
if("${OPT_FLAGS}" STREQUAL "")
set(
OPT_FLAGS
"-ggdb3 -O2 -march=native -mtune=native"
)
endif()
endif()
if("${MULTICORE}")
add_definitions(-DMULTICORE=1)
endif()
set(
CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} ${OPT_FLAGS}"
)
include(FindPkgConfig)
if("${WITH_PROCPS}")
pkg_check_modules(
PROCPS
REQUIRED
libprocps
)
else()
add_definitions(
-DNO_PROCPS
)
endif()
include_directories(.)
# GMP
find_path(GMP_INCLUDE_DIR NAMES gmp.h)
find_library(GMP_LIBRARIES NAMES gmp libgmp)
find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx)
if ("${IS_LIBFQFFT_PARENT}")
enable_testing()
add_custom_target(
tutorials
COMMAND lagrange_polynomial_evaluation
COMMAND polynomial_evaluation
COMMAND polynomial_multiplication
)
# Add a `make check` target that builds and tests
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
add_subdirectory(depends)
add_subdirectory(libfqfft)
endif()
add_subdirectory(tutorials)