Skip to content

Commit 4a4da6e

Browse files
committed
add gh action to generate matlab mex files for windows, macos and linux
1 parent 4b5d452 commit 4a4da6e

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

.github/workflows/mex.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Generate Matlab mex files
2+
on: [push]
3+
jobs:
4+
mex-ci:
5+
name: ${{ matrix.os }}
6+
strategy:
7+
matrix:
8+
os: [ubuntu-latest, windows-latest, macos-latest]
9+
runs-on: ${{ matrix.os }}
10+
steps:
11+
- name: Check out repository
12+
uses: actions/checkout@v4
13+
- name: Set up MATLAB
14+
uses: matlab-actions/setup-matlab@v2
15+
with:
16+
release: R2023b
17+
cache: true
18+
- name: Generate Windows mex file
19+
if: runner.os == 'Windows'
20+
run: |
21+
export PATH=/d/hostedtoolcache/windows/MATLAB/2023.2.999/x64/bin/win64:$PATH
22+
export PATH=/c/msys64/usr/bin:$PATH
23+
export PATH=/c/msys64/mingw64/bin:$PATH
24+
export MW_MINGW64_LOC=/c/msys64/mingw64
25+
pacman -Sy --noconfirm make mingw-w64-x86_64-toolchain mingw-w64-x86_64-fftw
26+
mex -setup:.github/workflows/mex_C++_win64.xml C++
27+
cp make.inc.windows_msys make.inc
28+
sed -i '/ LIBSFFT/a \ \ LIBSFFT := `g++ --print-file-name libfftw3.a` `g++ --print-file-name libfftw3f.a` `g++ --print-file-name libfftw3_omp.a` `g++ --print-file-name libfftw3f_omp.a` `g++ --print-file-name libm.a` `g++ --print-file-name libgomp.a`' makefile
29+
/c/msys64/usr/bin/make matlab
30+
shell: C:\msys64\usr\bin\bash.exe {0}
31+
- name: Generate macOS mex file
32+
if: runner.os == 'macOS'
33+
run: |
34+
brew install fftw libomp
35+
sed 's/\/Applications\/MATLAB_R20\*\*.app/\/Users\/runner\/hostedtoolcache\/MATLAB\/2023.2.999\/arm64\/MATLAB.app/' make.inc.macosx_arm64 > make.inc
36+
sed -i -e 's/ LIBSFFT.*/\ \ LIBSFFT := \/opt\/homebrew\/opt\/fftw\/lib\/libfftw3\.a \/opt\/homebrew\/opt\/fftw\/lib\/libfftw3f\.a \/opt\/homebrew\/opt\/fftw\/lib\/libfftw3_omp.a \/opt\/homebrew\/opt\/fftw\/lib\/libfftw3f_omp\.a -L\/Users\/runner\/hostedtoolcache\/MATLAB\/2023.2.999\/arm64\/MATLAB.app\/bin\/maca64\/lib -lomp/' makefile
37+
make matlab
38+
- name: Generate Linux mex file
39+
if: runner.os == 'Linux'
40+
run: |
41+
sudo apt install libfftw3-dev
42+
sed -i '/ LIBSFFT/a \ \ LIBSFFT := `g++ --print-file-name libfftw3.a` `g++ --print-file-name libfftw3f.a` `g++ --print-file-name libfftw3_omp.a` `g++ --print-file-name libfftw3f_omp.a` -lm -lgomp' makefile
43+
make matlab
44+
- name: Upload mex files
45+
uses: actions/upload-artifact@v4
46+
with:
47+
name: ${{matrix.os}}-R2023b-finufft-mex
48+
path: ${{runner.workspace}}/finufft/matlab/finufft.mex*
49+
- name: Setup tmate session
50+
if: ${{ failure() }}
51+
uses: mxschmitt/action-tmate@v3
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<config Name="MinGW64 Compiler (C++)" ShortName="mingw64-g++" Manufacturer="GNU" Version="$VERSION" Language="C++" Priority="E" Location="$MINGWROOT">
3+
<Details CompilerExecutable="$CXX" CompilerDefines="$DEFINES" CompilerFlags="$CXXFLAGS" OptimizationFlags="$CXXOPTIMFLAGS" DebugFlags="$CXXDEBUGFLAGS" IncludeFlags="$INCLUDE" LinkerExecutable="$LDXX" LinkerFlags="$LDFLAGS $LDTYPE" LinkerLibraries="$LINKLIBS" LinkerOptimizationFlags="$LDOPTIMFLAGS" LinkerDebugFlags="$LDDEBUGFLAGS" CommandLineShell="set MINGW_ROOT_PATH=$MINGWROOT" CommandLineShellArg="" CompilerDefineFormatter="-D%s" LinkerLibrarySwitchFormatter="-l%s;-llib%s" LinkerPathFormatter="-L%s" LibrarySearchPath="$$LIB;$$LIBPATH;$$PATH;$$INCLUDE;$MATLABROOT\extern\lib\$ARCH\mingw"/>
4+
<vars CMDLINE1="$CXX -c $DEFINES $INCLUDE $CXXFLAGS $OPTIM $SRC -o $OBJ" CMDLINE2="$LDXX $LDFLAGS $LDTYPE $LINKOPTIM $LINKEXPORTVER $OBJS $CXXLIBS $LINKLIBS -o $EXE" CXX="$MINGWROOT\bin\g++" COMPILER="$CXX" DEFINES="-m64 $MATLABMEX" MATLABMEX="-DMATLAB_MEX_FILE " CFLAGS="-fexceptions -fno-omit-frame-pointer" CXXFLAGS="$CFLAGS" INCLUDE="-I&quot;$MATLABROOT/extern/include&quot; -I&quot;$MATLABROOT/simulink/include&quot;" CXXOPTIMFLAGS="-O2 -fwrapv -DNDEBUG" CXXDEBUGFLAGS="-g" LDXX="$CXX" LINKER="$LDXX" LDFLAGS="-m64 -Wl,--no-undefined" LDTYPE="-shared -static" LINKEXPORT="-Wl,&quot;$MATLABROOT/extern/lib/win64/mingw64/mexFunction.def&quot;" LINKEXPORTVER="-Wl,&quot;$MATLABROOT/extern/lib/win64/mingw64/exportsmexfileversion.def&quot;" LIBLOC="$MATLABROOT\extern\lib\win64\mingw64" LINKLIBS="-L&quot;$MATLABROOT\extern\lib\$ARCH\mingw64&quot; -llibmx -llibmex -llibmat -llibmwblas -llibMatlabDataArray -llibMatlabEngine -lm" LDOPTIMFLAGS="-s" LDDEBUGFLAGS="-g" OBJEXT=".obj" LDEXT=".mexw64" SETENV="set COMPILER=$MINGWROOT\bin\gcc
5+
set CXXCOMPILER=$CXX
6+
set COMPFLAGS=-c $CFLAGS $DEFINES $MATLABMEX
7+
set CXXCOMPFLAGS=-c $CXXFLAGS $DEFINES $MATLABMEX
8+
set OPTIMFLAGS=$CXXOPTIMFLAGS
9+
set DEBUGFLAGS=$CXXDEBUGFLAGS
10+
set LINKER=$MINGWROOT\bin\gcc
11+
set CXXLINKER=$LDXX
12+
set LINKFLAGS=$LDFLAGS $LDTYPE $LINKLIBS $LINKEXPORT
13+
set LINKDEBUGFLAGS=$LDDEBUGFLAGS
14+
set NAME_OUTPUT= -o &quot;%OUTDIR%%MEX_NAME%%MEX_EXT%&quot;" MINGWROOT="C:\msys64\mingw64" MINGWTARGET="x86_64-w64-mingw32" VERSION="C:\msys64\mingw64\g++ -dumpversion"/>
15+
<client>
16+
<engine LINKLIBS="$LINKLIBS -llibeng -llibMatlabDataArray -llibMatlabEngine" LINKEXPORT="" LINKEXPORTVER="" LDEXT=".exe" LINKTYPE="" MATLABMEX="" LDTYPE="-static"/>
17+
<mbuild CXXFLAGS="$CXXFLAGS -Wno-endif-labels" DEFFILE="" LINKLIBS="-L&quot;$MATLABROOT\extern\lib\$ARCH\mingw64&quot; -lmclmcrrt -Bstatic &quot;$MATLABROOT\extern\bin\$ARCH\libMatlabDataArray.dll.a&quot; -llibMatlabCppSharedLib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 " LINKEXPORT="" LINKEXPORTVER="" LDEXT=".exe" LDFLAGS="-m64 -Wl,--no-undefined,--out-implib,$LIB,&quot;$DEFFILE&quot;" LINKTYPE="" MATLABMEX="" LDTYPE="-static" INCLUDE="$INCLUDE -I&quot;$MATLABROOT\extern\include\$ARCH&quot;"/>
18+
</client>
19+
<locationFinder>
20+
<MINGWROOT>
21+
<and>
22+
<envVarExists name="MW_MINGW64_LOC"/>
23+
<fileExists name="$$\bin\g++.exe"/>
24+
<dirExists name="$$\..\"/>
25+
</and>
26+
</MINGWROOT>
27+
<MINGWTARGET>
28+
<envVarExists name="MW_MINGW64_LOC"/>
29+
<cmdReturns name="$$\bin\g++ -dumpmachine"/>
30+
</MINGWTARGET>
31+
<VERSION>
32+
<envVarExists name="MW_MINGW64_LOC"/>
33+
<cmdReturns name="$$\bin\g++ -dumpversion"/>
34+
</VERSION>
35+
</locationFinder>
36+
<env PATH="$MINGWROOT\bin;$MATLABROOT\extern\include\$ARCH;$MATLABROOT\extern\include;$MATLABROOT\simulink\include;$MATLABROOT\lib\$ARCH" INCLUDE="$MINGWROOT\include;$MINGWROOT\lib\gcc\$MINGWTARGET\$VERSION\include\c++;$MINGWROOT\lib\gcc\$MINGWTARGET\$VERSION\include;$MINGWROOT\lib\gcc\$MINGWTARGET\$VERSION\include\c++\$MINGWTARGET;$MINGWROOT\lib\gcc\$MINGWTARGET\$VERSION\include\c++\backward;$MINGWROOT\$MINGWTARGET\include" LIB="$MINGWROOT\lib;" MW_TARGET_ARCH="win64" LIBPATH="$MATLABROOT\extern\lib\win64"/>
37+
<MATLAB release="R2023a"/>
38+
</config>

0 commit comments

Comments
 (0)