-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
121 lines (103 loc) · 3.74 KB
/
CMakeLists.txt
File metadata and controls
121 lines (103 loc) · 3.74 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
##################################################
# Main build file for Polyquad
##################################################
cmake_minimum_required(VERSION 3.15)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project(polyquad VERSION 1.1.0 DESCRIPTION "Polyquad" LANGUAGES CXX)
include(CheckIncludeFiles)
include(GNUInstallDirs)
# Add our custom CMake module dir
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
##################################################
# Default build settings
##################################################
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE)
endif()
# C++17 and warnings
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(UNIX)
add_compile_options(-Wno-deprecated)
endif()
##################################################
# Source files
##################################################
SET(POLYQUAD_HEADERS
src/actions/eval.hpp
src/actions/expand.hpp
src/actions/find.hpp
src/actions/iterate.hpp
src/shapes/base.hpp
src/shapes/hex.hpp
src/shapes/quad.hpp
src/shapes/tet.hpp
src/shapes/tri.hpp
src/shapes/pyr.hpp
src/shapes/pri.hpp
src/utils/io.hpp
src/utils/eigen_addons.hpp
src/utils/ortho_poly.hpp
src/utils/serialization.hpp
src/utils/timer.hpp)
##################################################
# Executable
##################################################
add_executable(polyquad src/main.cpp ${POLYQUAD_HEADERS})
##################################################
# Internal includes, these must come before the
# located dependencies!
##################################################
target_include_directories(polyquad
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}
)
##################################################
# External dependencies
##################################################
find_package(Eigen3 3.4 REQUIRED CONFIG)
target_link_libraries(polyquad PRIVATE Eigen3::Eigen)
get_target_property(EIGEN3_INCLUDE Eigen3::Eigen INTERFACE_INCLUDE_DIRECTORIES)
target_include_directories(polyquad PRIVATE ${EIGEN3_INCLUDE}/unsupported)
set(POLYQUAD_BOOST_LIBS program_options serialization)
find_package(Boost 1.74 REQUIRED CONFIG COMPONENTS ${POLYQUAD_BOOST_LIBS})
target_link_libraries(polyquad PRIVATE Boost::program_options Boost::serialization)
##################################################
# MPI
##################################################
find_package(MPI)
if(TARGET MPI::MPI_CXX)
find_package(Boost 1.74 CONFIG COMPONENTS mpi)
if(TARGET Boost::mpi)
target_link_libraries(polyquad PRIVATE Boost::mpi MPI::MPI_CXX)
set(POLYQUAD_HAVE_MPI 1)
endif()
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
option(POLYQUAD_USE_MULTIPRECISION "Enable multi-precision arithmetic support" OFF)
else()
option(POLYQUAD_USE_MULTIPRECISION "Enable multi-precision arithmetic support" ON)
endif()
if(POLYQUAD_USE_MULTIPRECISION)
set(POLYQUAD_HAVE_MULTIPRECISION 1)
endif()
##################################################
# Build type and optimisation
##################################################
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
target_compile_options(polyquad PRIVATE -O3 -march=native)
endif()
##################################################
# Date & compiler info
##################################################
include(Today)
today(POLYQUAD_BUILD_DATE)
#INCLUDE(GetGitRevisionDescription)
#GET_GIT_HEAD_REVISION(GIT_REFSPEC POLYQUAD_GIT_SHA1)
##################################################
# Config.h
##################################################
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/config.h)