project(wpimath) include(SubDirList) include(CompileWarnings) include(AddTest) file( GLOB wpimath_jni_src src/main/native/cpp/jni/DAREJNI.cpp src/main/native/cpp/jni/EigenJNI.cpp src/main/native/cpp/jni/Exceptions.cpp src/main/native/cpp/jni/LinearSystemUtilJNI.cpp src/main/native/cpp/jni/Transform3dJNI.cpp src/main/native/cpp/jni/Twist3dJNI.cpp src/main/native/cpp/jni/autodiff/GradientJNI.cpp src/main/native/cpp/jni/autodiff/HessianJNI.cpp src/main/native/cpp/jni/autodiff/JacobianJNI.cpp src/main/native/cpp/jni/autodiff/VariableJNI.cpp src/main/native/cpp/jni/autodiff/VariableMatrixJNI.cpp src/main/native/cpp/jni/optimization/ProblemJNI.cpp ) file( GLOB_RECURSE wpimath_native_src src/main/native/cpp/*.cpp src/main/native/thirdparty/sleipnir/src/*.cpp ) list(REMOVE_ITEM wpimath_native_src ${wpimath_jni_src}) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS FALSE) file(GLOB_RECURSE wpimath_protobuf_native_src src/generated/main/native/cpp/wpimath/protobuf/*.cpp) add_library(protobuf OBJECT ${wpimath_protobuf_native_src}) target_link_libraries(protobuf wpiutil) add_library(wpimath ${wpimath_native_src} $) if(MSVC) get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) set(CONFIG_SUFFIX "$<$:_$>") file( GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/protobuf_objects${CONFIG_SUFFIX}.txt CONTENT $,\n> ) add_custom_command( TARGET wpimath PRE_LINK COMMAND cmake -E __create_def ${CMAKE_CURRENT_BINARY_DIR}/protobuf_exports${CONFIG_SUFFIX}.def ${CMAKE_CURRENT_BINARY_DIR}/protobuf_objects${CONFIG_SUFFIX}.txt ) target_link_options( wpimath PRIVATE /DEF:$ ) endif() set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) set_target_properties(wpimath PROPERTIES DEBUG_POSTFIX "d") set_property(TARGET wpimath PROPERTY FOLDER "libraries") target_compile_definitions(wpimath PRIVATE WPILIB_EXPORTS SLEIPNIR_EXPORTS) target_compile_features(wpimath PUBLIC cxx_std_23) if(MSVC) target_compile_options(wpimath PUBLIC /utf-8 /bigobj) endif() wpilib_target_warnings(wpimath) target_link_libraries(wpimath wpiutil) if(NOT USE_SYSTEM_EIGEN) install( DIRECTORY src/main/native/thirdparty/eigen/include/ DESTINATION "${include_dest}/wpimath" ) target_include_directories( wpimath SYSTEM PUBLIC $ ) else() find_package(Eigen3 CONFIG REQUIRED) target_link_libraries(wpimath Eigen3::Eigen) endif() install( DIRECTORY src/main/native/thirdparty/gcem/include/ src/main/native/thirdparty/sleipnir/include/ DESTINATION "${include_dest}/wpimath" ) target_include_directories( wpimath SYSTEM PUBLIC $ $ $ ) install( DIRECTORY src/generated/main/native/cpp/ DESTINATION "${include_dest}/wpimath" FILES_MATCHING PATTERN "*.h" ) install(DIRECTORY src/main/native/include/ DESTINATION "${include_dest}/wpimath") target_include_directories( wpimath PUBLIC $ $ $ ) install(TARGETS wpimath EXPORT wpimath) export(TARGETS wpimath FILE wpimath.cmake NAMESPACE wpimath::) configure_file(wpimath-config.cmake.in ${WPILIB_BINARY_DIR}/wpimath-config.cmake) install(FILES ${WPILIB_BINARY_DIR}/wpimath-config.cmake DESTINATION share/wpimath) install(EXPORT wpimath DESTINATION share/wpimath) if(WITH_TESTS) wpilib_add_test(wpimath src/test/native/cpp) target_include_directories(wpimath_test PRIVATE src/test/native/include) target_link_libraries(wpimath_test wpimath googletest) endif()