From 827f3feb6b9da405f1162f1fce5bf1bce5824422 Mon Sep 17 00:00:00 2001 From: Varun Agrawal Date: Wed, 10 Mar 2021 09:17:22 -0500 Subject: [PATCH] update Matlab CMakeLists.txt to use the wrapper --- matlab/CMakeLists.txt | 216 ++++++++++++++++++++++-------------------- 1 file changed, 111 insertions(+), 105 deletions(-) diff --git a/matlab/CMakeLists.txt b/matlab/CMakeLists.txt index 037787dfa..1e7e88612 100644 --- a/matlab/CMakeLists.txt +++ b/matlab/CMakeLists.txt @@ -1,53 +1,72 @@ # Install matlab components +# Check if flag is enabled +if(NOT GTSAM_INSTALL_MATLAB_TOOLBOX) + return() +endif() + # Create the matlab toolbox for the gtsam library -if(GTSAM_INSTALL_MATLAB_TOOLBOX) - # Set the wrapping script variable - set(MATLAB_WRAP_SCRIPT "${GTSAM_SOURCE_DIR}/wrap/scripts/matlab_wrap.py") +# Set the wrapping script variable +set(MATLAB_WRAP_SCRIPT "${GTSAM_SOURCE_DIR}/wrap/scripts/matlab_wrap.py") - # Set up cache options - option(GTSAM_MEX_BUILD_STATIC_MODULE - "Build MATLAB wrapper statically (increases build time)" OFF) - set(GTSAM_BUILD_MEX_BINARY_FLAGS - "" - CACHE STRING "Extra flags for running Matlab MEX compilation") - set(GTSAM_TOOLBOX_INSTALL_PATH - "" - CACHE - PATH - "Matlab toolbox destination, blank defaults to CMAKE_INSTALL_PREFIX/gtsam_toolbox" +# Set up cache options +option(GTSAM_MEX_BUILD_STATIC_MODULE + "Build MATLAB wrapper statically (increases build time)" OFF) +set(GTSAM_BUILD_MEX_BINARY_FLAGS + "" + CACHE STRING "Extra flags for running Matlab MEX compilation") +set(GTSAM_TOOLBOX_INSTALL_PATH + "" + CACHE + PATH + "Matlab toolbox destination, blank defaults to CMAKE_INSTALL_PREFIX/gtsam_toolbox" +) +if(NOT GTSAM_TOOLBOX_INSTALL_PATH) + set(GTSAM_TOOLBOX_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/gtsam_toolbox") +endif() + +set(WRAP_MEX_BUILD_STATIC_MODULE ${GTSAM_MEX_BUILD_STATIC_MODULE}) +set(WRAP_BUILD_MEX_BINARY_FLAGS ${GTSAM_BUILD_MEX_BINARY_FLAGS}) +set(WRAP_TOOLBOX_INSTALL_PATH ${GTSAM_TOOLBOX_INSTALL_PATH}) +set(WRAP_CUSTOM_MATLAB_PATH ${GTSAM_CUSTOM_MATLAB_PATH}) +set(WRAP_BUILD_TYPE_POSTFIXES ${GTSAM_BUILD_TYPE_POSTFIXES}) + +# Fixup the Python paths +if(GTWRAP_DIR) + # packaged + set(GTWRAP_PACKAGE_DIR ${GTWRAP_DIR}) +else() + set(GTWRAP_PACKAGE_DIR ${GTSAM_SOURCE_DIR}/wrap) +endif() + +include(MatlabWrap) + +if(NOT BUILD_SHARED_LIBS) + message( + FATAL_ERROR + "GTSAM_INSTALL_MATLAB_TOOLBOX and BUILD_SHARED_LIBS=OFF." + "The MATLAB wrapper cannot be compiled with a static GTSAM library because mex modules are themselves shared libraries." + "If you want a self-contained mex module, enable GTSAM_MEX_BUILD_STATIC_MODULE instead of BUILD_SHARED_LIBS=OFF." ) - if(NOT GTSAM_TOOLBOX_INSTALL_PATH) - set(GTSAM_TOOLBOX_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/gtsam_toolbox") - endif() +endif() - set(WRAP_MEX_BUILD_STATIC_MODULE ${GTSAM_MEX_BUILD_STATIC_MODULE}) - set(WRAP_BUILD_MEX_BINARY_FLAGS ${GTSAM_BUILD_MEX_BINARY_FLAGS}) - set(WRAP_TOOLBOX_INSTALL_PATH ${GTSAM_TOOLBOX_INSTALL_PATH}) - set(WRAP_CUSTOM_MATLAB_PATH ${GTSAM_CUSTOM_MATLAB_PATH}) - set(WRAP_BUILD_TYPE_POSTFIXES ${GTSAM_BUILD_TYPE_POSTFIXES}) +# ############################################################################## +# Generate, build and install toolbox +set(mexFlags "${GTSAM_BUILD_MEX_BINARY_FLAGS}") +if(NOT BUILD_SHARED_LIBS) + list(APPEND mexFlags -DGTSAM_IMPORT_STATIC) +endif() - # Fixup the Python paths - if(GTWRAP_DIR) - # packaged - set(GTWRAP_PACKAGE_DIR ${GTWRAP_DIR}) - else() - set(GTWRAP_PACKAGE_DIR ${GTSAM_SOURCE_DIR}/wrap) - endif() +set(ignore gtsam::Point2 gtsam::Point3 gtsam::BearingRangeFactor + gtsam::BearingRangeFactor2D gtsam::BearingRangeFactorPose2) - include(MatlabWrap) +# Wrap +matlab_wrap(${GTSAM_SOURCE_DIR}/gtsam/gtsam.i "${GTSAM_ADDITIONAL_LIBRARIES}" + "" "${mexFlags}" "${ignore}") - if(NOT BUILD_SHARED_LIBS) - message( - FATAL_ERROR - "GTSAM_INSTALL_MATLAB_TOOLBOX and BUILD_SHARED_LIBS=OFF." - "The MATLAB wrapper cannot be compiled with a static GTSAM library because mex modules are themselves shared libraries." - "If you want a self-contained mex module, enable GTSAM_MEX_BUILD_STATIC_MODULE instead of BUILD_SHARED_LIBS=OFF." - ) - endif() - - # ############################################################################ +# Wrap version for gtsam_unstable +if(GTSAM_UNSTABLE_INSTALL_MATLAB_TOOLBOX) # Generate, build and install toolbox set(mexFlags "${GTSAM_BUILD_MEX_BINARY_FLAGS}") if(NOT BUILD_SHARED_LIBS) @@ -55,70 +74,57 @@ if(GTSAM_INSTALL_MATLAB_TOOLBOX) endif() # Wrap - wrap_and_install_library(${GTSAM_SOURCE_DIR}/gtsam/gtsam.i "${GTSAM_ADDITIONAL_LIBRARIES}" "" - "${mexFlags}") + matlab_wrap(${GTSAM_SOURCE_DIR}/gtsam_unstable/gtsam_unstable.i "gtsam" "" + "${mexFlags}") +endif(GTSAM_UNSTABLE_INSTALL_MATLAB_TOOLBOX) - # Wrap version for gtsam_unstable - if(GTSAM_UNSTABLE_INSTALL_MATLAB_TOOLBOX) - # Generate, build and install toolbox - set(mexFlags "${GTSAM_BUILD_MEX_BINARY_FLAGS}") - if(NOT BUILD_SHARED_LIBS) - list(APPEND mexFlags -DGTSAM_IMPORT_STATIC) +# Record the root dir for gtsam - needed during external builds, e.g., ROS +set(GTSAM_SOURCE_ROOT_DIR ${GTSAM_SOURCE_DIR}) +message(STATUS "GTSAM_SOURCE_ROOT_DIR: [${GTSAM_SOURCE_ROOT_DIR}]") + +# Tests message(STATUS "Installing Matlab Toolbox") +install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/" "*.m;*.fig") +install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/" + "README-gtsam-toolbox.txt") + +# Examples message(STATUS "Installing Matlab Toolbox Examples") Matlab files: +# *.m and *.fig +# install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/gtsam_examples" +# "*.m;*.fig") + +# Utilities message(STATUS "Installing Matlab Toolbox Utilities") +# install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/+gtsam" "*.m") + +# message(STATUS "Installing Matlab Toolbox Example Data") Data files: *.graph, +# *.mat, and *.txt +file(GLOB matlab_examples_data_graph + "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.graph") +file(GLOB matlab_examples_data_mat + "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.mat") +file(GLOB matlab_examples_data_txt + "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.txt") +set(matlab_examples_data + ${matlab_examples_data_graph} ${matlab_examples_data_mat} + ${matlab_examples_data_txt}) +if(GTSAM_BUILD_TYPE_POSTFIXES) + foreach(build_type ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER "${build_type}" build_type_upper) + if(${build_type_upper} STREQUAL "RELEASE") + set(build_type_tag "") # Don't create release mode tag on installed + # directory + else() + set(build_type_tag "${build_type}") endif() - - # Wrap - wrap_and_install_library(${GTSAM_SOURCE_DIR}/gtsam_unstable/gtsam_unstable.i "gtsam" "" "${mexFlags}") - endif(GTSAM_UNSTABLE_INSTALL_MATLAB_TOOLBOX) - - # Record the root dir for gtsam - needed during external builds, e.g., ROS - set(GTSAM_SOURCE_ROOT_DIR ${GTSAM_SOURCE_DIR}) - message(STATUS "GTSAM_SOURCE_ROOT_DIR: [${GTSAM_SOURCE_ROOT_DIR}]") - - # Tests message(STATUS "Installing Matlab Toolbox") - install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/" "*.m;*.fig") - install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/" - "README-gtsam-toolbox.txt") - - # Examples message(STATUS "Installing Matlab Toolbox Examples") Matlab files: - # *.m and *.fig - # install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/gtsam_examples" - # "*.m;*.fig") - - # Utilities message(STATUS "Installing Matlab Toolbox Utilities") - # install_matlab_scripts("${GTSAM_SOURCE_ROOT_DIR}/matlab/+gtsam" "*.m") - - # message(STATUS "Installing Matlab Toolbox Example Data") Data files: - # *.graph, *.mat, and *.txt - file(GLOB matlab_examples_data_graph - "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.graph") - file(GLOB matlab_examples_data_mat - "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.mat") - file(GLOB matlab_examples_data_txt - "${GTSAM_SOURCE_ROOT_DIR}/examples/Data/*.txt") - set(matlab_examples_data - ${matlab_examples_data_graph} ${matlab_examples_data_mat} - ${matlab_examples_data_txt}) - if(GTSAM_BUILD_TYPE_POSTFIXES) - foreach(build_type ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER "${build_type}" build_type_upper) - if(${build_type_upper} STREQUAL "RELEASE") - set(build_type_tag "") # Don't create release mode tag on installed - # directory - else() - set(build_type_tag "${build_type}") - endif() - # Split up filename to strip trailing '/' in GTSAM_TOOLBOX_INSTALL_PATH if - # there is one - get_filename_component(location "${GTSAM_TOOLBOX_INSTALL_PATH}" PATH) - get_filename_component(name "${GTSAM_TOOLBOX_INSTALL_PATH}" NAME) - install( - FILES ${matlab_examples_data} - DESTINATION "${location}/${name}${build_type_tag}/gtsam_examples/Data" - CONFIGURATIONS "${build_type}") - endforeach() - else() - install(FILES ${matlab_examples_data} - DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam_examples/Data) - endif() - -endif(GTSAM_INSTALL_MATLAB_TOOLBOX) + # Split up filename to strip trailing '/' in GTSAM_TOOLBOX_INSTALL_PATH if + # there is one + get_filename_component(location "${GTSAM_TOOLBOX_INSTALL_PATH}" PATH) + get_filename_component(name "${GTSAM_TOOLBOX_INSTALL_PATH}" NAME) + install( + FILES ${matlab_examples_data} + DESTINATION "${location}/${name}${build_type_tag}/gtsam_examples/Data" + CONFIGURATIONS "${build_type}") + endforeach() +else() + install(FILES ${matlab_examples_data} + DESTINATION ${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam_examples/Data) +endif()