Skip to content

Instantly share code, notes, and snippets.

@sredna
Last active June 11, 2018 20:58
Show Gist options
  • Save sredna/5f6b8862f4ad5bddaea096d2ef361627 to your computer and use it in GitHub Desktop.
Save sredna/5f6b8862f4ad5bddaea096d2ef361627 to your computer and use it in GitHub Desktop.
build_zlib.cmd
@echo off
setlocal ENABLEEXTENSIONS
if not "%~1" == "" set MACHINE=%~1
if "%MACHINE%" == "" (
set MACHINE=AMD64
echo.WARN: MACHINE target not set, defaulting to %MACHINE%
)
set _win=win32
(echo.%MACHINE% | find /I "64")&&set _win=win64
set src=%~dp0zlib-src
set dst=%~dp0zlib-%_win%-%MACHINE%
set _CFLAGS_CUSTOM=-Os -Oy -GF -Gy -GS-
REM TODO: Should define ZLIB_DLL?
set CFLAGS=
set CL=
set LINK=
set STATICLIB=zlib.lib
set SHAREDLIB=zlib1.dll
set IMPLIB=zdll.lib
set CFLAGS=-nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
set LDFLAGS=-nologo -debug -incremental:no -opt:ref -MACHINE:%MACHINE% bufferoverflowU.lib
set ARFLAGS=-nologo
set OBJS=adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj
set RES=zlib1.res
if /I "%MACHINE%"=="ARM" set CFLAGS=%CFLAGS% -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
md "%dst%"
md "%dst%\include"
copy "%src%\zlib.h" "%dst%\include\"
copy "%src%\zconf.h" "%dst%\include\"
md "%dst%\lib"
md "%dst%\temp"
pushd "%dst%\temp"
for %%A in (%OBJS%) do call CL %CFLAGS% %_CFLAGS_CUSTOM% "%src%\%%~nA.c" /c
call RC /dWIN32 /d%_win% /r /fo%dst%\temp\%RES% %src%/win32/zlib1.rc
REM https://github.com/madler/zlib/issues/325#LNK1355: invalid base address 0x5A4C0000; ARM64 image cannot have base address below 4GB
set _LINK_BASE=-base:0x5A4C0000
if /I "%MACHINE%" == "ARM64" set "_LINK_BASE="
call LINK %LDFLAGS% -def:%src%/win32/zlib.def -dll -implib:%IMPLIB% -out:%SHAREDLIB% %_LINK_BASE% %OBJS% %RES%
call LIB %ARFLAGS% -out:"%dst%\lib\%STATICLIB%" %OBJS%
popd
move /Y "%dst%\temp\%IMPLIB%" "%dst%\lib\"
move /Y "%dst%\temp\%SHAREDLIB%" "%dst%\"
rmdir /S "%dst%\temp"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment