Created
July 3, 2015 23:28
-
-
Save jiayuzhou/380e3906ecb54e7e29a3 to your computer and use it in GitHub Desktop.
Matlab R2012b MEX configuration for Mac OSX.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# mexopts.sh Shell script for configuring MEX-file creation script, | |
# mex. These options were tested with the specified compiler. | |
# | |
# usage: Do not call this file directly; it is sourced by the | |
# mex shell script. Modify only if you don't like the | |
# defaults after running mex. No spaces are allowed | |
# around the '=' in the variable assignment. | |
# | |
# Note: For the version of system compiler supported with this release, | |
# refer to the Supported and Compatible Compiler List at: | |
# http://www.mathworks.com/support/compilers/current_release/ | |
# | |
# | |
# SELECTION_TAGs occur in template option files and are used by MATLAB | |
# tools, such as mex and mbuild, to determine the purpose of the contents | |
# of an option file. These tags are only interpreted when preceded by '#' | |
# and followed by ':'. | |
# | |
#SELECTION_TAG_MEX_OPT: Template Options file for building gcc MEX-files | |
# | |
# Copyright 1984-2011 The MathWorks, Inc. | |
# $Revision: 1.78.4.17 $ $Date: 2011/04/16 06:07:44 $ | |
# | |
# Modified by Jiayu 2015/06/29 20:55:00 | |
# Mac OSX Matlab 2012b, LLVM version >= 5.0 (llvm-gcc --version) | |
# MEX setup is likely to have problems when LLVM-GCC version is over 5.0 | |
# Given the MacOSX installed in $SDKROOT (change it if yours is different) | |
# The script | |
# 1) changed the GCC/G++ command to llvm-gcc/g++ | |
# 2) fix uint16_T type problem in GCC/G++ by adding proper flags. | |
# This file should be copied to /Users/<myname>/.matlab/R2012b/ | |
# Other workaround methods can be referred at | |
# http://stackoverflow.com/questions/22367516/mex-compile-error-unknown-type-name-char16-t | |
# | |
#---------------------------------------------------------------------------- | |
# | |
TMW_ROOT="$MATLAB" | |
MFLAGS='' | |
if [ "$ENTRYPOINT" = "mexLibrary" ]; then | |
MLIBS="-L$TMW_ROOT/bin/$Arch -lmx -lmex -lmat -lmwservices -lut" | |
else | |
MLIBS="-L$TMW_ROOT/bin/$Arch -lmx -lmex -lmat" | |
fi | |
case "$Arch" in | |
Undetermined) | |
#---------------------------------------------------------------------------- | |
# Change this line if you need to specify the location of the MATLAB | |
# root directory. The script needs to know where to find utility | |
# routines so that it can determine the architecture; therefore, this | |
# assignment needs to be done while the architecture is still | |
# undetermined. | |
#---------------------------------------------------------------------------- | |
MATLAB="$MATLAB" | |
;; | |
glnx86) | |
#---------------------------------------------------------------------------- | |
RPATH="-Wl,-rpath-link,$TMW_ROOT/bin/$Arch" | |
# StorageVersion: 1.0 | |
# CkeyName: GNU C | |
# CkeyManufacturer: GNU | |
# CkeyLanguage: C | |
# CkeyVersion: | |
# CkeyLinkerName: GNU ld | |
# CkeyLinkerVersion: | |
CC='gcc' | |
CFLAGS='-ansi -D_GNU_SOURCE' | |
CFLAGS="$CFLAGS -fPIC -pthread -m32" | |
CFLAGS="$CFLAGS -fexceptions" | |
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" | |
CLIBS="$RPATH $MLIBS -lm" | |
COPTIMFLAGS='-O -DNDEBUG' | |
CDEBUGFLAGS='-g' | |
CLIBS="$CLIBS -lstdc++" | |
# | |
# C++keyName: GNU C++ | |
# C++keyManufacturer: GNU | |
# C++keyLanguage: C++ | |
# C++keyVersion: | |
# C++keyLinkerName: GNU ld | |
# C++keyLinkerVersion: | |
CXX='g++' | |
CXXFLAGS='-ansi -D_GNU_SOURCE' | |
CXXFLAGS="$CXXFLAGS -D_FILE_OFFSET_BITS=64" | |
CXXFLAGS="$CXXFLAGS -fPIC -pthread" | |
CXXLIBS="$RPATH $MLIBS -lm" | |
CXXOPTIMFLAGS='-O -DNDEBUG' | |
CXXDEBUGFLAGS='-g' | |
# | |
# | |
# FortrankeyName: gfortran | |
# FortrankeyManufacturer: GNU | |
# FortrankeyLanguage: Fortran | |
# FortrankeyVersion: | |
# FortrankeyLinkerName: GNU ld | |
# FortrankeyLinkerVersion: | |
FC='gfortran' | |
FFLAGS='-fexceptions -fbackslash' | |
FFLAGS="$FFLAGS -fPIC" | |
FLIBS="$RPATH $MLIBS -lm" | |
FOPTIMFLAGS='-O' | |
FDEBUGFLAGS='-g' | |
# | |
LD="$COMPILER" | |
LDEXTENSION='.mexglx' | |
LDFLAGS="-pthread -shared -m32 -Wl,--version-script,$TMW_ROOT/extern/lib/$Arch/$MAPFILE -Wl,--no-undefined" | |
LDOPTIMFLAGS='-O' | |
LDDEBUGFLAGS='-g' | |
# | |
POSTLINK_CMDS=':' | |
#---------------------------------------------------------------------------- | |
;; | |
glnxa64) | |
#---------------------------------------------------------------------------- | |
RPATH="-Wl,-rpath-link,$TMW_ROOT/bin/$Arch" | |
# StorageVersion: 1.0 | |
# CkeyName: GNU C | |
# CkeyManufacturer: GNU | |
# CkeyLanguage: C | |
# CkeyVersion: | |
# CkeyLinkerName: GNU ld | |
# CkeyLinkerVersion: | |
CC='gcc' | |
CFLAGS='-ansi -D_GNU_SOURCE' | |
CFLAGS="$CFLAGS -fexceptions" | |
CFLAGS="$CFLAGS -fPIC -fno-omit-frame-pointer -pthread" | |
CLIBS="$RPATH $MLIBS -lm" | |
COPTIMFLAGS='-O -DNDEBUG' | |
CDEBUGFLAGS='-g' | |
CLIBS="$CLIBS -lstdc++" | |
# | |
# C++keyName: GNU C++ | |
# C++keyManufacturer: GNU | |
# C++keyLanguage: C++ | |
# C++keyVersion: | |
# C++keyLinkerName: GNU ld | |
# C++keyLinkerVersion: | |
CXX='g++' | |
CXXFLAGS='-ansi -D_GNU_SOURCE' | |
CXXFLAGS="$CXXFLAGS -fPIC -fno-omit-frame-pointer -pthread" | |
CXXLIBS="$RPATH $MLIBS -lm" | |
CXXOPTIMFLAGS='-O -DNDEBUG' | |
CXXDEBUGFLAGS='-g' | |
# | |
# FortrankeyName: gfortran | |
# FortrankeyManufacturer: GNU | |
# FortrankeyLanguage: Fortran | |
# FortrankeyVersion: | |
# FortrankeyLinkerName: GNU ld | |
# FortrankeyLinkerVersion: | |
# | |
FC='gfortran' | |
FFLAGS='-fexceptions -fbackslash' | |
FFLAGS="$FFLAGS -fPIC -fno-omit-frame-pointer" | |
FLIBS="$RPATH $MLIBS -lm" | |
FOPTIMFLAGS='-O' | |
FDEBUGFLAGS='-g' | |
# | |
LD="$COMPILER" | |
LDEXTENSION='.mexa64' | |
LDFLAGS="-pthread -shared -Wl,--version-script,$TMW_ROOT/extern/lib/$Arch/$MAPFILE -Wl,--no-undefined" | |
LDOPTIMFLAGS='-O' | |
LDDEBUGFLAGS='-g' | |
# | |
POSTLINK_CMDS=':' | |
#---------------------------------------------------------------------------- | |
;; | |
sol64) | |
#---------------------------------------------------------------------------- | |
echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh sol64 12 | |
#---------------------------------------------------------------------------- | |
;; | |
mac) | |
#---------------------------------------------------------------------------- | |
echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh mac 12 | |
#---------------------------------------------------------------------------- | |
;; | |
maci) | |
#---------------------------------------------------------------------------- | |
echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh maci 12 | |
#---------------------------------------------------------------------------- | |
;; | |
maci64) | |
#---------------------------------------------------------------------------- | |
# StorageVersion: 1.0 | |
# CkeyName: GNU C | |
# CkeyManufacturer: GNU | |
# CkeyLanguage: C | |
# CkeyVersion: | |
# CkeyLinkerName: | |
# CkeyLinkerVersion: | |
#CC='llvm-gcc' | |
CC='/usr/bin/gcc' | |
SDKROOT='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk' | |
MACOSX_DEPLOYMENT_TARGET='10.9' | |
ARCHS='x86_64' | |
CFLAGS="-Dchar16_t=uint16_T -fno-common -no-cpp-precomp -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" | |
CFLAGS="$CFLAGS -fexceptions" | |
CLIBS="$MLIBS" | |
COPTIMFLAGS='-O2 -DNDEBUG' | |
CDEBUGFLAGS='-g' | |
# | |
CLIBS="$CLIBS -lstdc++" | |
# C++keyName: GNU C++ | |
# C++keyManufacturer: GNU | |
# C++keyLanguage: C++ | |
# C++keyVersion: | |
# C++keyLinkerName: | |
# C++keyLinkerVersion: | |
#CXX='llvm-g++' | |
CXX='/usr/bin/g++' | |
# By default, the upgraded Clang doesn't set char16_t, which is required by MATLAB. | |
# we need to set the CXXFLAG -std=c++11 here. | |
CXXFLAGS="-std=c++11 -fno-common -no-cpp-precomp -fexceptions -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" | |
CXXLIBS="$MLIBS -lstdc++" | |
CXXOPTIMFLAGS='-O2 -DNDEBUG' | |
CXXDEBUGFLAGS='-g' | |
# | |
# FortrankeyName: GNU Fortran | |
# FortrankeyManufacturer: GNU | |
# FortrankeyLanguage: Fortran | |
# FortrankeyVersion: | |
# FortrankeyLinkerName: | |
# FortrankeyLinkerVersion: | |
FC='gfortran' | |
FFLAGS='-fexceptions -m64 -fbackslash' | |
FC_LIBDIR=`$FC -print-file-name=libgfortran.dylib 2>&1 | sed -n '1s/\/*libgfortran\.dylib//p'` | |
FC_LIBDIR2=`$FC -print-file-name=libgfortranbegin.a 2>&1 | sed -n '1s/\/*libgfortranbegin\.a//p'` | |
FLIBS="$MLIBS -L$FC_LIBDIR -lgfortran -L$FC_LIBDIR2 -lgfortranbegin" | |
FOPTIMFLAGS='-O' | |
FDEBUGFLAGS='-g' | |
# | |
LD="$CC" | |
LDEXTENSION='.mexmaci64' | |
LDFLAGS="-Wl,-twolevel_namespace -undefined error -arch $ARCHS -Wl,-syslibroot,$SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET" | |
LDFLAGS="$LDFLAGS -bundle -Wl,-exported_symbols_list,$TMW_ROOT/extern/lib/$Arch/$MAPFILE" | |
LDOPTIMFLAGS='-O' | |
LDDEBUGFLAGS='-g' | |
# | |
POSTLINK_CMDS=':' | |
#---------------------------------------------------------------------------- | |
;; | |
esac | |
############################################################################# | |
# | |
# Architecture independent lines: | |
# | |
# Set and uncomment any lines which will apply to all architectures. | |
# | |
#---------------------------------------------------------------------------- | |
# CC="$CC" | |
# CFLAGS="$CFLAGS" | |
# COPTIMFLAGS="$COPTIMFLAGS" | |
# CDEBUGFLAGS="$CDEBUGFLAGS" | |
# CLIBS="$CLIBS" | |
# | |
# FC="$FC" | |
# FFLAGS="$FFLAGS" | |
# FOPTIMFLAGS="$FOPTIMFLAGS" | |
# FDEBUGFLAGS="$FDEBUGFLAGS" | |
# FLIBS="$FLIBS" | |
# | |
# LD="$LD" | |
# LDFLAGS="$LDFLAGS" | |
# LDOPTIMFLAGS="$LDOPTIMFLAGS" | |
# LDDEBUGFLAGS="$LDDEBUGFLAGS" | |
#---------------------------------------------------------------------------- | |
############################################################################# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment