1
-
2
- include (${MRPT_SOURCE_DIR} /cmakemodules/script_eigen.cmake REQUIRED ) # Eigen3
3
- include (${MRPT_SOURCE_DIR} /cmakemodules/script_nanoflann.cmake REQUIRED ) # Check for nanoflann
4
- include (${MRPT_SOURCE_DIR} /cmakemodules/script_suitesparse.cmake REQUIRED ) # SuiteSparse libs
1
+ # ------------------------------------------------------------------------------
2
+ # Mobile Robot Programming Toolkit (MRPT)
3
+ #
4
+ # Copyright (c) 2005-2025, Jose Luis Blanco-Claraco, contributors (see Git history)
5
+ # All rights reserved.
6
+ # Released under BSD-3 license. See LICENSE file
7
+ # ------------------------------------------------------------------------------
5
8
9
+ cmake_minimum_required (VERSION 3.16 )
6
10
7
- # See "DeclareMRPTLib.cmake"
8
- list (APPEND math_EXTRA_SRCS "${MRPT_LIBS_ROOT} /math/*.cpp" "${MRPT_LIBS_ROOT} /math/*.h" )
9
- list (APPEND math_EXTRA_SRCS_NAME "math" "math" )
11
+ # Tell CMake we'll use C++ for use in its tests/flags
12
+ project (mrpt_math LANGUAGES C CXX )
10
13
11
- # CSparse
12
- if (NOT CMAKE_MRPT_HAS_SUITESPARSE )
13
- list (APPEND math_EXTRA_SRCS "${MRPT_LIBS_ROOT} /math/src/CSparse/*.c" "${MRPT_LIBS_ROOT} /math/include/mrpt/3rdparty/CSparse/*.h" )
14
- list (APPEND math_EXTRA_SRCS_NAME "math/CSparse" "math/CSparse" )
15
- include_directories ("${MRPT_LIBS_ROOT} /math/include/mrpt/3rdparty/CSparse/" )
16
- endif ()
17
-
18
- # kmeans++
19
- list (APPEND math_EXTRA_SRCS "${MRPT_LIBS_ROOT} /math/src/kmeans++/*.cpp" "${MRPT_LIBS_ROOT} /math/src/kmeans++/*.h" )
20
- list (APPEND math_EXTRA_SRCS_NAME "math/kmeans" "math/kmeans" )
14
+ # MRPT CMake scripts: "mrpt_xxx()"
15
+ find_package (mrpt_common REQUIRED )
16
+ find_package (mrpt_system REQUIRED )
17
+ find_package (mrpt_serialization REQUIRED )
18
+ find_package (mrpt_random REQUIRED )
21
19
22
- # extra dependencies required by unit tests in this module:
23
- set_property ( GLOBAL PROPERTY mrpt_math_UNIT_TEST_EXTRA_DEPS mrpt-io )
20
+ include ( ./cmake/script_eigen.cmake REQUIRED ) # Eigen3
21
+ include ( ./cmake/script_nanoflann.cmake REQUIRED ) # Check for nanoflann
24
22
25
23
# eigen3:
26
24
if (MRPT_EIGEN_USE_EMBEDDED_VERSION )
@@ -29,71 +27,209 @@ else()
29
27
set (eigen_dep Eigen3 ) # find_package() lib name
30
28
endif ()
31
29
32
- # For Ubuntu 16.04, the Eigen version does not support imported target,
33
- # so create it ourselves in the mrpt-math-config.cmake file:
34
- set (EXTRA_CONFIG_CMDS
35
- "if (NOT TARGET Eigen3::Eigen)\n\
36
- add_library(Eigen3::Eigen INTERFACE IMPORTED GLOBAL)\n\
37
- if (TARGET Eigen)\n\
38
- target_link_libraries(Eigen3::Eigen INTERFACE Eigen)\n\
39
- else()\n\
40
- if(EXISTS \" ${EIGEN3_INCLUDE_DIR} \" )\n\
41
- set(eigen_dirs ${EIGEN3_INCLUDE_DIR} )\n\
42
- else()\n\
43
- set(eigen_dirs ${EIGEN_EMBEDDED_INCLUDE_DIR} )\n\
44
- endif()\n\
45
- set_target_properties(Eigen3::Eigen PROPERTIES\n\
46
- INTERFACE_INCLUDE_DIRECTORIES\n\
47
- $<BUILD_INTERFACE:\$ {eigen_dirs}>\n\
48
- )\n\
49
- endif()\n\
50
- endif()\n "
30
+ # define lib:
31
+ set (LIB_SRCS
32
+ src/A_MatrixBase_instantiate_CMatrixDynamic_d.cpp
33
+ src/A_MatrixBase_instantiate_CMatrixDynamic_f.cpp
34
+ src/CAtan2LookUpTable.cpp
35
+ src/CAtan2LookUpTable_unittest.cpp
36
+ src/CHistogram.cpp
37
+ src/CLevenbergMarquardt_unittest.cpp
38
+ src/CMatrixB.cpp
39
+ src/CMatrixD.cpp
40
+ src/CMatrixDynamic.cpp
41
+ src/CMatrixDynamic_unittest.cpp
42
+ src/CMatrixF.cpp
43
+ src/CMatrixFixed.cpp
44
+ src/CMatrixFixed_unittest.cpp
45
+ src/container_ops_unittest.cpp
46
+ src/CPolygon.cpp
47
+ src/CSparseMatrix.cpp
48
+ src/CSparseMatrix_unittest.cpp
49
+ src/CSplineInterpolator1D.cpp
50
+ src/CVectorDynamic.cpp
51
+ src/CVectorFixed.cpp
52
+ src/distributions_unittest.cpp
53
+ src/EigenAlignment_unittest.cpp
54
+ src/filters.cpp
55
+ src/fourier.cpp
56
+ src/fresnel.cpp
57
+ src/fresnel_unittest.cpp
58
+ src/geometry.cpp
59
+ src/geometry_unittest.cpp
60
+ src/KDTreeCapable_unittest.cpp
61
+ src/kmeans.cpp
62
+ src/kmeans++/KMeans.cpp
63
+ src/kmeans++/KmTree.cpp
64
+ src/kmeans++/KmUtils.cpp
65
+ src/math.cpp
66
+ src/MatrixBase_instantiate_CMatrixFixed_22_d.cpp
67
+ src/MatrixBase_instantiate_CMatrixFixed_22_f.cpp
68
+ src/MatrixBase_instantiate_CMatrixFixed_33_d.cpp
69
+ src/MatrixBase_instantiate_CMatrixFixed_33_f.cpp
70
+ src/matrix_ops1_unittest.cpp
71
+ src/matrix_ops2_unittest.cpp
72
+ src/matrix_ops3_unittest.cpp
73
+ src/matrix_ops4_unittest.cpp
74
+ src/matrix_ops5_unittest.cpp
75
+ src/matrix_ops_unittest.cpp
76
+ src/MatrixVectorBase_instantiate_CMatrixDynamic_d.cpp
77
+ src/MatrixVectorBase_instantiate_CMatrixDynamic_f.cpp
78
+ src/MatrixVectorBase_instantiate_CMatrixDynamic_ints.cpp
79
+ src/MatrixVectorBase_instantiate_CMatrixFixed.cpp
80
+ src/MatrixVectorBase_instantiate_CVectorDynamic.cpp
81
+ src/MatrixVectorBase_instantiate_CVectorFixed.cpp
82
+ src/matrix_yaml_unittest.cpp
83
+ src/model_search.cpp
84
+ src/poly_roots.cpp
85
+ src/poly_roots_unittest.cpp
86
+ src/ransac_applications.cpp
87
+ src/registerAllClasses.cpp
88
+ src/robust_kernels_unittest.cpp
89
+ src/slerp.cpp
90
+ src/slerp_unittest.cpp
91
+ src/S_MatrixBase_instantiate_CMatrixFixed_66_d.cpp
92
+ src/S_MatrixBase_instantiate_CMatrixFixed_66_f.cpp
93
+ src/S_MatrixBase_instantiate_CMatrixFixed_77_d.cpp
94
+ src/TBoundingBox.cpp
95
+ src/TBoundingBox_unittest.cpp
96
+ src/TLine2D.cpp
97
+ src/TLine3D.cpp
98
+ src/TObject2D.cpp
99
+ src/TObject3D.cpp
100
+ src/TPlane.cpp
101
+ src/TPoint2D.cpp
102
+ src/TPoint3D.cpp
103
+ src/TPolygon2D.cpp
104
+ src/TPolygon3D.cpp
105
+ src/TPolygonWithPlane.cpp
106
+ src/TPose2D.cpp
107
+ src/TPose3D.cpp
108
+ src/TPose3DQuat.cpp
109
+ src/TPoseOrPoint_unittest.cpp
110
+ src/TSegment2D.cpp
111
+ src/TSegment3D.cpp
112
+ src/Twist2D.cpp
113
+ src/Twist3D.cpp
114
+ src/wrap2pi_unittest.cpp
115
+ src/Z_MatrixBase_instantiate_CMatrixFixed_44_d.cpp
116
+ src/Z_MatrixBase_instantiate_CMatrixFixed_44_f.cpp
51
117
)
52
118
53
- define_mrpt_lib (
54
- math # Lib name
55
- # Dependencies:
56
- mrpt-serialization
57
- mrpt-random
58
- mrpt-system
59
- # Other imported targets:
60
- nanoflann # find_package() lib name
61
- ${eigen_dep}
62
- )
119
+ set (LIB_PUBLIC_HDRS
120
+ include /mrpt/3rdparty/CSparse/cs.h
121
+ include /mrpt/math/CAtan2LookUpTable.h
122
+ include /mrpt/math/CBinaryRelation.h
123
+ include /mrpt/math/CHistogram.h
124
+ include /mrpt/math/CLevenbergMarquardt.h
125
+ include /mrpt/math/CMatrixB.h
126
+ include /mrpt/math/CMatrixD.h
127
+ include /mrpt/math/CMatrixDynamic.h
128
+ include /mrpt/math/CMatrixF.h
129
+ include /mrpt/math/CMatrixFixed.h
130
+ include /mrpt/math/CMonteCarlo.h
131
+ include /mrpt/math/CPolygon.h
132
+ include /mrpt/math/CProbabilityDensityFunction.h
133
+ include /mrpt/math/CQuaternion.h
134
+ include /mrpt/math/CSparseMatrixTemplate.h
135
+ include /mrpt/math/CSplineInterpolator1D.h
136
+ include /mrpt/math/CVectorDynamic.h
137
+ include /mrpt/math/CVectorFixed.h
138
+ include /mrpt/math/data_utils.h
139
+ include /mrpt/math/distributions.h
140
+ include /mrpt/math/eigen_extensions.h
141
+ include /mrpt/math/epsilon.h
142
+ include /mrpt/math/filters.h
143
+ include /mrpt/math/fourier.h
144
+ include /mrpt/math/fresnel.h
145
+ include /mrpt/math/geometry.h
146
+ include /mrpt/math/gtsam_wrappers.h
147
+ include /mrpt/math/homog_matrices.h
148
+ include /mrpt/math/interp_fit.h
149
+ include /mrpt/math/KDTreeCapable.h
150
+ include /mrpt/math/kmeans.h
151
+ include /mrpt/math/mat2eig.h
152
+ include /mrpt/math/math_frwds.h
153
+ include /mrpt/math/matrix_adaptors.h
154
+ include /mrpt/math/MatrixBase.h
155
+ include /mrpt/math/MatrixBlockSparseCols.h
156
+ include /mrpt/math/matrix_serialization.h
157
+ include /mrpt/math/matrix_size_t.h
158
+ include /mrpt/math/MatrixVectorBase.h
159
+ include /mrpt/math/model_search.h
160
+ include /mrpt/math/model_search_impl.h
161
+ include /mrpt/math/num_jacobian.h
162
+ include /mrpt/math/ops_containers.h
163
+ include /mrpt/math/ops_matrices.h
164
+ include /mrpt/math/ops_vectors.h
165
+ include /mrpt/math/point_poses2vectors.h
166
+ include /mrpt/math/poly_roots.h
167
+ include /mrpt/math/ransac_applications.h
168
+ include /mrpt/math/ransac.h
169
+ include /mrpt/math/ransac_impl.h
170
+ include /mrpt/math/registerAllClasses.h
171
+ include /mrpt/math/robust_kernels.h
172
+ include /mrpt/math/slerp.h
173
+ include /mrpt/math/TBoundingBox.h
174
+ include /mrpt/math/TLine2D.h
175
+ include /mrpt/math/TLine3D.h
176
+ include /mrpt/math/TObject2D.h
177
+ include /mrpt/math/TObject3D.h
178
+ include /mrpt/math/TPlane.h
179
+ include /mrpt/math/TPoint2D.h
180
+ include /mrpt/math/TPoint3D.h
181
+ include /mrpt/math/TPolygon2D.h
182
+ include /mrpt/math/TPolygon3D.h
183
+ include /mrpt/math/TPolygonWithPlane.h
184
+ include /mrpt/math/TPose2D.h
185
+ include /mrpt/math/TPose3D.h
186
+ include /mrpt/math/TPose3DQuat.h
187
+ include /mrpt/math/TPoseOrPoint.h
188
+ include /mrpt/math/transform_gaussian.h
189
+ include /mrpt/math/TSegment2D.h
190
+ include /mrpt/math/TSegment3D.h
191
+ include /mrpt/math/TTwist2D.h
192
+ include /mrpt/math/TTwist3D.h
193
+ include /mrpt/math/utils.h
194
+ include /mrpt/math/utils_matlab.h
195
+ include /mrpt/math/wrap2pi.h
196
+ )
63
197
64
- if (BUILD_mrpt-math )
65
- # Ignore precompiled headers in some sources:
66
- if (MRPT_ENABLE_PRECOMPILED_HDRS AND MSVC )
67
- set_source_files_properties (
68
- ${math/CSparse_FILES}
69
- ${math/kmeans_FILES}
70
- PROPERTIES COMPILE_FLAGS "/Y-"
71
- )
72
- endif ()
198
+ mrpt_add_library (
199
+ TARGET ${PROJECT_NAME}
200
+ SOURCES ${LIB_SRCS} ${LIB_PUBLIC_HDRS}
201
+ PUBLIC_LINK_LIBRARIES
202
+ mrpt::mrpt_system
203
+ mrpt::mrpt_serialization
204
+ mrpt::mrpt_random
205
+ Eigen3::Eigen
206
+ nanoflann::nanoflann
207
+ # PRIVATE_LINK_LIBRARIES
208
+ CMAKE_DEPENDENCIES
209
+ mrpt_system
210
+ mrpt_serialization
211
+ mrpt_random
212
+ # Other imported targets:
213
+ nanoflann # find_package() lib name
214
+ ${eigen_dep}
215
+ )
73
216
74
- # eigen3:
75
- target_link_libraries (math PUBLIC Eigen3::Eigen )
76
- if (MSVC )
77
- # This is to prevent the error (in Debug builds):
78
- # LNK1189:library limit of 65535 objects exceeded
79
- target_compile_options (math PRIVATE /Ob2 )
80
- endif ()
217
+ # extra dependencies required by unit tests in this module:
218
+ #set_property(GLOBAL PROPERTY mrpt_math_UNIT_TEST_EXTRA_DEPS mrpt-io)
81
219
82
- # nanoflann:
83
- target_link_libraries (math PUBLIC nanoflann::nanoflann )
84
220
85
- if (TARGET SuiteSparse::CXSparse )
86
- # Modern cmake interface?
87
- target_link_libraries (math PUBLIC SuiteSparse::CXSparse )
88
- else ()
89
- if (NOT "${SuiteSparse_LIBRARIES} " STREQUAL "" )
90
- target_link_libraries (math PRIVATE ${SuiteSparse_LIBRARIES} )
91
- endif ()
92
- if (NOT "${SuiteSparse_LIBRARIES} " STREQUAL "" )
93
- target_include_directories (math PUBLIC ${SuiteSparse_INCLUDE_DIRS} )
94
- endif ()
95
- endif ()
221
+ # Ignore precompiled headers in some sources:
222
+ #if(MRPT_ENABLE_PRECOMPILED_HDRS AND MSVC)
223
+ # set_source_files_properties(
224
+ # ${math/CSparse_FILES}
225
+ # ${math/kmeans_FILES}
226
+ # PROPERTIES COMPILE_FLAGS "/Y-"
227
+ # )
228
+ #endif()
96
229
97
- # Minimize debug info for this module:
98
- #mrpt_reduced_debug_symbols(math)
99
- endif ()
230
+ # Still needed?
231
+ #if (MSVC)
232
+ # # This is to prevent the error (in Debug builds):
233
+ # # LNK1189:library limit of 65535 objects exceeded
234
+ # target_compile_options(math PRIVATE /Ob2)
235
+ #endif()
0 commit comments