-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
118 lines (102 loc) · 3.7 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
cmake_minimum_required(VERSION 2.8)
project(frirl)
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -pg") #"-O0 -pg -std=c11"
#set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O0 -g -pg")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2")
option(BUILD_DOC "Build documentation" OFF)
option(BUILD_OPENMP "Build openmp support (experimental)" OFF)
option(BUILD_MPI "Build MPI support (experimental)" OFF)
option(BUILD_AVX2 "Build AVX2 support (experimental) (only DOUBLE_PRECISION!)" ON)
option(BUILD_VISUALIZATION "Build with visualization (GLUT) support" ON)
option(DEBUG "Debug mode" OFF)
option(FIVE_FIXRES "Fixed resolution" ON)
option(FIVE_NONAN "No NAN support in FIVE rule-bases" ON)
option(FIVE_NOINF "No INF support in FIVE rule-bases" ON)
option(FRIRL_FAST "Avoid some checks in FIVE which are always predictable in FRIRL" ON)
option(PREDICT_BRANCHES "Predict the branches (likely / unlikely) (experimental)" OFF)
option(DOUBLE_PRECISION "Double precision or single (only double precision tested!)" ON)
option(FAST_ABS "Faster fabs() implementation (experimental)" ON)
option(FAST_POW "Faster pow() implementation (experimental)" ON)
option(FAST_SQRT "Faster sqrt() implementation (experimental)" ON)
option(BUILD_CHECK_STATES "Check if the quantized states is valid, and handle it (Matlab version backward compatibility)" ON)
configure_file(config.h.in config.h)
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
if(CMAKE_C_COMPILER_VERSION VERSION_LESS "5.0")
message(FATAL_ERROR "You are trying to use GNU gcc ${CMAKE_C_COMPILER_VERSION} version, but only 5.0 or higher is supported !")
endif()
else()
message("Warning: only GNU gcc 5.0 or higher is tested! Good luck!")
endif()
if(BUILD_AVX2)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
endif()
if(BUILD_OPENMP)
find_package(OpenMP)
if (OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
else()
message(FATAL_ERROR "____>openmp not found!")
set(BUILD_OPENMP OFF)
endif()
endif()
if(BUILD_MPI)
find_package(MPI)
if (NOT MPI_C_FOUND)
message(FATAL_ERROR "____>MPI not found!")
set(BUILD_MPI OFF)
endif()
endif()
if(BUILD_DOC)
find_package(Doxygen)
if(DOXYGEN_FOUND)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc)
set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile)
set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/doxyfile)
configure_file(${doxyfile_in} ${doxyfile} @ONLY)
add_custom_target(doc ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc
)
else()
message(FATAL_ERROR "____>Doxygen not found!")
set(BUILD_DOC OFF)
endif()
endif()
if(BUILD_VISUALIZATION)
find_package(GLUT)
if (NOT GLUT_FOUND)
message(FATAL_ERROR "____>GLUT not found!")
set(BUILD_VISUALIZATION OFF)
endif()
endif()
add_subdirectory(src)
add_subdirectory(examples)
add_subdirectory(tests)
function(print_option option)
if(${option})
message("${option}")
endif()
endfunction()
message("######################")
message("Build options:")
message("")
print_option(BUILD_DOC)
print_option(BUILD_OPENMP)
print_option(BUILD_MPI)
print_option(BUILD_AVX2)
print_option(BUILD_VISUALIZATION)
print_option(DEBUG)
print_option(FIVE_FIXRES)
print_option(FIVE_NONAN)
print_option(FIVE_NOINF)
print_option(FRIRL_FAST)
print_option(PREDICT_BRANCHES)
print_option(DOUBLE_PRECISION)
print_option(FAST_ABS)
print_option(FAST_POW)
print_option(FAST_SQRT)
print_option(BUILD_CHECK_STATES)
message("######################")