-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
168 lines (131 loc) · 5.9 KB
/
CMakeLists.txt
File metadata and controls
168 lines (131 loc) · 5.9 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
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
# molec - Molecular Dynamics Framework
#
# Copyright (C) 2016 Carlo Del Don (deldonc@student.ethz.ch)
# Michel Breyer (mbreyer@student.ethz.ch)
# Florian Frei (flofrei@student.ethz.ch)
# Fabian Thuring (thfabian@student.ethz.ch)
#
# This file is distributed under the MIT Open Source License.
# See LICENSE.txt for details.
cmake_minimum_required(VERSION 2.8)
project(molec C)
include(ExternalProject)
include(CMakeParseArguments)
enable_testing()
if(NOT(CMAKE_MAJOR_VERSION LESS 3) AND NOT(CMAKE_MINOR_VERSION LESS 2))
cmake_policy(SET CMP0054 OLD)
endif()
### Compiler options
# Set optimization flags (Release mode automatically adds -O3)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
message(STATUS "Using Visual C compiler")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
message(STATUS "Using GNU C compiler")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -march=native -g -fno-tree-vectorize")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-implicit-function-declaration")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
message(STATUS "Using Clang C compiler")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -march=native -fno-tree-vectorize")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-implicit-function-declaration")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
message(STATUS "Using Intel C compiler")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -march=native -no-simd -no-vec -no-fma")
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "PGI")
message(STATUS "Using PGI C compiler")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -c99")
endif()
### CMake options
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
option(MOLEC_PROFILING "Enable flags for proflinig (-fprofile-arcs)" OFF)
if(MOLEC_PROFILING)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -fprofile-arcs -ftest-coverage")
endif(MOLEC_PROFILING)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: Debug Release" FORCE)
message(STATUS "Setting build type to 'Release' as none was specified.")
endif(NOT CMAKE_BUILD_TYPE)
option(MOLEC_UNITTEST "Build the UnitTests" ON)
option(MOLEC_TIMER_ENABLE "Enable timing framework" ON)
option(MOLEC_TIMER_FORCE "Enable force timer" ${MOLEC_TIMER_ENABLE})
option(MOLEC_TIMER_INTEGRATOR "Enable integrator timer" ${MOLEC_TIMER_ENABLE})
option(MOLEC_TIMER_PERIODIC "Enable periodic timer" ${MOLEC_TIMER_ENABLE})
option(MOLEC_TIMER_SIMULATION "Enable simulation timer" ${MOLEC_TIMER_ENABLE})
option(MOLEC_TIMER_CELL_CONSTRUCTION "Enable cell construction timer" ${MOLEC_TIMER_ENABLE})
if(MOLEC_TIMER_ENABLE)
if(MOLEC_TIMER_FORCE)
add_definitions(-DMOLEC_TIME)
add_definitions(-DMOLEC_TIME_FORCE)
endif()
if(MOLEC_TIMER_INTEGRATOR)
add_definitions(-DMOLEC_TIME)
add_definitions(-DMOLEC_TIME_INTEGRATOR)
endif()
if(MOLEC_TIMER_PERIODIC)
add_definitions(-DMOLEC_TIME)
add_definitions(-DMOLEC_TIME_PERIODIC)
endif()
if(MOLEC_TIMER_SIMULATION)
add_definitions(-DMOLEC_TIME)
add_definitions(-DMOLEC_TIME_SIMULATION)
endif()
if(MOLEC_TIMER_CELL_CONSTRUCTION)
add_definitions(-DMOLEC_TIME)
add_definitions(-DMOLEC_TIME_CELL_CONSTRUCTION)
endif()
else(MOLEC_TIMER_ENABLE)
if(MOLEC_TIMER_FORCE OR MOLEC_TIMER_INTEGRATOR OR MOLEC_TIMER_PERIODIC
OR MOLEC_TIMER_SIMULAITON OR MOLEC_TIMER_CELL_CONSTRUCTION)
message(WARNING "MOLEC_TIMER_ENABLE is disabled")
endif()
endif(MOLEC_TIMER_ENABLE)
option(MOLEC_CELLLIST_COUNT "Count missrate of cell-list interactions" OFF)
if(MOLEC_CELLLIST_COUNT)
add_definitions(-DMOLEC_CELLLIST_COUNT_INTERACTION=1)
endif(MOLEC_CELLLIST_COUNT)
option(MOLEC_DUMP_COORDINATES "Writes the particle coordinates to a file" OFF)
if(MOLEC_DUMP_COORDINATES)
add_definitions(-DMOLEC_DUMP_COORDINATES=1)
endif(MOLEC_DUMP_COORDINATES)
### Build argtable
set(ARGTABLE_INSTALL_DIR "${CMAKE_BINARY_DIR}/external/argtable2/install")
set(CMAKE_EXTERNAL_ARGUMENTS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-Wno-dev
-DCMAKE_INSTALL_PREFIX=${ARGTABLE_INSTALL_DIR}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
)
ExternalProject_Add(libargtable2
URL "${CMAKE_CURRENT_SOURCE_DIR}/external/argtable2"
PREFIX "external/argtable2"
CMAKE_ARGS ${CMAKE_EXTERNAL_ARGUMENTS}
)
message(STATUS "Building argtable2 from: ${CMAKE_CURRENT_SOURCE_DIR}/external/argtable2")
# Set the link and include directories
link_directories(${ARGTABLE_INSTALL_DIR}/lib)
include_directories(${ARGTABLE_INSTALL_DIR}/include)
### Doxygen Documentation
find_package(Doxygen)
option(MOLEC_DOCUMENTATION "Create and install the HTML based API documentation (requires Doxygen)"
${DOXYGEN_FOUND})
set(DOC_DIR ${PROJECT_SOURCE_DIR}/doc)
### Compilation
file(GLOB_RECURSE MOLEC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include/molec/*.h)
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/external)
add_subdirectory(${PROJECT_SOURCE_DIR}/src)
if(MOLEC_UNITTEST)
add_subdirectory(${PROJECT_SOURCE_DIR}/test)
endif(MOLEC_UNITTEST)
if(DOXYGEN_FOUND)
add_subdirectory(${PROJECT_SOURCE_DIR}/doc)
endif(DOXYGEN_FOUND)