-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
208 lines (176 loc) · 5.88 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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
cmake_minimum_required(VERSION 3.14)
project(MPMUtils)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_INSTALL_LIBDIR ${CMAKE_BINARY_DIR}/lib) # for ROOT_GENERATE_DICTIONARY
## how to require compile standards:
set(CMAKE_C_STANDARD 99) # sqlite3.c complains under c90 about 'long long' type
set(CMAKE_C_STANDARD_REQUIRED ON)
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
INCLUDE(CXXWarnings.cmake)
INCLUDE(DefaultBuildType.cmake)
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O3")
#####################
# locate dependencies
###########
# libconfig
###########
find_library(CONFIG_LIBS config++)
LIST(APPEND EXTLIBS ${CONFIG_LIBS})
#########
# libuuid
#########
find_library(UUID_LIB uuid)
find_path(UUID_INCLUDE uuid/uuid.h)
message(STATUS "uuid/uuid.h headers in " ${UUID_INCLUDE} ", library " ${UUID_LIB})
if(UUID_INCLUDE OR UUID_LIB)
include_directories(${UUID_INCLUDE})
list(APPEND EXTLIBS ${UUID_LIB})
else()
message(FATAL_ERROR "libuuid library or headers not found --- maybe install libuuid-devel package?")
endif()
#######
# ALSA
#######
find_package(ALSA)
if(${ALSA_FOUND})
include_directories(SYSTEM ${ALSA_INCLUDE_DIRS})
list(APPEND EXTLIBS ${ALSA_LIBRARIES})
list(APPEND CXXOPTS "-DWITH_ALSA")
endif()
########
# OpenGL
########
set(OpenGL_GL_PREFERENCE "GLVND" CACHE STRING "OpenGL version option, LEGACY or GLVND" FORCE)
find_package(GLUT)
find_package(OpenGL)
if(${GLUT_FOUND} AND ${OPENGL_FOUND})
include_directories(SYSTEM ${GLUT_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR})
list(APPEND EXTLIBS ${GLUT_LIBRARIES} ${OPENGL_LIBRARIES})
list(APPEND CXXOPTS "-DWITH_OPENGL")
endif()
#######
# BOOST
#######
find_package(Boost REQUIRED COMPONENTS fiber)
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
LIST(APPEND EXTLIBS ${Boost_LIBRARIES})
#####
# GSL
#####
find_package(GSL REQUIRED)
LIST(APPEND EXTLIBS ${GSL_LIBRARIES})
#######
# FFTW3
#######
find_library(FFTW_LIBS fftw3)
if(FFTW_LIBS-NOTFOUND OR NO_FFTW)
message(STATUS "Disabling FFTW3 dependency")
add_compile_options("-DWITHOUT_FFTW")
else()
#add_compile_options("-DWITH_FFTW_FLOAT128")
#LIST(APPEND EXTLIBS ${FFTW_LIBS} fftw3f fftw3l fftw3q quadmath m)
LIST(APPEND EXTLIBS ${FFTW_LIBS} m)
endif()
#####
# MPI
#####
find_package(MPI)
if(MPI_FOUND AND NOT NO_MPI)
add_compile_options("-DWITH_MPI")
include_directories(SYSTEM ${MPI_INCLUDE_PATH})
LIST(APPEND EXTLIBS ${MPI_LIBRARIES})
add_compile_options(${MPI_COMPILE_FLAGS})
else()
message(STATUS "MPI dependencies disabled.")
endif()
######
# ROOT
######
find_package(ROOT REQUIRED COMPONENTS MathCore MathMore Core RIO Hist Tree Minuit)
LIST(APPEND EXTLIBS ${ROOT_LIBRARIES})
include_directories(SYSTEM ${ROOT_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR}/ROOTUtils/)
include("${ROOT_USE_FILE}")
ROOT_GENERATE_DICTIONARY(mpmu_Dict "CumulativeData.hh" "TCumulative.hh" "TCumulativeMap.hh" "TDynamicHistogram.hh" LINKDEF "ROOTUtils/LinkDef.h" OPTIONS "")
list(APPEND SOURCE_FILES "mpmu_Dict.cxx")
######
# HDF5
######
find_package(HDF5 REQUIRED COMPONENTS C HL)
message(STATUS "Including HDF5 paths '${HDF5_INCLUDE_DIRS}' and libraries '${HDF5_LIBRARIES}' in '${HDF5_LIBRARY_DIRS}'")
include_directories(SYSTEM ${HDF5_INCLUDE_DIRS})
LIST(APPEND EXTLIBS ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES})
########
# Geant4
########
# Find Geant4 package, activating all available UI and Vis drivers by default
# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui
# to build a batch mode only executable
option(WITH_GEANT4_UIVIS "Build with Geant4 UI and Vis drivers" ON)
if(WITH_GEANT4_UIVIS)
find_package(Geant4 REQUIRED ui_all vis_all)
else()
find_package(Geant4 REQUIRED)
endif()
include(${Geant4_USE_FILE})
Message(STATUS "Geant4_USE_FILE = ${Geant4_USE_FILE}")
LIST(APPEND EXTLIBS ${Geant4_LIBRARIES})
#########################
# Choose objects to build
foreach(dir IN ITEMS Delta Deprecated External Exegete Framework HDF5 JobControl
Math Matrix Physics Physics/MCNParse ROOTUtils Socket Sound Utility Visualization )
include_directories(${PROJECT_SOURCE_DIR}/${dir})
file(GLOB DIRSRC ${dir}/*.c*)
LIST(APPEND SOURCE_FILES ${DIRSRC})
endforeach(dir)
# additional required libraries
find_library(LIB_PTHREAD pthread REQUIRED)
list(APPEND EXTLIBS ${LIB_PTHREAD})
find_library(LAPACKE_LIBS lapacke)
if(LAPACKE_LIBS)
add_compile_options("-DWITH_LAPACKE")
LIST(APPEND EXTLIBS ${LAPACKE_LIBS})
find_path(LAPACKE_INCLUDE lapacke/lapacke.h)
message(STATUS "lapacke include library ${LAPACKE_LIBS}, include ${LAPACKE_INCLUDE}")
if(LAPACKE_INCLUDE)
include_directories(SYSTEM ${LAPACKE_INCLUDE}/lapacke/)
endif()
else()
LIST(REMOVE_ITEM SOURCE_FILES ${PROJECT_SOURCE_DIR}/Matrix/TLS_Solver.cc)
endif()
################
# git SHA tag
################
INCLUDE(GitRepoTag.cmake)
SET_SOURCE_FILES_PROPERTIES(Framework/CodeVersion.cc PROPERTIES COMPILE_DEFINITIONS "${CODEVERSION_COMPILE_DEFS}")
################
# build targets
################
# CXXFLAGS compile options, for c++ only.
LIST(REMOVE_DUPLICATES CXXOPTS)
message(STATUS "c++ compiler flags:")
FOREACH(CXXOPT ${CXXOPTS})
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:${CXXOPT}>)
message(STATUS "\t${CXXOPT}")
ENDFOREACH()
LIST(REMOVE_DUPLICATES EXTLIBS)
message(STATUS "Link libraries:")
foreach(l ${EXTLIBS})
message(STATUS "\t${l}")
endforeach(l)
# libMPM omnibus
add_library(MPM SHARED ${SOURCE_FILES})
target_compile_features(MPM PUBLIC cxx_std_14)
target_link_libraries(MPM ${EXTLIBS})
# test programs
file(GLOB TESTEXEC Test/*.cc)
foreach(E ${TESTEXEC})
get_filename_component(EXN ${E} NAME_WE)
add_executable(${EXN} ${E} ${TESTMODULES})
target_link_libraries(${EXN} MPM ${EXTLIBS})
endforeach(E)
file(GLOB TESTMODULES Test/modules/*.cc)
target_sources(mpmexamples PUBLIC ${TESTMODULES})
add_subdirectory(Doc)