diff --git a/CMakeLists.txt b/CMakeLists.txt index 77b8b0c18..e2d3c7f57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,42 +36,48 @@ else() set(GTSAM_UNSTABLE_AVAILABLE 0) endif() + # Configurable Options option(GTSAM_BUILD_TESTS "Enable/Disable building of tests" ON) option(GTSAM_BUILD_TIMING "Enable/Disable building of timing scripts" ON) option(GTSAM_BUILD_EXAMPLES "Enable/Disable building of examples" ON) if(GTSAM_UNSTABLE_AVAILABLE) - option(GTSAM_BUILD_UNSTABLE "Enable/Disable libgtsam_unstable" OFF) + option(GTSAM_BUILD_UNSTABLE "Enable/Disable libgtsam_unstable" ON) endif() -option(GTSAM_BUILD_WRAP "Enable/Disable building of matlab wrap utility (necessary for matlab interface)" ON) -if(MSVC) - option(GTSAM_BUILD_SHARED_LIBRARY "Enable/Disable building of a shared version of gtsam" OFF) -else() +if(NOT MSVC) option(GTSAM_BUILD_SHARED_LIBRARY "Enable/Disable building of a shared version of gtsam" ON) -endif() -option(GTSAM_BUILD_STATIC_LIBRARY "Enable/Disable building of a static version of gtsam" ON) -option(GTSAM_USE_QUATERNIONS "Enable/Disable using an internal Quaternion representation for rotations instead of rotation matrices" OFF) -if(MSVC) - option(GTSAM_BUILD_CONVENIENCE_LIBRARIES "Enable/Disable use of convenience libraries for faster development rebuilds, but slower install" OFF) + option(GTSAM_BUILD_STATIC_LIBRARY "Enable/Disable building of a static version of gtsam" ON) else() + set(GTSAM_BUILD_STATIC_LIBRARY ON) +endif() +option(GTSAM_USE_QUATERNIONS "Enable/Disable using an internal Quaternion representation for rotations instead of rotation matrices" OFF) +if(NOT MSVC) option(GTSAM_BUILD_CONVENIENCE_LIBRARIES "Enable/Disable use of convenience libraries for faster development rebuilds, but slower install" ON) endif() -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) -option(GTSAM_INSTALL_WRAP "Enable/Disable installation of wrap utility" ON) -set(GTSAM_TOOLBOX_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/borg/toolbox CACHE DOCSTRING "Path to install matlab toolbox") -set(GTSAM_WRAP_HEADER_PATH ${PROJECT_SOURCE_DIR}/wrap CACHE DOCSTRING "Path to directory of matlab.h") +# Options relating to MATLAB wrapper # TODO: Check for matlab mex binary before handling building of binaries - -# Flags for building/installing mex files -option(GTSAM_BUILD_MEX_BIN "Enable/Disable building of matlab mex files" OFF) -option(GTSAM_INSTALL_MEX_BIN "Enable/Disable installing matlab mex binaries" OFF) -set(GTSAM_BUILD_MEX_BINARY_FLAGS "" CACHE STRING "Flags for running Matlab MEX compilation") +option(GTSAM_INSTALL_MATLAB_TOOLBOX "Enable/Disable installation of matlab toolbox" ON) +option(GTSAM_BUILD_WRAP "Enable/Disable building of matlab wrap utility (necessary for matlab interface)" ON) +option(GTSAM_INSTALL_WRAP "Enable/Disable installation of wrap utility for wrapping other libraries" ON) +set(GTSAM_TOOLBOX_INSTALL_PATH "" CACHE DOCSTRING "Matlab toolbox destination, blank defaults to CMAKE_INSTALL_PREFIX/borg/toolbox") +set(GTSAM_BUILD_MEX_BINARY_FLAGS "" CACHE STRING "Extra flags for running Matlab MEX compilation") set(MEX_COMMAND "mex" CACHE STRING "Command to use for executing mex (if on path, 'mex' will work)") +# Check / set dependent variables for MATLAB wrapper +set(GTSAM_WRAP_HEADER_PATH "${PROJECT_SOURCE_DIR}/wrap") +if(GTSAM_INSTALL_MATLAB_TOOLBOX AND NOT GTSAM_BUILD_WRAP) + message(FATAL_ERROR "GTSAM_INSTALL_MATLAB_TOOLBOX is enabled, please also enable GTSAM_BUILD_WRAP") +endif() +if(GTSAM_INSTALL_WRAP AND NOT GTSAM_BUILD_WRAP) + message(FATAL_ERROR "GTSAM_INSTALL_WRAP is enabled, please also enable GTSAM_BUILD_WRAP") +endif() +if(NOT GTSAM_TOOLBOX_INSTALL_PATH) + set(GTSAM_TOOLBOX_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/borg/toolbox") +endif() + + # Flags for choosing default packaging tools set(CPACK_SOURCE_GENERATOR "TGZ" CACHE STRING "CPack Default Source Generator") set(CPACK_GENERATOR "TGZ" CACHE STRING "CPack Default Binary Generator") @@ -90,7 +96,7 @@ endif(GTSAM_USE_QUATERNIONS) # Flags to determine whether tests and examples are build during 'make install' # Note that these remove the targets from the 'all' option(GTSAM_DISABLE_TESTS_ON_INSTALL "Disables building tests during install" ON) -option(GTSAM_DISABLE_EXAMPLES_ON_INSTALL "Disables buildint examples during install" OFF) +option(GTSAM_DISABLE_EXAMPLES_ON_INSTALL "Disables building examples during install" OFF) # Pull in infrastructure if (GTSAM_BUILD_TESTS) @@ -134,7 +140,9 @@ if (GTSAM_BUILD_EXAMPLES) endif(GTSAM_BUILD_EXAMPLES) # Matlab toolbox -add_subdirectory(matlab) +if (GTSAM_INSTALL_MATLAB_TOOLBOX) + add_subdirectory(matlab) +endif() # Build gtsam_unstable if (GTSAM_BUILD_UNSTABLE) @@ -168,11 +176,12 @@ message(STATUS "Build flags ") print_config_flag(${GTSAM_BUILD_TIMING} "Build Timing scripts ") print_config_flag(${GTSAM_BUILD_EXAMPLES} "Build Examples ") print_config_flag(${GTSAM_BUILD_TESTS} "Build Tests ") -print_config_flag(${GTSAM_BUILD_WRAP} "Build Wrap ") -print_config_flag(${GTSAM_BUILD_SHARED_LIBRARY} "Build shared GTSAM Library ") -print_config_flag(${GTSAM_BUILD_STATIC_LIBRARY} "Build static GTSAM Library ") +if(NOT MSVC) + print_config_flag(${GTSAM_BUILD_SHARED_LIBRARY} "Build shared GTSAM Library ") + print_config_flag(${GTSAM_BUILD_STATIC_LIBRARY} "Build static GTSAM Library ") + print_config_flag(${GTSAM_BUILD_CONVENIENCE_LIBRARIES} "Build Convenience Libraries ") +endif() print_config_flag(${GTSAM_BUILD_TYPE_POSTFIXES} "Put build-type in library name ") -print_config_flag(${GTSAM_BUILD_CONVENIENCE_LIBRARIES} "Build Convenience Libraries ") if(GTSAM_UNSTABLE_AVAILABLE) print_config_flag(${GTSAM_BUILD_UNSTABLE} "Build libgtsam_unstable ") endif() @@ -192,11 +201,8 @@ print_config_flag(${GTSAM_USE_QUATERNIONS} "Quaternions as default R message(STATUS "MATLAB toolbox flags ") print_config_flag(${GTSAM_INSTALL_MATLAB_TOOLBOX} "Install matlab toolbox ") -print_config_flag(${GTSAM_INSTALL_MATLAB_EXAMPLES} "Install matlab examples ") -print_config_flag(${GTSAM_INSTALL_MATLAB_TESTS} "Install matlab tests ") +print_config_flag(${GTSAM_BUILD_WRAP} "Build Wrap ") print_config_flag(${GTSAM_INSTALL_WRAP} "Install wrap utility ") -print_config_flag(${GTSAM_BUILD_MEX_BIN} "Build MEX binaries ") -print_config_flag(${GTSAM_INSTALL_MEX_BIN} "Install MEX binaries ") message(STATUS "===============================================================") # Include CPack *after* all flags diff --git a/gtsam/CMakeLists.txt b/gtsam/CMakeLists.txt index e168116e7..66870a09c 100644 --- a/gtsam/CMakeLists.txt +++ b/gtsam/CMakeLists.txt @@ -115,21 +115,15 @@ if (GTSAM_BUILD_SHARED_LIBRARY) endif(GTSAM_BUILD_SHARED_LIBRARY) # Create the matlab toolbox for the gtsam library -if (GTSAM_BUILD_WRAP) +if (GTSAM_INSTALL_MATLAB_TOOLBOX) # Set up codegen include(GtsamMatlabWrap) # TODO: generate these includes programmatically # Choose include flags depending on build process - if (GTSAM_BUILD_MEX_BIN) - set(MEX_INCLUDE_ROOT ${GTSAM_SOURCE_ROOT_DIR}) - set(MEX_LIB_ROOT ${CMAKE_BINARY_DIR}) - set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}/gtsam) - else() - set(MEX_INCLUDE_ROOT ${CMAKE_INSTALL_PREFIX}/include) - set(MEX_LIB_ROOT ${CMAKE_INSTALL_PREFIX}/lib) - set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}) - endif() + set(MEX_INCLUDE_ROOT ${GTSAM_SOURCE_ROOT_DIR}) + set(MEX_LIB_ROOT ${CMAKE_BINARY_DIR}) + set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}/gtsam) # Generate, build and install toolbox set(mexFlags ${GTSAM_BUILD_MEX_BINARY_FLAGS} -I${Boost_INCLUDE_DIR} -I${MEX_INCLUDE_ROOT} -I${MEX_INCLUDE_ROOT}/gtsam -I${MEX_INCLUDE_ROOT}/gtsam/base -I${MEX_INCLUDE_ROOT}/gtsam/geometry -I${MEX_INCLUDE_ROOT}/gtsam/linear -I${MEX_INCLUDE_ROOT}/gtsam/discrete -I${MEX_INCLUDE_ROOT}/gtsam/inference -I${MEX_INCLUDE_ROOT}/gtsam/nonlinear -I${MEX_INCLUDE_ROOT}/gtsam/slam) diff --git a/gtsam_unstable/CMakeLists.txt b/gtsam_unstable/CMakeLists.txt index 9851852e3..fce7510c3 100644 --- a/gtsam_unstable/CMakeLists.txt +++ b/gtsam_unstable/CMakeLists.txt @@ -73,23 +73,16 @@ if (GTSAM_UNSTABLE_BUILD_SHARED_LIBRARY) endif(GTSAM_UNSTABLE_BUILD_SHARED_LIBRARY) # Wrap version for gtsam_unstable -if (GTSAM_BUILD_WRAP) +if (GTSAM_INSTALL_MATLAB_TOOLBOX) # Set up codegen include(GtsamMatlabWrap) # TODO: generate these includes programmatically # Choose include flags depending on build process - if (GTSAM_BUILD_MEX_BIN) - set(MEX_INCLUDE_ROOT ${GTSAM_SOURCE_ROOT_DIR}) - set(MEX_LIB_ROOT ${CMAKE_BINARY_DIR}) - set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}/gtsam) - set(GTSAM_UNSTABLE_LIB_DIR ${MEX_LIB_ROOT}/gtsam_unstable) - else() - set(MEX_INCLUDE_ROOT ${CMAKE_INSTALL_PREFIX}/include) - set(MEX_LIB_ROOT ${CMAKE_INSTALL_PREFIX}/lib) - set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}) - set(GTSAM_UNSTABLE_LIB_DIR ${MEX_LIB_ROOT}) - endif() + set(MEX_INCLUDE_ROOT ${GTSAM_SOURCE_ROOT_DIR}) + set(MEX_LIB_ROOT ${CMAKE_BINARY_DIR}) + set(GTSAM_LIB_DIR ${MEX_LIB_ROOT}/gtsam) + set(GTSAM_UNSTABLE_LIB_DIR ${MEX_LIB_ROOT}/gtsam_unstable) # Generate, build and install toolbox set(mexFlags -I${Boost_INCLUDE_DIR} -I${MEX_INCLUDE_ROOT} -I${MEX_INCLUDE_ROOT}/gtsam_unstable -I${MEX_INCLUDE_ROOT}/gtsam_unstable/dynamics -I${MEX_INCLUDE_ROOT}/gtsam_unstable/discrete) @@ -97,4 +90,4 @@ if (GTSAM_BUILD_WRAP) # Macro to handle details of setting up targets wrap_library(gtsam_unstable "${mexFlags}" "./" gtsam) -endif(GTSAM_BUILD_WRAP) +endif(GTSAM_INSTALL_MATLAB_TOOLBOX) diff --git a/matlab/CMakeLists.txt b/matlab/CMakeLists.txt index 9d48a949f..84df4055c 100644 --- a/matlab/CMakeLists.txt +++ b/matlab/CMakeLists.txt @@ -1,37 +1,29 @@ # Install matlab components -if (GTSAM_BUILD_WRAP) - if (GTSAM_INSTALL_MATLAB_TOOLBOX) - # Utility functions - message(STATUS "Installing Matlab Utility Functions") - # Matlab files: *.m and *.fig - file(GLOB matlab_utils_m "${GTSAM_SOURCE_ROOT_DIR}/matlab/*.m") - file(GLOB matlab_utils_fig "${GTSAM_SOURCE_ROOT_DIR}/matlab/*.fig") - set(matlab_utils ${matlab_utils_m} ${matlab_utils_fig}) - install(FILES ${matlab_utils} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam) - - # Tests - if (GTSAM_INSTALL_MATLAB_TESTS) - message(STATUS "Installing Matlab Toolbox Tests") - file(GLOB matlab_tests "${GTSAM_SOURCE_ROOT_DIR}/matlab/tests/*.m") - install(FILES ${matlab_tests} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/tests) - endif () - - # Examples - if (GTSAM_INSTALL_MATLAB_EXAMPLES) - message(STATUS "Installing Matlab Toolbox Examples") - # Matlab files: *.m and *.fig - file(GLOB matlab_examples_m "${GTSAM_SOURCE_ROOT_DIR}/matlab/examples/*.m") - file(GLOB matlab_examples_fig "${GTSAM_SOURCE_ROOT_DIR}/matlab/examples/*.fig") - set(matlab_examples ${matlab_examples_m} ${matlab_examples_fig}) - install(FILES ${matlab_examples} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/examples) - - message(STATUS "Installing Matlab Toolbox Examples (Data)") - # Data files: *.graph and *.txt - file(GLOB matlab_examples_data_graph "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.graph") - file(GLOB matlab_examples_data_txt "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.txt") - set(matlab_examples_data ${matlab_examples_data_graph} ${matlab_examples_data_txt}) - install(FILES ${matlab_examples_data} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/Data) - endif () - endif () -endif () +# Utility functions +message(STATUS "Installing Matlab Utility Functions") +# Matlab files: *.m and *.fig +file(GLOB matlab_utils_m "${GTSAM_SOURCE_ROOT_DIR}/matlab/*.m") +file(GLOB matlab_utils_fig "${GTSAM_SOURCE_ROOT_DIR}/matlab/*.fig") +set(matlab_utils ${matlab_utils_m} ${matlab_utils_fig}) +install(FILES ${matlab_utils} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam) + +# Tests +message(STATUS "Installing Matlab Toolbox Tests") +file(GLOB matlab_tests "${GTSAM_SOURCE_ROOT_DIR}/matlab/tests/*.m") +install(FILES ${matlab_tests} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/tests) + +# Examples +message(STATUS "Installing Matlab Toolbox Examples") +# Matlab files: *.m and *.fig +file(GLOB matlab_examples_m "${GTSAM_SOURCE_ROOT_DIR}/matlab/examples/*.m") +file(GLOB matlab_examples_fig "${GTSAM_SOURCE_ROOT_DIR}/matlab/examples/*.fig") +set(matlab_examples ${matlab_examples_m} ${matlab_examples_fig}) +install(FILES ${matlab_examples} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/examples) + +message(STATUS "Installing Matlab Toolbox Examples (Data)") +# Data files: *.graph and *.txt +file(GLOB matlab_examples_data_graph "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.graph") +file(GLOB matlab_examples_data_txt "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.txt") +set(matlab_examples_data ${matlab_examples_data_graph} ${matlab_examples_data_txt}) +install(FILES ${matlab_examples_data} DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam/Data) diff --git a/wrap/CMakeLists.txt b/wrap/CMakeLists.txt index 4d6e81d2f..e27ca4564 100644 --- a/wrap/CMakeLists.txt +++ b/wrap/CMakeLists.txt @@ -1,6 +1,6 @@ # Build/install Wrap -find_package(Boost 1.42 COMPONENTS system filesystem thread REQUIRED) +find_package(Boost 1.43 COMPONENTS system filesystem thread REQUIRED) # Build the executable itself file(GLOB wrap_srcs "*.cpp") @@ -22,7 +22,7 @@ endif(GTSAM_INSTALL_WRAP) install(FILES matlab.h DESTINATION include/wrap) # Build tests -if (GTSAM_BUILD_TESTS) +if (GTSAM_BUILD_TESTS) set(wrap_local_libs wrap_lib ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY}) gtsam_add_subdir_tests("wrap" "${wrap_local_libs}" "${wrap_local_libs}" "") endif(GTSAM_BUILD_TESTS)