From 721a05122b04775085a9544b5b66e7fc0392442c Mon Sep 17 00:00:00 2001 From: Enrico Bertolazzi Date: Wed, 6 Apr 2022 09:37:16 +0200 Subject: [PATCH] added cmake compilation of MEX --- toolbox/bin/BaseHermiteMexWrapper.m | 3 ++ toolbox/bin/BaseHermiteWrapper.m | 3 -- toolbox/lib/CMakeLists.txt | 40 +++++++++++++++++++ toolbox/lib/CompileSplinesLib.m | 2 +- toolbox/lib/CompileSplinesLib_cmake.m | 21 ++++++++++ ...rapper.cc => mex_BaseHermiteMexWrapper.cc} | 0 6 files changed, 65 insertions(+), 4 deletions(-) create mode 100755 toolbox/bin/BaseHermiteMexWrapper.m delete mode 100755 toolbox/bin/BaseHermiteWrapper.m create mode 100644 toolbox/lib/CMakeLists.txt create mode 100644 toolbox/lib/CompileSplinesLib_cmake.m rename toolbox/src_mex/{mex_BaseHermiteWrapper.cc => mex_BaseHermiteMexWrapper.cc} (100%) diff --git a/toolbox/bin/BaseHermiteMexWrapper.m b/toolbox/bin/BaseHermiteMexWrapper.m new file mode 100755 index 00000000..ac9031fe --- /dev/null +++ b/toolbox/bin/BaseHermiteMexWrapper.m @@ -0,0 +1,3 @@ +function varargout = BaseHermitMexeWrapper( varargin ) + error(sprintf('\n\n\nBaseHermitMexeWrapper undefined:\ncompile MEX file using CompileSplineLib\n\n\n')); +end diff --git a/toolbox/bin/BaseHermiteWrapper.m b/toolbox/bin/BaseHermiteWrapper.m deleted file mode 100755 index 1e6c7b95..00000000 --- a/toolbox/bin/BaseHermiteWrapper.m +++ /dev/null @@ -1,3 +0,0 @@ -function varargout = BaseHermiteWrapper( varargin ) - error(sprintf('\n\n\nBaseHermiteWrapper undefined:\ncompile MEX file using CompileSplineLib\n\n\n')); -end diff --git a/toolbox/lib/CMakeLists.txt b/toolbox/lib/CMakeLists.txt new file mode 100644 index 00000000..31874159 --- /dev/null +++ b/toolbox/lib/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required( VERSION 3.14 ) + +project( Splines_Mex ) + +find_package( Matlab REQUIRED ) + +message( STATUS "Matlab_ROOT_DIR = ${Matlab_ROOT_DIR}" ) +message( STATUS "PROJECT_NAME = ${PROJECT_NAME}" ) + +## COMPONENTS MX_LIBRARY ENG_LIBRARY MEX_COMPILER ) + +# set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING INTERNAL FORCE) +set( CMAKE_CXX_STANDARD 11 ) + +set( SOURCES ) +file( GLOB S ${CMAKE_CURRENT_SOURCE_DIR}/../src/*.cc ) +foreach(F ${S}) + file( RELATIVE_PATH RF ${CMAKE_CURRENT_SOURCE_DIR} "${F}" ) + list( APPEND SOURCES ${RF} ) +endforeach() + +include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../src ${CMAKE_CURRENT_SOURCE_DIR}/../src/Utils ) + +if ( (UNIX OR LINUX) AND NOT APPLE ) + set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") + set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++") +endif() + +set( MEX_LIST BaseHermite Spline1D Spline2D SplineSet SplineVec ) + +foreach( BASE ${MEX_LIST}) + matlab_add_mex( NAME ${BASE}MexWrapper SRC ${CMAKE_CURRENT_SOURCE_DIR}/../src_mex/mex_${BASE}MexWrapper.cc ${SOURCES} ) + + add_custom_command( + TARGET ${BASE}MexWrapper + POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_CURRENT_SOURCE_DIR}/../bin" + ) +endforeach() diff --git a/toolbox/lib/CompileSplinesLib.m b/toolbox/lib/CompileSplinesLib.m index 2fbf379f..9ecdecfd 100644 --- a/toolbox/lib/CompileSplinesLib.m +++ b/toolbox/lib/CompileSplinesLib.m @@ -8,7 +8,7 @@ NAMES = { 'SplineSetMexWrapper', ... - 'BaseHermiteWrapper', ... + 'BaseHermiteMexWrapper', ... 'SplineVecMexWrapper', ... 'Spline1DMexWrapper', ... 'Spline2DMexWrapper' ... diff --git a/toolbox/lib/CompileSplinesLib_cmake.m b/toolbox/lib/CompileSplinesLib_cmake.m new file mode 100644 index 00000000..0d9f8817 --- /dev/null +++ b/toolbox/lib/CompileSplinesLib_cmake.m @@ -0,0 +1,21 @@ +clear all; +clear functions; +clear mex; +clc; + +if ismac + oldPath = getenv('PATH'); + newPath = strcat(oldPath, pathsep, '/usr/local/bin'); % on MAC + setenv('PATH', newPath); +elseif isunix +elseif ispc + oldPath = getenv('PATH'); + newPath = strcat(oldPath, pathsep, 'C:\Program Files\CMake\bin'); % on Windows + setenv('PATH', newPath); +end + +old_dir = cd(fileparts(which(mfilename))); +system('cmake -Bbuild .'); +system('cmake --build build --parallel 8'); +cd(old_dir); + diff --git a/toolbox/src_mex/mex_BaseHermiteWrapper.cc b/toolbox/src_mex/mex_BaseHermiteMexWrapper.cc similarity index 100% rename from toolbox/src_mex/mex_BaseHermiteWrapper.cc rename to toolbox/src_mex/mex_BaseHermiteMexWrapper.cc