summaryrefslogtreecommitdiff
path: root/c/libffi_arm64/build_libffi.bat
diff options
context:
space:
mode:
Diffstat (limited to 'c/libffi_arm64/build_libffi.bat')
-rw-r--r--c/libffi_arm64/build_libffi.bat70
1 files changed, 70 insertions, 0 deletions
diff --git a/c/libffi_arm64/build_libffi.bat b/c/libffi_arm64/build_libffi.bat
new file mode 100644
index 0000000..1fc85a2
--- /dev/null
+++ b/c/libffi_arm64/build_libffi.bat
@@ -0,0 +1,70 @@
+@echo off
+goto :Run
+
+:Usage
+echo.
+echo Before running prepare_libffi.bat
+echo .
+echo LIBFFI_SOURCE environment variable must be set to the location of libffi source
+echo Source can be checked out from https://github.com/libffi/libffi
+echo.
+echo Cygwin needs to be installed (Invoke with --install-cygwin to install)
+echo.
+echo. Visual Studio 2017 or newer with ARM64 toolchain needs to be installed
+:Run
+set INSTALL_CYGWIN=
+
+:CheckOpts
+if "%1"=="" goto :CheckOptsDone
+if /I "%1"=="-?" goto :Usage
+if /I "%1"=="--install-cygwin" (set INSTALL_CYGWIN=1) & shift & goto :CheckOpts
+goto :Usage
+
+:CheckOptsDone
+
+if "%INSTALL_CYGWIN%"=="1" call :InstallCygwin
+
+REM Set build variables
+
+set BUILD=i686-pc-cygwin
+set HOST=aarch64-w64-cygwin
+if NOT DEFINED SH if exist c:\cygwin\bin\sh.exe set SH=c:\cygwin\bin\sh.exe
+
+REM Initialise ARM64 build environment
+
+if NOT DEFINED VCVARSALL (
+ for /F "tokens=*" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath -latest -prerelease -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64') DO @(set VCVARSALL="%%i\VC\Auxiliary\Build\vcvarsall.bat")
+)
+if ^%VCVARSALL:~0,1% NEQ ^" SET VCVARSALL="%VCVARSALL%"
+call %VCVARSALL% x86_arm64
+pushd %LIBFFI_SOURCE%
+%SH% --login -lc "cygcheck -dc cygwin"
+set GET_MSVCC=%SH% -lc "cd $LIBFFI_SOURCE; export MSVCC=`/usr/bin/find $PWD -name msvcc.sh`; echo ${MSVCC};"
+FOR /F "usebackq delims==" %%i IN (`%GET_MSVCC%`) do @set MSVCC=%%i
+set MSVCC=%MSVCC% -marm64
+
+echo Configuring and building libffi for ARM64
+
+%SH% -lc "(cd $LIBFFI_SOURCE; ./autogen.sh)"
+%SH% -lc "(cd $LIBFFI_SOURCE; ./configure CC='%MSVCC%' CXX='%MSVCC%' LD='link' CPP='cl -nologo -EP' CXXCPP='cl -nologo -EP' CPPFLAGS='-DFFI_BUILDING_DLL' NM='dumpbin -symbols' STRIP=':' --build=$BUILD --host=$HOST --enable-static --disable-shared)"
+%SH% -lc "(cd $LIBFFI_SOURCE; cp src/aarch64/ffitarget.h include)"
+%SH% -lc "(cd $LIBFFI_SOURCE; make)"
+
+set LIBFFI_OUT=%~dp0
+
+echo copying files to %LIBFFI_OUT%
+if not exist %LIBFFI_OUT%\include (md %LIBFFI_OUT%\include)
+copy %LIBFFI_SOURCE%\%HOST%\.libs\libffi.lib C:\Users\niysai01\Workspace\cffi\c\libffi_arm64\ffi.lib || exit /B 1
+copy %LIBFFI_SOURCE%\%HOST%\fficonfig.h %LIBFFI_OUT%\include || exit /B 1
+copy %LIBFFI_SOURCE%\%HOST%\include\*.h %LIBFFI_OUT%\include || exit /B 1
+exit /B
+
+:InstallCygwin
+setlocal
+set CYG_ROOT=C:/cygwin
+set CYG_CACHE=C:/cygwin/var/cache/setup
+set CYG_MIRROR=http://mirrors.kernel.org/sourceware/cygwin/
+powershell -c "Invoke-WebRequest https://cygwin.com/setup-x86.exe -OutFile setup.exe"
+setup.exe -qgnNdO -R "%CYG_ROOT%" -s "%CYG_MIRROR%" -l "%CYG_CACHE%" -P dejagnu -P autoconf -P automake -P libtool -P make
+endlocal
+exit /B