-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathCMakeLists.txt
163 lines (135 loc) · 7.45 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
################################################################################
# General Informations
################################################################################
cmake_minimum_required(VERSION 3.1)
project(ElasticRods)
# CMP0063: Honor visibility properties for all target types.
if(POLICY CMP0063)
cmake_policy(SET CMP0063 NEW)
endif()
################################################################################
set(THIRD_PARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_CXX_FLAGS_RELWITHASSERT "-O3" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
set(CMAKE_C_FLAGS_RELWITHASSERT "-O3" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_RELWITHASSERT "" CACHE STRING "Flags used during RelWithAssertions builds" FORCE)
mark_as_advanced(
CMAKE_CXX_FLAGS_RELWITHASSERT
CMAKE_C_FLAGS_RELWITHASSERT
CMAKE_EXE_LINKER_FLAGS_RELWITHASSERT
CMAKE_SHARED_LINKER_FLAGS_RELWITHASSERT
CMAKE_MODULE_LINKER_FLAGS_RELWITHASSERT
CMAKE_STATIC_LINKER_FLAGS_RELWITHASSERT
)
set(CMAKE_CXX_FLAGS_RELEASENATIVE "-O3 -march=native -DNDEBUG" CACHE STRING "Flags used during native release builds" FORCE)
set(CMAKE_C_FLAGS_RELEASENATIVE "-O3 -march=native -DNDEBUG" CACHE STRING "Flags used during native release builds" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_RELEASENATIVE "" CACHE STRING "Flags used during native release builds" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASENATIVE "" CACHE STRING "Flags used during native release builds" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS_RELEASENATIVE "" CACHE STRING "Flags used during native release builds" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_RELEASENATIVE "" CACHE STRING "Flags used during native release builds" FORCE)
mark_as_advanced(
CMAKE_CXX_FLAGS_RELEASENATIVE
CMAKE_C_FLAGS_RELEASENATIVE
CMAKE_EXE_LINKER_FLAGS_RELEASENATIVE
CMAKE_SHARED_LINKER_FLAGS_RELEASENATIVE
CMAKE_MODULE_LINKER_FLAGS_RELEASENATIVE
CMAKE_STATIC_LINKER_FLAGS_RELEASENATIVE
)
set(CMAKE_CXX_FLAGS_DEBUGNATIVE "-g -march=native" CACHE STRING "Flags used during native debug builds" FORCE)
set(CMAKE_C_FLAGS_DEBUGNATIVE "-g -march=native" CACHE STRING "Flags used during native debug builds" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_DEBUGNATIVE "" CACHE STRING "Flags used during native debug builds" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS_DEBUGNATIVE "" CACHE STRING "Flags used during native debug builds" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS_DEBUGNATIVE "" CACHE STRING "Flags used during native debug builds" FORCE)
set(CMAKE_STATIC_LINKER_FLAGS_DEBUGNATIVE "" CACHE STRING "Flags used during native debug builds" FORCE)
mark_as_advanced(
CMAKE_CXX_FLAGS_DEBUGNATIVE
CMAKE_C_FLAGS_DEBUGNATIVE
CMAKE_EXE_LINKER_FLAGS_DEBUGNATIVE
CMAKE_SHARED_LINKER_FLAGS_DEBUGNATIVE
CMAKE_MODULE_LINKER_FLAGS_DEBUGNATIVE
CMAKE_STATIC_LINKER_FLAGS_DEBUGNATIVE
)
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to RelWithAssert")
set(CMAKE_BUILD_TYPE "RelWithAssert")
endif()
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "Choose the type of build. Options are: None Debug Release RelWithDebInfo MinSizeRel RelWithAssert" FORCE)
# Color output
include(UseColors)
# Make sure warnings/errors are still colorized when using Ninja for building.
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
add_definitions(-fdiagnostics-color=always)
endif()
# Export compile flags(used for autocompletion of the C++ code)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
# CMake plugin for vscode
include(CMakeToolsHelpers OPTIONAL)
# Enable more warnings
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wno-comment")
# We need -fPIC when compiling our libraries and our dependencies for
# the python bindings to link.
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
################################################################################
# Common libraries
################################################################################
if(NOT TARGET MeshFEM)
option(MESHFEM_ENABLE_BENCHMARKING "" ON)
add_subdirectory(${THIRD_PARTY_DIR}/MeshFEM)
endif()
if(NOT TARGET rotation_optimization)
add_subdirectory(${THIRD_PARTY_DIR}/RotationOptimization)
endif()
add_subdirectory(${THIRD_PARTY_DIR}/visvalingam_simplify)
find_package(Spectra REQUIRED)
# libigl
option(LIBIGL_WITH_OPENGL "Use OpenGL" ON)
option(LIBIGL_WITH_OPENGL_GLFW "Use GLFW" ON)
option(LIBIGL_WITH_OPENGL_GLFW_IMGUI "Use IMGUI" ON)
option(LIBIGL_WITH_VIEWER "Use OpenGL viewer" ON)
option(LIBIGL_USE_STATIC_LIBRARY "Use static library" ON)
find_package(LIBIGL QUIET)
################################################################################
# Elastic Rod Library
################################################################################
add_library(ElasticRods ElasticRod.cc ElasticRodOutput.cc RodMaterial.cc CrossSection.cc eigensolver.cc newton_optimizer.cc)
target_include_directories(ElasticRods SYSTEM PUBLIC ${SPECTRA_INCLUDE_DIR})
target_link_libraries(ElasticRods MeshFEM VisvalingamSimplify)
set_target_properties(ElasticRods PROPERTIES CXX_STANDARD 14)
set_target_properties(ElasticRods PROPERTIES CXX_STANDARD_REQUIRED ON)
target_include_directories(ElasticRods SYSTEM PUBLIC .)
add_library(RodLinkages RodLinkage.cc linkage_deformation_analysis.cc LinkageOptimization.cc TargetSurfaceFitter.cc infer_target_surface.cc)
target_link_libraries(RodLinkages ElasticRods rotation_optimization igl::core)
set_target_properties(RodLinkages PROPERTIES CXX_STANDARD 14)
set_target_properties(RodLinkages PROPERTIES CXX_STANDARD_REQUIRED ON)
target_include_directories(RodLinkages SYSTEM PUBLIC .)
################################################################################
# Third Party Libraries
################################################################################
# Knitro
find_package(Knitro QUIET)
if(KNITRO_FOUND)
target_include_directories(ElasticRods SYSTEM PUBLIC ${KNITRO_INCLUDE_DIRS})
target_link_libraries(ElasticRods ${KNITRO_LIBRARIES})
target_compile_definitions(ElasticRods PUBLIC -DHAS_KNITRO)
target_include_directories(RodLinkages SYSTEM PUBLIC ${KNITRO_INCLUDE_DIRS})
target_link_libraries(RodLinkages ${KNITRO_LIBRARIES})
target_compile_definitions(RodLinkages PUBLIC -DHAS_KNITRO)
else()
message(STATUS "Knitro not found; knitro solvers and dependent binaries disabled")
endif()
################################################################################
# Python Bindings
################################################################################
add_subdirectory(python_bindings)
################################################################################
# Grasshopper Bindings
################################################################################
add_subdirectory(grasshopper)
################################################################################
# More binaries
################################################################################
add_subdirectory(tests)
add_subdirectory(tools)