1 2# This module is used for compiling with the Matlab mex interface to external C and C++ 3# code into Matlab as a Matlab function. 4# Defines the following: 5# ADD_MATLAB_MEX_FILE(mexfilename <source files>) 6# Creates a Matlab mex file named <mexfilename> from the given source files 7# The Matlab mex function interface mexFunction() must be defined in one of 8# the source files. 9 10INCLUDE_DIRECTORIES(${MATLAB_INCLUDE_DIR}) 11LINK_DIRECTORIES(${MATLAB_LIB_DIR}) 12 13IF(UNIX) 14 IF(APPLE) 15 SET(MEX_VER_FILE "${MATLAB_ROOT_DIR}/extern/src/mexversion.c") 16 SET(MEX_LIBRARIES ${MATLAB_LIB_DIR}/libmx.dylib ${MATLAB_LIB_DIR}/libmex.dylib ${MATLAB_LIB_DIR}/libmat.dylib m stdc++) 17 SET(MATLAB_ENGINE_LIBRARIES ${MATLAB_LIB_DIR}/libmx.dylib ${MATLAB_LIB_DIR}/libeng.dylib) 18 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bit Intel 19 SET(MEX_CXX_FLAGS "-fno-common -no-cpp-precomp -fexceptions -arch i386") 20 SET(MEX_DEFINES "MATLAB_MEX_FILE") 21 SET(MEX_RPATH "") 22 SET(MEX_LDFLAGS "-Wl,-exported_symbols_list,${MATLAB_ROOT_DIR}/extern/lib/${MATLAB_DIR_PREFIX}/mexFunction.map") 23 SET(MEX_FILE_SUFFIX ".mexmaci") 24 ELSE() # 64 bit Intel 25 SET(MEX_CXX_FLAGS "-fno-common -no-cpp-precomp -fexceptions -arch x86_64") 26 SET(MEX_DEFINES "MATLAB_MEX_FILE") 27 SET(MEX_RPATH "") 28 SET(MEX_LDFLAGS "-Wl,-exported_symbols_list,${MATLAB_ROOT_DIR}/extern/lib/${MATLAB_DIR_PREFIX}/mexFunction.map") 29 SET(MEX_FILE_SUFFIX ".mexmaci64") 30 ENDIF() 31 ELSE() 32 SET(MEX_LIBRARIES ${MATLAB_LIB_DIR}/libmx.so ${MATLAB_LIB_DIR}/libmex.so ${MATLAB_LIB_DIR}/libmat.so m stdc++) 33 SET(MATLAB_ENGINE_LIBRARIES ${MATLAB_LIB_DIR}/libmx.so ${MATLAB_LIB_DIR}/libeng.so) 34 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bit 35 SET(MEX_VER_FILE "${MATLAB_ROOT_DIR}/extern/src/mexversion.c") 36 SET(MEX_CXX_FLAGS "-ansi -fPIC -pthread") 37 SET(MEX_DEFINES "MATLAB_MEX_FILE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE") 38 SET(MEX_RPATH "-Wl,-rpath-link,${MATLAB_LIB_DIR}") 39 SET(MEX_LDFLAGS "-pthread -shared -m32 -Wl,--version-script,${MATLAB_ROOT_DIR}/extern/lib/${MATLAB_DIR_PREFIX}/mexFunction.map -Wl,--no-undefined") 40 SET(MEX_FILE_SUFFIX ".mexglx") 41 ELSE() # 64 bit 42 SET(MEX_CXX_FLAGS "-ansi -fPIC -pthread -fno-omit-frame-pointer") 43 SET(MEX_DEFINES "MATLAB_MEX_FILE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE") 44 SET(MEX_RPATH "-Wl,-rpath-link,${MATLAB_LIB_DIR}") 45 SET(MEX_LDFLAGS "-pthread -shared -Wl,--version-script,${MATLAB_ROOT_DIR}/extern/lib/${MATLAB_DIR_PREFIX}/mexFunction.map -Wl,--no-undefined") 46 SET(MEX_FILE_SUFFIX ".mexa64") 47 ENDIF() 48 ENDIF() 49ELSE() 50 SET(MEX_LIBRARIES ${MATLAB_LIB_DIR}/libmx.lib ${MATLAB_LIB_DIR}/libmex.lib ${MATLAB_LIB_DIR}/libmat.lib) 51 SET(MATLAB_ENGINE_LIBRARIES ${MATLAB_LIB_DIR}/libmx.lib ${MATLAB_LIB_DIR}/libeng.lib) 52 SET(MEX_VER_FILE "") 53 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bit 54 SET(MEX_VER_FILE "${MATLAB_ROOT_DIR}/extern/src/mexversion.c") 55 SET(MEX_CXX_FLAGS "") 56 SET(MEX_DEFINES "MATLAB_MEX_FILE") 57 SET(MEX_RPATH "") 58 SET(MEX_LDFLAGS "/MAP /export:mexFunction") 59 SET(MEX_FILE_SUFFIX ".mexw32") 60 ELSE() # 64 bit 61 SET(MEX_CXX_FLAGS "") 62 SET(MEX_DEFINES "MATLAB_MEX_FILE") 63 SET(MEX_RPATH "") 64 SET(MEX_LDFLAGS "/MAP /export:mexFunction") 65 SET(MEX_FILE_SUFFIX ".mexw64") 66 ENDIF() 67ENDIF() 68 69MACRO(ADD_MATLAB_MEX_FILE mexfilename) 70 ADD_LIBRARY(${mexfilename} SHARED ${ARGN} ${MEX_VER_FILE}) 71 TARGET_LINK_LIBRARIES(${mexfilename} ${MEX_LIBRARIES} vtkFiltersMatlab) 72 SET_TARGET_PROPERTIES(${mexfilename} PROPERTIES 73 PREFIX "" 74 SUFFIX "${MEX_FILE_SUFFIX}" 75 COMPILE_FLAGS "${MEX_CXX_FLAGS}" 76 DEFINE_SYMBOL "${MEX_DEFINES} ${DEFINE_SYMBOL}" 77 LINK_FLAGS "${MEX_RPATH} ${MEX_LDFLAGS} ${LINK_FLAGS}") 78ENDMACRO() 79