diff --git a/CMakeLists.txt b/CMakeLists.txt index fba421444..f58596520 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,8 +40,6 @@ option(GTSAM_BUILD_TIMING "Enable/Disable building of timing scripts" ON) option(GTSAM_BUILD_EXAMPLES "Enable/Disable building of examples" ON) option(GTSAM_BUILD_WRAP "Enable/Disable building of matlab wrap utility (necessary for matlab interface)" ON) option(GTSAM_USE_QUATERNIONS "Enable/Disable using an internal Quaternion representation for rotations instead of rotation matrices" OFF) -option(GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS - "Enable/Disable linking tests against the convenience libraries for faster debugging" ON) # Add the Quaternion Build Flag if requested if (GTSAM_USE_QUATERNIONS) @@ -53,10 +51,16 @@ endif(GTSAM_USE_QUATERNIONS) # FIXME: breaks generation and install of matlab toolbox #set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY TRUE) -# Pull in tests -enable_testing() -include(Dart) -include(CTest) +# Pull in infrastructure +if (GTSAM_BUILD_TESTS) + enable_testing() + include(Dart) + include(CTest) +endif() + +# Use macros for creating tests/timing scripts +set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +include(GtsamTesting) # Enable make check (http://www.cmake.org/Wiki/CMakeEmulateMakeCheck) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) @@ -71,7 +75,7 @@ include_directories( gtsam/3rdparty/CCOLAMD/Include ${CMAKE_SOURCE_DIR} CppUnitLite - ${BOOST_INCLUDE_DIR}) + ${Boost_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIRS}) # Build CppUnitLite diff --git a/cmake/GtsamTesting.cmake b/cmake/GtsamTesting.cmake new file mode 100644 index 000000000..f2f345f11 --- /dev/null +++ b/cmake/GtsamTesting.cmake @@ -0,0 +1,65 @@ +# Build macros for using tests + +# Collects all tests in an adjacent tests folder and builds them +macro(gtsam_add_tests subdir libs) + add_custom_target(check.${subdir} COMMAND ${CMAKE_CTEST_COMMAND}) + file(GLOB tests_srcs "tests/test*.cpp") + foreach(test_src ${tests_srcs}) + get_filename_component(test_base ${test_src} NAME_WE) + set( test_bin ${subdir}.${test_base} ) + message(STATUS "Adding Test ${test_bin}") + add_executable(${test_bin} ${test_src}) + add_dependencies(check.${subdir} ${test_bin}) + add_dependencies(check ${test_bin}) + add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin} ) + if (GTSAM_BUILD_CONVENIENCE_LIBRARIES) + add_dependencies(${test_bin} ${libs} CppUnitLite) + target_link_libraries(${test_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite) + else() + add_dependencies(${test_bin} gtsam-static) + target_link_libraries(${test_bin} ${Boost_LIBRARIES} gtsam-static CppUnitLite) + endif() + add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) + endforeach(test_src) +endmacro() + +# Collects all tests in an adjacent tests folder and builds them +# This version forces the use of libs, as necessary for wrap/tests +macro(gtsam_add_external_tests subdir libs) + add_custom_target(check.${subdir} COMMAND ${CMAKE_CTEST_COMMAND}) + file(GLOB tests_srcs "tests/test*.cpp") + foreach(test_src ${tests_srcs}) + get_filename_component(test_base ${test_src} NAME_WE) + set( test_bin ${subdir}.${test_base} ) + message(STATUS "Adding Test ${test_bin}") + add_executable(${test_bin} ${test_src}) + add_dependencies(check.${subdir} ${test_bin}) + add_dependencies(check ${test_bin}) + add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin} ) + add_dependencies(${test_bin} ${libs} CppUnitLite) + target_link_libraries(${test_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite) + add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) + endforeach(test_src) +endmacro() + +# Collects timing scripts and builds them +macro(gtsam_add_timing subdir libs) + add_custom_target(timing.${subdir}) + file(GLOB base_timing_srcs "tests/time*.cpp") + foreach(time_src ${base_timing_srcs}) + get_filename_component(time_base ${time_src} NAME_WE) + set( time_bin ${subdir}.${time_base} ) + message(STATUS "Adding Timing Benchmark ${time_bin}") + add_executable(${time_bin} ${time_src}) + add_dependencies(timing.${subdir} ${time_bin}) + add_dependencies(timing ${time_bin}) + if (GTSAM_BUILD_CONVENIENCE_LIBRARIES) + add_dependencies(${time_bin} ${libs}) + target_link_libraries(${time_bin} ${libs} ${Boost_LIBRARIES} CppUnitLite) + else() + add_dependencies(${time_bin} gtsam-static) + target_link_libraries(${time_bin} ${Boost_LIBRARIES} gtsam-static CppUnitLite) + endif() + add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) + endforeach(time_src) +endmacro() \ No newline at end of file diff --git a/gtsam/3rdparty/CMakeLists.txt b/gtsam/3rdparty/CMakeLists.txt index 45118d7b8..673411a58 100644 --- a/gtsam/3rdparty/CMakeLists.txt +++ b/gtsam/3rdparty/CMakeLists.txt @@ -15,10 +15,3 @@ foreach(eigen_dir ${eigen_dir_headers_all}) install(FILES Eigen/Eigen/${filename} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/gtsam/3rdparty/Eigen/Eigen) endif() endforeach(eigen_dir) - -## build convenience library -#set (3rdparty_srcs -# CCOLAMD/Source/ccolamd.c -# CCOLAMD/Source/ccolamd_global.c -# UFconfig/UFconfig.c) -#add_library(ccolamd STATIC ${3rdparty_srcs}) \ No newline at end of file diff --git a/gtsam/CMakeLists.txt b/gtsam/CMakeLists.txt index 71cf8448b..0ca316b36 100644 --- a/gtsam/CMakeLists.txt +++ b/gtsam/CMakeLists.txt @@ -20,14 +20,20 @@ set (3rdparty_srcs 3rdparty/CCOLAMD/Source/ccolamd.c 3rdparty/CCOLAMD/Source/ccolamd_global.c 3rdparty/UFconfig/UFconfig.c) -add_library(ccolamd STATIC ${3rdparty_srcs}) +if (GTSAM_BUILD_CONVENIENCE_LIBRARIES) + message(STATUS "Building Convenience Library: ccolamd") + add_library(ccolamd STATIC ${3rdparty_srcs}) +endif() # assemble core libaries foreach(subdir ${gtsam_subdirs}) # Build convenience libraries file(GLOB subdir_srcs "${subdir}/*.cpp") - add_library(${subdir} STATIC ${subdir_srcs}) set(${subdir}_srcs ${subdir_srcs}) + if (GTSAM_BUILD_CONVENIENCE_LIBRARIES) + message(STATUS "Building Convenience Library: ${subdir}") + add_library(${subdir} STATIC ${subdir_srcs}) + endif() # Build local library and tests message(STATUS "Building ${subdir}") diff --git a/gtsam/base/CMakeLists.txt b/gtsam/base/CMakeLists.txt index e6818b787..bd2b5df96 100644 --- a/gtsam/base/CMakeLists.txt +++ b/gtsam/base/CMakeLists.txt @@ -4,40 +4,16 @@ install(FILES ${base_headers} DESTINATION include/gtsam/base) # Components to link tests in this subfolder against set(base_local_libs - CppUnitLite base ) # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.base COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB base_tests_srcs "tests/test*.cpp") - foreach(test_src ${base_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin base.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.base ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${base_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) + gtsam_add_tests(base "${base_local_libs}") endif(GTSAM_BUILD_TESTS) # Build timing scripts if (GTSAM_BUILD_TIMING) - add_custom_target(timing.base) - file(GLOB base_timing_srcs "tests/time*.cpp") - foreach(time_src ${base_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin base.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.base ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${base_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) + gtsam_add_timing(base "${base_local_libs}") endif(GTSAM_BUILD_TIMING) diff --git a/gtsam/geometry/CMakeLists.txt b/gtsam/geometry/CMakeLists.txt index 2b4635638..8f1e8fb3a 100644 --- a/gtsam/geometry/CMakeLists.txt +++ b/gtsam/geometry/CMakeLists.txt @@ -1,47 +1,20 @@ -# link back to base -add_dependencies(geometry base) - # Install headers file(GLOB geometry_headers "*.h") install(FILES ${geometry_headers} DESTINATION include/gtsam/geometry) # Components to link tests in this subfolder against set(geometry_local_libs - geometry - base - CppUnitLite + base + geometry ) # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.geometry COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB geometry_tests_srcs "tests/test*.cpp") - foreach(test_src ${geometry_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin geometry.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.geometry ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${geometry_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) + gtsam_add_tests(geometry "${geometry_local_libs}") endif(GTSAM_BUILD_TESTS) # Build timing scripts if (GTSAM_BUILD_TIMING) - add_custom_target(timing.geometry) - file(GLOB geometry_timing_srcs "tests/time*.cpp") - foreach(time_src ${geometry_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin geometry.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.geometry ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${geometry_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) + gtsam_add_timing(geometry "${geometry_local_libs}") endif(GTSAM_BUILD_TIMING) diff --git a/gtsam/inference/CMakeLists.txt b/gtsam/inference/CMakeLists.txt index 158ce706e..c7006d698 100644 --- a/gtsam/inference/CMakeLists.txt +++ b/gtsam/inference/CMakeLists.txt @@ -1,6 +1,3 @@ -# link back to previous convenience library -add_dependencies(inference base) - # Install headers file(GLOB inference_headers "*.h") install(FILES ${inference_headers} DESTINATION include/gtsam/inference) @@ -11,39 +8,15 @@ set(inference_local_libs geometry base ccolamd - CppUnitLite ) # Build tests -if(GTSAM_BUILD_TESTS) - add_custom_target(check.inference COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB inference_tests_srcs "tests/test*.cpp") - foreach(test_src ${inference_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin inference.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.inference ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${inference_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) +if (GTSAM_BUILD_TESTS) + gtsam_add_tests(inference "${inference_local_libs}") endif(GTSAM_BUILD_TESTS) # Build timing scripts -if(GTSAM_BUILD_TIMING) - add_custom_target(timing.inference) - file(GLOB inference_timing_srcs "tests/time*.cpp") - foreach(time_src ${inference_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin inference.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.inference ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${inference_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) +if (GTSAM_BUILD_TIMING) + gtsam_add_timing(inference "${inference_local_libs}") endif(GTSAM_BUILD_TIMING) diff --git a/gtsam/linear/CMakeLists.txt b/gtsam/linear/CMakeLists.txt index 49438c5c9..02c300565 100644 --- a/gtsam/linear/CMakeLists.txt +++ b/gtsam/linear/CMakeLists.txt @@ -1,6 +1,3 @@ -# link back to base -add_dependencies(linear inference) - # Install headers file(GLOB linear_headers "*.h") install(FILES ${linear_headers} DESTINATION include/gtsam/linear) @@ -12,38 +9,14 @@ set(linear_local_libs geometry base ccolamd - CppUnitLite ) # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.linear COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB linear_tests_srcs "tests/test*.cpp") - foreach(test_src ${linear_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin linear.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.linear ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${linear_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) -endif (GTSAM_BUILD_TESTS) + gtsam_add_tests(linear "${linear_local_libs}") +endif(GTSAM_BUILD_TESTS) # Build timing scripts if (GTSAM_BUILD_TIMING) - add_custom_target(timing.linear) - file(GLOB linear_timing_srcs "tests/time*.cpp") - foreach(time_src ${linear_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin linear.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.linear ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${linear_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) -endif (GTSAM_BUILD_TIMING) + gtsam_add_timing(linear "${linear_local_libs}") +endif(GTSAM_BUILD_TIMING) diff --git a/gtsam/nonlinear/CMakeLists.txt b/gtsam/nonlinear/CMakeLists.txt index 070d88da4..69459e3d4 100644 --- a/gtsam/nonlinear/CMakeLists.txt +++ b/gtsam/nonlinear/CMakeLists.txt @@ -1,6 +1,3 @@ -# link back to base -add_dependencies(nonlinear linear) - # Install headers file(GLOB nonlinear_headers "*.h") install(FILES ${nonlinear_headers} DESTINATION include/gtsam/nonlinear) @@ -13,39 +10,15 @@ set(nonlinear_local_libs geometry base ccolamd - CppUnitLite ) # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.nonlinear COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB nonlinear_tests_srcs "tests/test*.cpp") - foreach(test_src ${nonlinear_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin nonlinear.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.nonlinear ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${nonlinear_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) -endif (GTSAM_BUILD_TESTS) + gtsam_add_tests(nonlinear "${nonlinear_local_libs}") +endif(GTSAM_BUILD_TESTS) # Build timing scripts if (GTSAM_BUILD_TIMING) - add_custom_target(timing.nonlinear) - file(GLOB nonlinear_timing_srcs "tests/time*.cpp") - foreach(time_src ${nonlinear_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin nonlinear.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.nonlinear ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${nonlinear_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) -endif (GTSAM_BUILD_TIMING) + gtsam_add_timing(nonlinear "${nonlinear_local_libs}") +endif(GTSAM_BUILD_TIMING) diff --git a/gtsam/slam/CMakeLists.txt b/gtsam/slam/CMakeLists.txt index 7bce4f369..6c2ee61d5 100644 --- a/gtsam/slam/CMakeLists.txt +++ b/gtsam/slam/CMakeLists.txt @@ -1,6 +1,3 @@ -# link back to base -add_dependencies(slam nonlinear) - # Install headers file(GLOB slam_headers "*.h") install(FILES ${slam_headers} DESTINATION include/gtsam/slam) @@ -14,38 +11,14 @@ set(slam_local_libs geometry base ccolamd - CppUnitLite ) # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.slam COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB slam_tests_srcs "tests/test*.cpp") - foreach(test_src ${slam_tests_srcs}) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin slam.${test_base} ) - message(STATUS "Adding Test ${test_bin}") - add_executable(${test_bin} ${test_src}) - add_dependencies(check.slam ${test_bin}) - add_dependencies(check ${test_bin}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - target_link_libraries(${test_bin} ${slam_local_libs}) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) -endif (GTSAM_BUILD_TESTS) + gtsam_add_tests(slam "${slam_local_libs}") +endif(GTSAM_BUILD_TESTS) # Build timing scripts if (GTSAM_BUILD_TIMING) - add_custom_target(timing.slam) - file(GLOB slam_timing_srcs "tests/time*.cpp") - foreach(time_src ${slam_timing_srcs}) - get_filename_component(time_base ${time_src} NAME_WE) - set( time_bin slam.${time_base} ) - message(STATUS "Adding Timing Benchmark ${time_bin}") - add_executable(${time_bin} ${time_src}) - add_dependencies(timing.slam ${time_bin}) - add_dependencies(timing ${time_bin}) - target_link_libraries(${time_bin} ${slam_local_libs}) - add_custom_target(${time_bin}.run ${EXECUTABLE_OUTPUT_PATH}${time_bin} ${ARGN}) - endforeach(time_src) -endif (GTSAM_BUILD_TIMING) + gtsam_add_timing(slam "${slam_local_libs}") +endif(GTSAM_BUILD_TIMING) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 240623a22..4ada20785 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) +if (GTSAM_BUILD_CONVENIENCE_LIBRARIES) set(convenience_libs slam nonlinear @@ -7,15 +7,22 @@ if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) geometry base ccolamd) -else (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) +else (GTSAM_BUILD_CONVENIENCE_LIBRARIES) set(convenience_libs gtsam-static) -endif (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) +endif (GTSAM_BUILD_CONVENIENCE_LIBRARIES) + +# exclude certain files +# note the source dir on each +set (tests_exclude + # "${CMAKE_CURRENT_SOURCE_DIR}/testPose2SLAMwSPCG.cpp" +) # Build tests if (GTSAM_BUILD_TESTS) add_custom_target(check.tests COMMAND ${CMAKE_CTEST_COMMAND}) file(GLOB tests_srcs "test*.cpp") + #list(REMOVE_ITEM tests_srcs ${tests_exclude}) #NOTE: uncomment if there are tests to exclude foreach(test_src ${tests_srcs}) get_filename_component(test_base ${test_src} NAME_WE) set( test_bin tests.${test_base} ) @@ -33,6 +40,7 @@ endif (GTSAM_BUILD_TESTS) if (GTSAM_BUILD_TIMING) add_custom_target(timing.tests) file(GLOB timing_srcs "time*.cpp") + #list(REMOVE_ITEM timing_srcs ${tests_exclude}) #NOTE: uncomment if there are tests to exclude foreach(time_src ${timing_srcs}) get_filename_component(time_base ${time_src} NAME_WE) set( time_bin tests.${time_base} ) diff --git a/wrap/CMakeLists.txt b/wrap/CMakeLists.txt index 6b97822d2..de89ca5ee 100644 --- a/wrap/CMakeLists.txt +++ b/wrap/CMakeLists.txt @@ -16,30 +16,10 @@ endif(GTSAM_INSTALL_WRAP) # Install matlab header install(FILES matlab.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/wrap) -if (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) - set(convenience_libs - base - ) -else (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) - set(convenience_libs - gtsam-static) -endif (GTSAM_LINK_BINARIES_AGAINST_CONVENIENCE_LIBS) - # Build tests if (GTSAM_BUILD_TESTS) - add_custom_target(check.wrap COMMAND ${CMAKE_CTEST_COMMAND}) - file(GLOB wrap_test_srcs "tests/test*.cpp") - add_definitions(-DTOPSRCDIR="${CMAKE_SOURCE_DIR}") - foreach(test_src ${wrap_test_srcs} ) - get_filename_component(test_base ${test_src} NAME_WE) - set( test_bin wrap.${test_base} ) - add_executable(${test_bin} EXCLUDE_FROM_ALL ${test_src}) - add_test(${test_base} ${EXECUTABLE_OUTPUT_PATH}${test_bin}) - add_dependencies(check ${test_bin}) - add_dependencies(check.wrap ${test_bin}) - target_link_libraries(${test_bin} CppUnitLite ${convenience_libs} wrap_lib) - add_custom_target(${test_bin}.run ${EXECUTABLE_OUTPUT_PATH}${test_bin} ${ARGN}) - endforeach(test_src) + add_definitions(-DTOPSRCDIR="${CMAKE_SOURCE_DIR}") + gtsam_add_external_tests(wrap wrap_lib) endif(GTSAM_BUILD_TESTS) # Wrap codegen @@ -63,7 +43,7 @@ set(moduleName gtsam) # only support 64-bit apple if(CMAKE_HOST_APPLE) - set(mex_bin_extension_default mexmaci64) + set(GTSAM_MEX_BIN_EXTENSION_default mexmaci64) endif(CMAKE_HOST_APPLE) if(NOT CMAKE_HOST_APPLE) @@ -79,56 +59,56 @@ if(NOT CMAKE_HOST_APPLE) # Check for linux machines if (CMAKE_HOST_UNIX) if (HAVE_64_BIT) - set(mex_bin_extension_default mexa64) + set(GTSAM_MEX_BIN_EXTENSION_default mexa64) else (HAVE_64_BIT) - set(mex_bin_extension_default mexglx) + set(GTSAM_MEX_BIN_EXTENSION_default mexglx) endif (HAVE_64_BIT) endif(CMAKE_HOST_UNIX) # Check for windows machines if (CMAKE_HOST_WIN32) if (HAVE_64_BIT) - set(mex_bin_extension_default mexw64) + set(GTSAM_MEX_BIN_EXTENSION_default mexw64) else (HAVE_64_BIT) - set(mex_bin_extension_default mexw32) + set(GTSAM_MEX_BIN_EXTENSION_default mexw32) endif (HAVE_64_BIT) endif(CMAKE_HOST_WIN32) endif(NOT CMAKE_HOST_APPLE) # Allow for setting mex extension manually -set(mex_bin_extension ${mex_bin_extension_default} CACHE DOCSTRING "Extension for matlab mex files") -message(STATUS "Detected Matlab mex extension: ${mex_bin_extension_default}") -message(STATUS "Current Matlab mex extension: ${mex_bin_extension}") +set(GTSAM_MEX_BIN_EXTENSION ${GTSAM_MEX_BIN_EXTENSION_default} CACHE DOCSTRING "Extension for matlab mex files") +message(STATUS "Detected Matlab mex extension: ${GTSAM_MEX_BIN_EXTENSION_default}") +message(STATUS "Current Matlab mex extension: ${GTSAM_MEX_BIN_EXTENSION}") # Actual build commands - separated by OS add_custom_target(wrap_gtsam ALL COMMAND - ./wrap ${mex_bin_extension} ${CMAKE_SOURCE_DIR} ${moduleName} ${toolbox_path} "${mexFlags}" + ./wrap ${GTSAM_MEX_BIN_EXTENSION} ${CMAKE_SOURCE_DIR} ${moduleName} ${toolbox_path} "${mexFlags}" DEPENDS wrap) option(GTSAM_INSTALL_MATLAB_TOOLBOX "Enable/Disable installation of matlab toolbox" ON) option(GTSAM_INSTALL_MATLAB_EXAMPLES "Enable/Disable installation of matlab examples" ON) option(GTSAM_INSTALL_MATLAB_TESTS "Enable/Disable installation of matlab tests" ON) -set(toolbox_install_path ${CMAKE_INSTALL_PREFIX}/borg/toolbox CACHE DOCSTRING "Path to install matlab toolbox") +set(GTSAM_TOOLBOX_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/borg/toolbox CACHE DOCSTRING "Path to install matlab toolbox") if (GTSAM_INSTALL_MATLAB_TOOLBOX) # Primary toolbox files - message(STATUS "Installing Matlab Toolbox to ${toolbox_install_path}") - install(DIRECTORY DESTINATION ${toolbox_install_path}) # make an empty folder + message(STATUS "Installing Matlab Toolbox to ${GTSAM_TOOLBOX_INSTALL_PATH}") + install(DIRECTORY DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}) # make an empty folder # exploit need for trailing slash to specify a full folder, rather than just its contents to copy - install(DIRECTORY ${toolbox_path} DESTINATION ${toolbox_install_path}) + install(DIRECTORY ${toolbox_path} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}) # Examples if (GTSAM_INSTALL_MATLAB_EXAMPLES) message(STATUS "Installing Matlab Toolbox Examples") file(GLOB matlab_examples "${CMAKE_SOURCE_DIR}/examples/matlab/*.m") - install(FILES ${matlab_examples} DESTINATION ${toolbox_install_path}/gtsam/examples) + install(FILES ${matlab_examples} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/examples) endif (GTSAM_INSTALL_MATLAB_EXAMPLES) # Tests if (GTSAM_INSTALL_MATLAB_TESTS) message(STATUS "Installing Matlab Toolbox Tests") file(GLOB matlab_tests "${CMAKE_SOURCE_DIR}/tests/matlab/*.m") - install(FILES ${matlab_tests} DESTINATION ${toolbox_install_path}/gtsam/tests) + install(FILES ${matlab_tests} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/tests) endif (GTSAM_INSTALL_MATLAB_TESTS) endif (GTSAM_INSTALL_MATLAB_TOOLBOX)