-
Notifications
You must be signed in to change notification settings - Fork 2
/
CMakeLists.txt
147 lines (117 loc) · 4.61 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
# Require a certain version of cmake
cmake_minimum_required(VERSION 3.7.0 )
# Set the name of the project
project(GEMSGUI VERSION 4.3.5 LANGUAGES CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_MACOSX_RPATH ON)
# Set libraries to be compiled with position independent code mode (i.e., fPIC option in GNU compilers)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Set the cmake module path of the project
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
# Define variables with the GNU standard installation directories
include(GNUInstallDirs)
# Set the cmake module path of the project
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
# Use ccache to speed up repeated compilations
include(CCache)
# Ensure proper configuration if in a conda environment
include(CondaAware)
# Define which types of libraries to build
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
option(BUILD_SHARED_LIBS "Build shared libraries." OFF)
else()
option(BUILD_SHARED_LIBS "Build shared libraries." ON)
endif()
option(BUILD_STATIC_LIBS "Build static libraries." ON)
option(BUILD_APP "Build application." ON)
option(USE_THERMOFUN "Use ThermoFun" ON)
option(BUILD_NLOHMANNJSON "Use nlohmann json." OFF)
option(USE_QT6 "Prefer Qt6 over Qt5 if available" ON)
# Cannot currently produce a dynamic library using MSVC, only a static library
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
set(BUILD_SHARED_LIBS OFF)
endif()
# Used into conda only
if(DEFINED ENV{CONDA_PREFIX})
option(USE_SPDLOG_PRECOMPILED "Use spdlog in compiled version" ON)
else()
option(USE_SPDLOG_PRECOMPILED "Use spdlog in compiled version" OFF)
endif()
# Set the default build type to Release
if(NOT CMAKE_BUILD_TYPE)
# The build type selection for the project
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the build type for ${PROJECT_NAME}." FORCE)
# The build type options for the project
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
endif()
# Set the list of compiler flags for GNU compiler
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
add_compile_options(-Wall -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow)
endif()
# Set the list of compiler flags for Clang compiler
if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
add_compile_options(-Wall -Wno-ignored-attributes -Wno-pedantic -Wno-variadic-macros -Wno-deprecated)
endif()
# Set the list of compiler flags for Intel compiler
if(${CMAKE_CXX_COMPILER_ID} MATCHES "Intel")
add_compile_options(-Wall -Wno-stringop-truncation -Wno-array-bounds -Wno-stringop-overflow)
endif()
# Set the list of compiler flags for MSVC compiler
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
add_compile_options(
/D_SCL_SECURE_NO_WARNINGS
/D_CRT_SECURE_NO_WARNINGS=1
/MP4
/EHsc
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
/DNOMINMAX
)
endif()
# Set the source directory path
set(GEMSGUI_MODULES_SOURCE_DIR ${CMAKE_SOURCE_DIR}/Modules)
set(GEMSGUI_GUI_SOURCE_DIR ${CMAKE_SOURCE_DIR}/GUI)
# Set the include directories
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${GEMSGUI_MODULES_SOURCE_DIR})
include_directories(${GEMSGUI_MODULES_SOURCE_DIR}/Submods)
include_directories(${GEMSGUI_MODULES_SOURCE_DIR}/Numerics)
include_directories(${GEMSGUI_GUI_SOURCE_DIR})
include_directories(${GEMSGUI_GUI_SOURCE_DIR}/charts)
include_directories(${GEMSGUI_GUI_SOURCE_DIR}/Services4)
include_directories(${GEMSGUI_GUI_SOURCE_DIR}/Dialogs4)
include_directories(${GEMSGUI_GUI_SOURCE_DIR}/Dataman)
#include_directories("/usr/local/include/GEMS3K")
if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
include_directories("/usr/local/include")
link_directories("/usr/local/lib")
endif()
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
include_directories("c:/usr/local/include")
link_directories("c:/usr/local/lib")
endif()
# Find all GEMSGUI dependencies
include(GEMSGUIFindDeps)
# Set some necessary definitions
add_definitions(-DNODEARRAYLEVEL)
add_definitions(-DNO_JSONIO)
if(USE_THERMOFUN MATCHES ON)
add_definitions(-DUSE_THERMOFUN)
add_definitions(-DUSE_THERMO_LOG)
endif()
if(BUILD_NLOHMANNJSON MATCHES ON)
add_definitions(-DUSE_NLOHMANNJSON)
endif()
# Build libraries
add_subdirectory(Modules)
add_subdirectory(GUI)
# make application
if(BUILD_APP)
add_subdirectory(App)
endif()
# Copy Resources folder
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/Resources
DESTINATION ${CMAKE_BINARY_DIR}/App)
# Install the cmake config files that permit users to use find_package(ThermoFunGui)
#include(ThermoFunGuiInstallCMakeConfigFiles)