blob: 922a47565c8da5807346e109c13b12d351328383 [file] [log] [blame]
Paul Monson32119e12019-03-29 16:30:10 -07001@echo off
2goto :Run
3
4:Usage
5echo.
6echo Before running prepare_libffi.bat
7echo LIBFFI_SOURCE environment variable must be set to the location of
8echo of python-source-deps clone of libffi branch
9echo VCVARSALL must be set to location of vcvarsall.bat
10echo cygwin must be installed (see below)
11echo SH environment variable must be set to the location of sh.exe
12echo.
13echo Tested with cygwin-x86 from https://www.cygwin.com/install.html
14echo Select http://mirrors.kernel.org as the download site
15echo Include the following cygwin packages in cygwin configuration:
16echo make, autoconf, automake, libtool, dejagnu
17echo.
18echo NOTE: dejagnu is only required for running tests.
19echo set LIBFFI_TEST=1 to run tests (optional)
20echo.
21echo Based on https://github.com/libffi/libffi/blob/master/.appveyor.yml
22echo.
23echo.
24echo.Available flags:
Steve Dower2156d962020-11-18 17:24:36 +000025echo. -x64 enable x64 build
26echo. -x86 enable x86 build
27echo. -arm32 enable arm32 build
28echo. -arm64 enable arm64 build
Paul Monson32119e12019-03-29 16:30:10 -070029echo. -? this help
30echo. --install-cygwin install cygwin to c:\cygwin
31exit /b 127
32
33:Run
34
35set BUILD_X64=
36set BUILD_X86=
Paul Monson11efd792019-04-17 18:09:16 -070037set BUILD_ARM32=
Paul Monsonf96e7fd2019-05-17 10:07:24 -070038set BUILD_ARM64=
39set BUILD_PDB=
40set BUILD_NOOPT=
Paul Monson32119e12019-03-29 16:30:10 -070041set INSTALL_CYGWIN=
42
43:CheckOpts
44if "%1"=="" goto :CheckOptsDone
45if /I "%1"=="-x64" (set BUILD_X64=1) & shift & goto :CheckOpts
46if /I "%1"=="-x86" (set BUILD_X86=1) & shift & goto :CheckOpts
Steve Dower2156d962020-11-18 17:24:36 +000047if /I "%1"=="-win32" (set BUILD_X86=1) & shift & goto :CheckOpts
Paul Monson11efd792019-04-17 18:09:16 -070048if /I "%1"=="-arm32" (set BUILD_ARM32=1) & shift & goto :CheckOpts
Paul Monsonf96e7fd2019-05-17 10:07:24 -070049if /I "%1"=="-arm64" (set BUILD_ARM64=1) & shift & goto :CheckOpts
50if /I "%1"=="-pdb" (set BUILD_PDB=-g) & shift & goto :CheckOpts
51if /I "%1"=="-noopt" (set BUILD_NOOPT=CFLAGS='-Od -warn all') & shift & goto :CheckOpts
Paul Monson32119e12019-03-29 16:30:10 -070052if /I "%1"=="-?" goto :Usage
53if /I "%1"=="--install-cygwin" (set INSTALL_CYGWIN=1) & shift & goto :CheckOpts
54goto :Usage
55
56:CheckOptsDone
57
Paul Monsonf96e7fd2019-05-17 10:07:24 -070058if NOT DEFINED BUILD_X64 if NOT DEFINED BUILD_X86 if NOT DEFINED BUILD_ARM32 if NOT DEFINED BUILD_ARM64 (
Paul Monson32119e12019-03-29 16:30:10 -070059 set BUILD_X64=1
60 set BUILD_X86=1
Paul Monson11efd792019-04-17 18:09:16 -070061 set BUILD_ARM32=1
Paul Monsonf96e7fd2019-05-17 10:07:24 -070062 set BUILD_ARM64=1
Paul Monson32119e12019-03-29 16:30:10 -070063)
64
65if "%INSTALL_CYGWIN%"=="1" call :InstallCygwin
66
67setlocal
68if NOT DEFINED SH if exist c:\cygwin\bin\sh.exe set SH=c:\cygwin\bin\sh.exe
69
70if NOT DEFINED VCVARSALL (
Steve Dower2156d962020-11-18 17:24:36 +000071 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")
Paul Monson32119e12019-03-29 16:30:10 -070072)
73if ^%VCVARSALL:~0,1% NEQ ^" SET VCVARSALL="%VCVARSALL%"
74
75if NOT DEFINED LIBFFI_SOURCE echo.&&echo ERROR LIBFFI_SOURCE environment variable not set && goto :Usage
76if NOT DEFINED SH echo ERROR SH environment variable not set && goto :Usage
77
78if not exist %SH% echo ERROR %SH% does not exist && goto :Usage
79if not exist %LIBFFI_SOURCE% echo ERROR %LIBFFI_SOURCE% does not exist && goto :Usage
80
81set OLDPWD=%LIBFFI_SOURCE%
82pushd %LIBFFI_SOURCE%
83
84%SH% --login -lc "cygcheck -dc cygwin"
85set GET_MSVCC=%SH% -lc "cd $OLDPWD; export MSVCC=`/usr/bin/find $PWD -name msvcc.sh`; echo ${MSVCC};"
86FOR /F "usebackq delims==" %%i IN (`%GET_MSVCC%`) do @set MSVCC=%%i
87
88echo.
89echo VCVARSALL : %VCVARSALL%
90echo SH : %SH%
91echo LIBFFI_SOURCE: %LIBFFI_SOURCE%
92echo MSVCC : %MSVCC%
93echo.
94
Steve Dowerde148f22019-11-20 09:30:47 -080095if not exist Makefile.in (
96 %SH% -lc "(cd $LIBFFI_SOURCE; ./autogen.sh;)"
97 if errorlevel 1 exit /B 1
98)
Paul Monson32119e12019-03-29 16:30:10 -070099
Paul Monson11efd792019-04-17 18:09:16 -0700100if "%BUILD_X64%"=="1" call :BuildOne x64 x86_64-w64-cygwin x86_64-w64-cygwin
101if "%BUILD_X86%"=="1" call :BuildOne x86 i686-pc-cygwin i686-pc-cygwin
102if "%BUILD_ARM32%"=="1" call :BuildOne x86_arm i686-pc-cygwin arm-w32-cygwin
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700103if "%BUILD_ARM64%"=="1" call :BuildOne x86_arm64 i686-pc-cygwin aarch64-w64-cygwin
Paul Monson32119e12019-03-29 16:30:10 -0700104
105popd
106endlocal
107exit /b 0
108REM all done
109
110
111REM this subroutine is called once for each architecture
112:BuildOne
113
114setlocal
115
116REM Initialize variables
117set VCVARS_PLATFORM=%1
118set BUILD=%2
119set HOST=%3
120set ASSEMBLER=
121set SRC_ARCHITECTURE=x86
122
123if NOT DEFINED VCVARS_PLATFORM echo ERROR bad VCVARS_PLATFORM&&exit /b 123
124
125if /I "%VCVARS_PLATFORM%" EQU "x64" (
126 set ARCH=amd64
127 set ARTIFACTS=%LIBFFI_SOURCE%\x86_64-w64-cygwin
128 set ASSEMBLER=-m64
129 set SRC_ARCHITECTURE=x86
130)
131if /I "%VCVARS_PLATFORM%" EQU "x86" (
132 set ARCH=win32
133 set ARTIFACTS=%LIBFFI_SOURCE%\i686-pc-cygwin
134 set ASSEMBLER=
135 set SRC_ARCHITECTURE=x86
136)
Paul Monson11efd792019-04-17 18:09:16 -0700137if /I "%VCVARS_PLATFORM%" EQU "x86_arm" (
138 set ARCH=arm32
139 set ARTIFACTS=%LIBFFI_SOURCE%\arm-w32-cygwin
140 set ASSEMBLER=-marm
141 set SRC_ARCHITECTURE=ARM
142)
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700143if /I "%VCVARS_PLATFORM%" EQU "x86_arm64" (
144 set ARCH=arm64
145 set ARTIFACTS=%LIBFFI_SOURCE%\aarch64-w64-cygwin
146 set ASSEMBLER=-marm64
147 set SRC_ARCHITECTURE=aarch64
148)
Paul Monson32119e12019-03-29 16:30:10 -0700149
150if NOT DEFINED LIBFFI_OUT set LIBFFI_OUT=%~dp0\..\externals\libffi
151set _LIBFFI_OUT=%LIBFFI_OUT%\%ARCH%
152
153echo get VS build environment
154call %VCVARSALL% %VCVARS_PLATFORM%
155
156echo clean %_LIBFFI_OUT%
157if exist %_LIBFFI_OUT% (rd %_LIBFFI_OUT% /s/q)
158
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700159echo ================================================================
Paul Monson32119e12019-03-29 16:30:10 -0700160echo Configure the build to generate fficonfig.h and ffi.h
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700161echo ================================================================
162%SH% -lc "(cd $OLDPWD; ./configure CC='%MSVCC% %ASSEMBLER% %BUILD_PDB%' CXX='%MSVCC% %ASSEMBLER% %BUILD_PDB%' LD='link' CPP='cl -nologo -EP' CXXCPP='cl -nologo -EP' CPPFLAGS='-DFFI_BUILDING_DLL' %BUILD_NOOPT% NM='dumpbin -symbols' STRIP=':' --build=$BUILD --host=$HOST;)"
Steve Dowerde148f22019-11-20 09:30:47 -0800163if errorlevel 1 exit /B %ERRORLEVEL%
Paul Monson32119e12019-03-29 16:30:10 -0700164
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700165echo ================================================================
Paul Monson32119e12019-03-29 16:30:10 -0700166echo Building libffi
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700167echo ================================================================
Paul Monson32119e12019-03-29 16:30:10 -0700168%SH% -lc "(cd $OLDPWD; export PATH=/usr/bin:$PATH; cp src/%SRC_ARCHITECTURE%/ffitarget.h include; make; find .;)"
Steve Dowerde148f22019-11-20 09:30:47 -0800169if errorlevel 1 exit /B %ERRORLEVEL%
Paul Monson32119e12019-03-29 16:30:10 -0700170
171REM Tests are not needed to produce artifacts
172if "%LIBFFI_TEST%" EQU "1" (
173 echo "Running tests..."
174 %SH% -lc "(cd $OLDPWD; export PATH=/usr/bin:$PATH; cp `find $PWD -name 'libffi-?.dll'` $HOST/testsuite/; make check; cat `find ./ -name libffi.log`)"
175) else (
176 echo "Not running tests"
177)
178
179
180echo copying files to %_LIBFFI_OUT%
181if not exist %_LIBFFI_OUT%\include (md %_LIBFFI_OUT%\include)
182copy %ARTIFACTS%\.libs\libffi-7.dll %_LIBFFI_OUT%
183copy %ARTIFACTS%\.libs\libffi-7.lib %_LIBFFI_OUT%
Paul Monsonf96e7fd2019-05-17 10:07:24 -0700184copy %ARTIFACTS%\.libs\libffi-7.pdb %_LIBFFI_OUT%
Paul Monson32119e12019-03-29 16:30:10 -0700185copy %ARTIFACTS%\fficonfig.h %_LIBFFI_OUT%\include
186copy %ARTIFACTS%\include\*.h %_LIBFFI_OUT%\include
187
188endlocal
189exit /b
190
191:InstallCygwin
192setlocal
193
194if NOT DEFINED CYG_ROOT (set CYG_ROOT=c:/cygwin)
195if NOT DEFINED CYG_CACHE (set CYG_CACHE=C:/cygwin/var/cache/setup)
196if NOT DEFINED CYG_MIRROR (set CYG_MIRROR=http://mirrors.kernel.org/sourceware/cygwin/)
197
198powershell -c "md $env:CYG_ROOT -ErrorAction SilentlyContinue"
199powershell -c "$setup = $env:CYG_ROOT+'/setup.exe'; if (!(Test-Path $setup)){invoke-webrequest https://cygwin.com/setup-x86.exe -outfile $setup}
200%CYG_ROOT%/setup.exe -qnNdO -R "%CYG_ROOT%" -s "%CYG_MIRROR%" -l "%CYG_CACHE%" -P make -P autoconf -P automake -P libtool -P dejagnu
201
202endlocal
203exit /b
204