-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
128 lines (111 loc) · 4.14 KB
/
Copy pathCMakeLists.txt
File metadata and controls
128 lines (111 loc) · 4.14 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
PROJECT(GMSHAPI CXX)
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
# put all generated files in a single folder (required in windows for exe linked to dlls)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "")
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "")
MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH)
# build type is "" by default in Linux
IF(NOT CMAKE_BUILD_TYPE)
SET( CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
ENDIF()
# enable C++11
SET(CMAKE_CXX_STANDARD 11) # newer way to set C++11 (requires cmake>3.1)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
# compiler options
IF(UNIX AND CMAKE_CXX_COMPILER_ID STREQUAL GNU)
# allows gcc5/ubuntu to link against the c++ interface
# (this does not work with mingw)
ADD_DEFINITIONS(-D_GLIBCXX_USE_CXX11_ABI=0) # libgmsh is linked to libgcc4 (pbl with std::string)
ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS)
ADD_DEFINITIONS(-D_USE_MATH_DEFINES) # for M_PI
ENDIF()
IF(APPLE)
# on macOS, do not give priority to frameworks/apps
SET(CMAKE_FIND_APPBUNDLE LAST)
SET(CMAKE_FIND_FRAMEWORK LAST)
ENDIF()
# find gmsh-sdk
# gmsh.h
FIND_PATH(GMSH_INCLUDE_DIRS NAMES "gmsh.h")
MESSAGE(STATUS "GMSH_INCLUDE_DIRS=" ${GMSH_INCLUDE_DIRS})
if(NOT GMSH_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "gmsh.h not found!")
ENDIF()
INCLUDE_DIRECTORIES(${GMSH_INCLUDE_DIRS})
# omp.h
FIND_PATH(OMP_INCLUDE_DIRS NAMES "omp.h")
MESSAGE(STATUS "OMP_INCLUDE_DIRS=" ${OMP_INCLUDE_DIRS})
if(NOT OMP_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "omp.h not found!")
ENDIF()
INCLUDE_DIRECTORIES(${OMP_INCLUDE_DIRS})
# omp library
FIND_LIBRARY(OMP_LIBRARIES gomp)
MESSAGE(STATUS "OMP_LIBRARIES=" ${OMP_LIBRARIES})
IF(NOT OMP_LIBRARIES)
MESSAGE(FATAL_ERROR "omp library not found!")
ENDIF()
message(STATUS "Checking OpenMP")
find_package(OpenMP)
IF(OPENMP_FOUND)
message("Found OpenMP! ^_^")
# add flags for OpenMP
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
ELSE()
message("Missed OpenMP! x_x")
ENDIF()
# eigen
FIND_PATH(EIGEN_INCLUDE_DIRS NAMES "eigen")
MESSAGE(STATUS "EIGEN_INCLUDE_DIRS=" ${EIGEN_INCLUDE_DIRS})
if(NOT EIGEN_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "eigen not found!")
ENDIF()
INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIRS})
# libgmsh.so
FIND_LIBRARY(GMSH_LIBRARIES gmsh)
MESSAGE(STATUS "GMSH_LIBRARIES=" ${GMSH_LIBRARIES})
IF(NOT GMSH_LIBRARIES)
MESSAGE(FATAL_ERROR "gmsh library not found!")
ENDIF()
# solver.hpp
FIND_PATH(SOLVER_INCLUDE_DIRS NAMES "solver.hpp")
MESSAGE(STATUS "SOLVER_INCLUDE_DIRS=" ${SOLVER_INCLUDE_DIRS})
if(NOT SOLVER_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "solver.hpp not found!")
ENDIF()
INCLUDE_DIRECTORIES(${SOLVER_INCLUDE_DIRS})
# parameters.hpp
FIND_PATH(PARAMETERS_INCLUDE_DIRS NAMES "parameters.hpp")
MESSAGE(STATUS "PARAMETERS_INCLUDE_DIRS=" ${PARAMETERS_INCLUDE_DIRS})
if(NOT PARAMETERS_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "parameters.hpp not found!")
ENDIF()
INCLUDE_DIRECTORIES(${PARAMETERS_INCLUDE_DIRS})
# meshing.hpp
FIND_PATH(MESHING_INCLUDE_DIRS NAMES "meshing.hpp")
MESSAGE(STATUS "MESHING_INCLUDE_DIRS=" ${MESHING_INCLUDE_DIRS})
if(NOT MESHING_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "meshing.hpp not found!")
ENDIF()
INCLUDE_DIRECTORIES(${MESHING_INCLUDE_DIRS})
# structures.hpp
FIND_PATH(STRUCTURE_INCLUDE_DIRS NAMES "structures.hpp")
MESSAGE(STATUS "STRUCTURE_INCLUDE_DIRS=" ${STRUCTURE_INCLUDE_DIRS})
if(NOT STRUCTURE_INCLUDE_DIRS)
MESSAGE(FATAL_ERROR "structures.hpp not found!")
ENDIF()
INCLUDE_DIRECTORIES(${STRUCTURE_INCLUDE_DIRS})
# gmsh.exe
FIND_PROGRAM(GMSH_EXECUTABLE gmsh)
MESSAGE(STATUS "GMSH_EXECUTABLE=" ${GMSH_EXECUTABLE})
IF(NOT GMSH_EXECUTABLE)
MESSAGE(FATAL_ERROR "gmsh executable not found!")
ENDIF()
FILE(GLOB SRCS "Meshing/*.cpp" "Parameters/*.cpp" "Solver/*.cpp" "main/*.cpp")
SET(PROG_NAME main)
ADD_EXECUTABLE(${PROG_NAME} ${SRCS})
TARGET_LINK_LIBRARIES(${PROG_NAME} ${GMSH_LIBRARIES})