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