From 787c320d201fdfd317eb910272e4c12cf9001f41 Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Thu, 14 Jul 2016 11:02:44 +0200 Subject: [PATCH] Add matlab bindings --- CMakeLists.txt | 8 +++++++- octave/CMakeLists.txt | 44 ++++++++++++++++++++++++------------------- test/t_octave.m | 2 +- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1cf877f..3fa727c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ option (WITH_CXX "enable cxx routines" OFF) option (BUILD_SHARED_LIBS "Build NLOPT as a shared library" ON) option (BUILD_PYTHON "build python bindings" ON) option (BUILD_OCTAVE "build octave bindings" ON) +option (BUILD_MATLAB "build matlab bindings" OFF) option (BUILD_GUILE "build guile bindings" ON) option (USE_SWIG "use SWIG to build bindings" ON) @@ -272,7 +273,12 @@ if (BUILD_OCTAVE) find_package (Octave) endif () -if (OCTAVE_FOUND) +if (BUILD_MATLAB) + cmake_minimum_required (VERSION 3.3) # for the matlab_add_mex macro + find_package (Matlab) +endif () + +if (OCTAVE_FOUND OR Matlab_FOUND) add_subdirectory (octave) endif () diff --git a/octave/CMakeLists.txt b/octave/CMakeLists.txt index 5453462..0c8e6f3 100644 --- a/octave/CMakeLists.txt +++ b/octave/CMakeLists.txt @@ -1,25 +1,31 @@ -file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "#define NLOPT_OPTIMIZE_USAGE \\\n") -file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt_optimize.m INPUT_LINES) -foreach (INPUT_LINE ${INPUT_LINES}) - string (REGEX REPLACE "^% " "" INPUT_LINE ${INPUT_LINE}) - string (REGEX REPLACE "^%" "" INPUT_LINE ${INPUT_LINE}) - foreach (repl_expr "tolerance" "help NLOPT_LN_SBPLX" "population") - string (REGEX REPLACE "\"${repl_expr}\"" "${repl_expr}" INPUT_LINE "${INPUT_LINE}") +if (OCTAVE_FOUND) + file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "#define NLOPT_OPTIMIZE_USAGE \\\n") + file (STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt_optimize.m INPUT_LINES) + foreach (INPUT_LINE ${INPUT_LINES}) + string (REGEX REPLACE "^% " "" INPUT_LINE ${INPUT_LINE}) + string (REGEX REPLACE "^%" "" INPUT_LINE ${INPUT_LINE}) + foreach (repl_expr "tolerance" "help NLOPT_LN_SBPLX" "population") + string (REGEX REPLACE "\"${repl_expr}\"" "${repl_expr}" INPUT_LINE "${INPUT_LINE}") + endforeach () + file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\"${INPUT_LINE}\\n\" \\\n") endforeach () - file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\"${INPUT_LINE}\\n\" \\\n") -endforeach () -file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\n") + file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h "\n") -include_directories (${OCTAVE_INCLUDE_DIRS}) -include_directories (${CMAKE_CURRENT_BINARY_DIR}) -octave_add_oct (nlopt_optimize SOURCES nlopt_optimize-oct.cc ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h LINK_LIBRARIES ${nlopt_lib}) + include_directories (${OCTAVE_INCLUDE_DIRS}) + include_directories (${CMAKE_CURRENT_BINARY_DIR}) + octave_add_oct (nlopt_optimize SOURCES nlopt_optimize-oct.cc ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h LINK_LIBRARIES ${nlopt_lib}) -file (RELATIVE_PATH PKG_OCTAVE_OCT_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_SITE_DIR}) -install (TARGETS nlopt_optimize DESTINATION ${PKG_OCTAVE_OCT_SITE_DIR}) + file (RELATIVE_PATH PKG_OCTAVE_OCT_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_SITE_DIR}) + install (TARGETS nlopt_optimize DESTINATION ${PKG_OCTAVE_OCT_SITE_DIR}) -set (MFILES NLOPT_GN_DIRECT.m NLOPT_GN_DIRECT_L.m NLOPT_GN_DIRECT_L_RAND.m NLOPT_GN_DIRECT_NOSCAL.m NLOPT_GN_DIRECT_L_NOSCAL.m NLOPT_GN_DIRECT_L_RAND_NOSCAL.m NLOPT_GN_ORIG_DIRECT.m NLOPT_GN_ORIG_DIRECT_L.m NLOPT_GD_STOGO.m NLOPT_GD_STOGO_RAND.m NLOPT_LD_LBFGS_NOCEDAL.m NLOPT_LD_LBFGS.m NLOPT_LN_PRAXIS.m NLOPT_LD_VAR1.m NLOPT_LD_VAR2.m NLOPT_LD_TNEWTON.m NLOPT_LD_TNEWTON_RESTART.m NLOPT_LD_TNEWTON_PRECOND.m NLOPT_LD_TNEWTON_PRECOND_RESTART.m NLOPT_GN_CRS2_LM.m NLOPT_GN_MLSL.m NLOPT_GD_MLSL.m NLOPT_GN_MLSL_LDS.m NLOPT_GD_MLSL_LDS.m NLOPT_LD_MMA.m NLOPT_LN_COBYLA.m NLOPT_LN_NEWUOA.m NLOPT_LN_NEWUOA_BOUND.m NLOPT_LN_NELDERMEAD.m NLOPT_LN_SBPLX.m NLOPT_LN_AUGLAG.m NLOPT_LD_AUGLAG.m NLOPT_LN_AUGLAG_EQ.m NLOPT_LD_AUGLAG_EQ.m NLOPT_LN_BOBYQA.m NLOPT_GN_ISRES.m NLOPT_AUGLAG.m NLOPT_AUGLAG_EQ.m NLOPT_G_MLSL.m NLOPT_G_MLSL_LDS.m NLOPT_LD_SLSQP.m NLOPT_LD_CCSAQ.m NLOPT_GN_ESCH.m) -set (M_DATA ${MFILES} nlopt_minimize.m nlopt_minimize_constrained.m nlopt_optimize.m) + set (MFILES NLOPT_GN_DIRECT.m NLOPT_GN_DIRECT_L.m NLOPT_GN_DIRECT_L_RAND.m NLOPT_GN_DIRECT_NOSCAL.m NLOPT_GN_DIRECT_L_NOSCAL.m NLOPT_GN_DIRECT_L_RAND_NOSCAL.m NLOPT_GN_ORIG_DIRECT.m NLOPT_GN_ORIG_DIRECT_L.m NLOPT_GD_STOGO.m NLOPT_GD_STOGO_RAND.m NLOPT_LD_LBFGS_NOCEDAL.m NLOPT_LD_LBFGS.m NLOPT_LN_PRAXIS.m NLOPT_LD_VAR1.m NLOPT_LD_VAR2.m NLOPT_LD_TNEWTON.m NLOPT_LD_TNEWTON_RESTART.m NLOPT_LD_TNEWTON_PRECOND.m NLOPT_LD_TNEWTON_PRECOND_RESTART.m NLOPT_GN_CRS2_LM.m NLOPT_GN_MLSL.m NLOPT_GD_MLSL.m NLOPT_GN_MLSL_LDS.m NLOPT_GD_MLSL_LDS.m NLOPT_LD_MMA.m NLOPT_LN_COBYLA.m NLOPT_LN_NEWUOA.m NLOPT_LN_NEWUOA_BOUND.m NLOPT_LN_NELDERMEAD.m NLOPT_LN_SBPLX.m NLOPT_LN_AUGLAG.m NLOPT_LD_AUGLAG.m NLOPT_LN_AUGLAG_EQ.m NLOPT_LD_AUGLAG_EQ.m NLOPT_LN_BOBYQA.m NLOPT_GN_ISRES.m NLOPT_AUGLAG.m NLOPT_AUGLAG_EQ.m NLOPT_G_MLSL.m NLOPT_G_MLSL_LDS.m NLOPT_LD_SLSQP.m NLOPT_LD_CCSAQ.m NLOPT_GN_ESCH.m) + set (M_DATA ${MFILES} nlopt_minimize.m nlopt_minimize_constrained.m nlopt_optimize.m) -file (RELATIVE_PATH PKG_OCTAVE_M_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_M_SITE_DIR}) -install (FILES ${M_DATA} DESTINATION ${PKG_OCTAVE_M_SITE_DIR}) + file (RELATIVE_PATH PKG_OCTAVE_M_SITE_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_M_SITE_DIR}) + install (FILES ${M_DATA} DESTINATION ${PKG_OCTAVE_M_SITE_DIR}) +endif () + +if (Matlab_FOUND) + matlab_add_mex (NAME nlopt_optimize-mex SRC nlopt_optimize-mex.c OUTPUT_NAME nlopt_optimize LINK_TO ${nlopt_lib}) +endif () diff --git a/test/t_octave.m b/test/t_octave.m index 8beac50..f9d863b 100644 --- a/test/t_octave.m +++ b/test/t_octave.m @@ -2,7 +2,7 @@ arg_list = argv (); for i = 1:nargin loadpath = arg_list{i}; - printf ("-- adding path: %s\n", loadpath); + printf ('-- adding path: %s\n', loadpath); addpath (loadpath); endfor -- 2.30.2