-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
137 lines (111 loc) · 5.46 KB
/
CMakeLists.txt
File metadata and controls
137 lines (111 loc) · 5.46 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
##############################################################################
# - Copyright (C) 2020-Present InfinyTech3D - #
# #
# This file is part of the Tearing plugin for the SOFA framework. #
# #
# This file is dual-licensed: #
# #
# 1) Commercial License: #
# This file may be used under the terms of a valid commercial license #
# agreement provided wih the software by InfinyTech3D. #
# #
# 2) GNU General Public License (GPLv3) Usage #
# Alternatively, this file may be used under the terms of the #
# GNU General Public License version 3 as published by the #
# Free Software Foundation: https://www.gnu.org/licenses/gpl-3.0.html #
# #
# Contact: contact@infinytech3d.com #
# Further information: https://infinytech3d.com #
##############################################################################
cmake_minimum_required(VERSION 3.12)
project(Tearing VERSION 1.0 LANGUAGES CXX)
include(cmake/environment.cmake)
# SOFA packages containing our dependencies
find_package(Sofa.Component.Topology.Container.Dynamic REQUIRED)
find_package(Sofa.Component.SolidMechanics.FEM.Elastic REQUIRED)
find_package(Sofa.Component.MechanicalLoad REQUIRED)
find_package(Sofa.Component.Constraint.Projective REQUIRED)
find_package(Sofa.Component.StateContainer REQUIRED)
set(TEARING_SRC_DIR src/Tearing)
# Our nice new SOFA Components
set(HEADER_FILES
${TEARING_SRC_DIR}/config.h.in
${TEARING_SRC_DIR}/initTearing.h
${TEARING_SRC_DIR}/TearingAlgorithms.h
${TEARING_SRC_DIR}/TearingAlgorithms.inl
${TEARING_SRC_DIR}/BaseTearingEngine.h
${TEARING_SRC_DIR}/BaseTearingEngine.inl
${TEARING_SRC_DIR}/TearingEngine.h
${TEARING_SRC_DIR}/TearingEngine.inl
${TEARING_SRC_DIR}/TearingScenarioEngine.h
${TEARING_SRC_DIR}/TearingScenarioEngine.inl
${TEARING_SRC_DIR}/Controllers/TriangleCuttingController.h
${TEARING_SRC_DIR}/Controllers/TriangleCuttingController.inl
)
set(SOURCE_FILES
${TEARING_SRC_DIR}/initTearing.cpp
${TEARING_SRC_DIR}/TearingAlgorithms.cpp
${TEARING_SRC_DIR}/BaseTearingEngine.cpp
${TEARING_SRC_DIR}/TearingEngine.cpp
${TEARING_SRC_DIR}/TearingScenarioEngine.cpp
${TEARING_SRC_DIR}/Controllers/TriangleCuttingController.cpp
)
set(README_FILES
README.md
)
find_package(SofaCUDA QUIET)
if (SofaCUDA_FOUND)
enable_language(CUDA)
endif()
find_package(MeshRefinement QUIET)
if (MeshRefinement_FOUND)
message("MeshRefinement plugin found - Adding it to ${PROJECT_NAME}")
set(TEARING_USES_MESHREFINEMENT ON)
list(APPEND HEADER_FILES
${TEARING_SRC_DIR}/VolumeTearingAlgorithms.h
${TEARING_SRC_DIR}/VolumeTearingAlgorithms.inl
${TEARING_SRC_DIR}/VolumeTearingEngine.h
${TEARING_SRC_DIR}/VolumeTearingEngine.inl
)
list(APPEND SOURCE_FILES
${TEARING_SRC_DIR}/VolumeTearingAlgorithms.cpp
${TEARING_SRC_DIR}/VolumeTearingEngine.cpp
)
endif()
# SOFA plugin are basically libraries
add_library(${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES} ${README_FILES})
target_compile_definitions(${PROJECT_NAME} PRIVATE "-DSOFA_BUILD_TEARING_PLUGIN")
# Link the plugin library to its dependencies (other libraries).
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Core)
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Component.StateContainer)
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Component.Topology.Container.Dynamic)
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Component.SolidMechanics.FEM.Elastic)
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Component.MechanicalLoad)
target_link_libraries(${PROJECT_NAME} PUBLIC Sofa.Component.Constraint.Projective)
target_include_directories(${PROJECT_NAME} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>")
target_include_directories(${PROJECT_NAME} PUBLIC "$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>")
target_include_directories(${PROJECT_NAME} PUBLIC "$<INSTALL_INTERFACE:include>")
# Dependencies
if (MeshRefinement_FOUND)
target_link_libraries(${PROJECT_NAME} PUBLIC MeshRefinement)
endif()
# Create package Config, Version & Target files.
# Deploy the headers, resources, scenes & examples.
sofa_create_package_with_targets(
PACKAGE_NAME ${PROJECT_NAME}
PACKAGE_VERSION ${PROJECT_VERSION}
TARGETS ${PROJECT_NAME} AUTO_SET_TARGET_PROPERTIES
INCLUDE_SOURCE_DIR "src"
INCLUDE_INSTALL_DIR ${PROJECT_NAME}
EXAMPLE_INSTALL_DIR "scenes"
RELOCATABLE "plugins"
)
# If SOFA_BUILD_TESTS exists and is OFF, then these tests will be auto-disabled
cmake_dependent_option(TEARING_BUILD_TESTS "Compile the automatic tests" ON "SOFA_BUILD_TESTS OR NOT DEFINED SOFA_BUILD_TESTS" OFF)
if(TEARING_BUILD_TESTS)
enable_testing()
add_subdirectory(Tearing_test)
endif()
# Organize projects into folders
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
SET_PROPERTY(TARGET ${PROJECT_NAME} PROPERTY FOLDER "plugins")