1*9a0e4156SSadaf Ebrahimi@echo off 2*9a0e4156SSadaf Ebrahimi 3*9a0e4156SSadaf Ebrahimirem *************************************************************************** 4*9a0e4156SSadaf Ebrahimirem * VARIABLES TO SET FOR BUILDING * 5*9a0e4156SSadaf Ebrahimirem *************************************************************************** 6*9a0e4156SSadaf Ebrahimi 7*9a0e4156SSadaf Ebrahimiset WINCE_TOOLCHAIN_ROOT=C:\WINCE700\sdk 8*9a0e4156SSadaf Ebrahimiset TOOLCHAIN=%WINCE_TOOLCHAIN_ROOT%\Bin\i386\Arm;%WINCE_TOOLCHAIN_ROOT%\Bin\i386 9*9a0e4156SSadaf Ebrahimiset INCLUDE=C:\Program Files (x86)\Windows CE Tools\SDKs\Symbol MC3200c70 Windows CE 7.0 PSDK\Include\Armv4i;C:\WINCE700\public\common\sdk\inc 10*9a0e4156SSadaf Ebrahimiset LIBPATH=C:\Program Files (x86)\Windows CE Tools\SDKs\Symbol MC3200c70 Windows CE 7.0 PSDK\Lib\ARMv4I 11*9a0e4156SSadaf Ebrahimiset LIBS=-nodefaultlib:oldnames.lib -nodefaultlib:libcmtd.lib -nodefaultlib:libcmt.lib coredll.lib corelibc.lib 12*9a0e4156SSadaf Ebrahimi 13*9a0e4156SSadaf Ebrahimirem *************************************************************************** 14*9a0e4156SSadaf Ebrahimirem * CAPSTONE CONFIGURATION * 15*9a0e4156SSadaf Ebrahimirem *************************************************************************** 16*9a0e4156SSadaf Ebrahimi 17*9a0e4156SSadaf Ebrahimiset SHARED=1 18*9a0e4156SSadaf Ebrahimiset DIET_MODE=0 19*9a0e4156SSadaf Ebrahimiset USE_SYS_DYN_MEM=1 20*9a0e4156SSadaf Ebrahimiset X86_REDUCE=0 21*9a0e4156SSadaf Ebrahimiset X86_ATT_DISABLE=0 22*9a0e4156SSadaf Ebrahimiset DISASM_ARCH_LIST=ARM ARM64 M68K MIPS POWERPC SPARC SYSZ X86 XCORE 23*9a0e4156SSadaf Ebrahimi 24*9a0e4156SSadaf Ebrahimirem *************************************************************************** 25*9a0e4156SSadaf Ebrahimirem * SANITY CHECKS * 26*9a0e4156SSadaf Ebrahimirem *************************************************************************** 27*9a0e4156SSadaf Ebrahimi 28*9a0e4156SSadaf Ebrahimisetlocal ENABLEDELAYEDEXPANSION 29*9a0e4156SSadaf Ebrahimi 30*9a0e4156SSadaf Ebrahimiif "%WINCE_TOOLCHAIN_ROOT%"=="" goto check_dir_exist_WINCE_TOOLCHAIN_ROOT 31*9a0e4156SSadaf Ebrahimiif not exist "%WINCE_TOOLCHAIN_ROOT%" goto check_dir_exist_WINCE_TOOLCHAIN_ROOT 32*9a0e4156SSadaf Ebrahimi 33*9a0e4156SSadaf Ebrahimiif "%TOOLCHAIN%"=="" goto check_dir_exist_TOOLCHAIN 34*9a0e4156SSadaf Ebrahimi 35*9a0e4156SSadaf Ebrahimiset CC= 36*9a0e4156SSadaf Ebrahimiset LD= 37*9a0e4156SSadaf Ebrahimiset AR= 38*9a0e4156SSadaf Ebrahimifor /f "tokens=1-8 delims=;" %%a in ("%TOOLCHAIN%") do ( 39*9a0e4156SSadaf Ebrahimi for %%i in (%%a %%b %%c %%d %%e %%f %%g %%h) do ( 40*9a0e4156SSadaf Ebrahimi if not "%%i"=="" ( 41*9a0e4156SSadaf Ebrahimi if not exist "%%i" goto check_dir_exist_TOOLCHAIN 42*9a0e4156SSadaf Ebrahimi if "%CC%"=="" if exist "%%i\cl.exe" set CC=%%i\cl.exe 43*9a0e4156SSadaf Ebrahimi if "%LD%"=="" if exist "%%i\link.exe" set LD=%%i\link.exe 44*9a0e4156SSadaf Ebrahimi if "%AR%"=="" if exist "%%i\lib.exe" set AR=%%i\lib.exe 45*9a0e4156SSadaf Ebrahimi ) 46*9a0e4156SSadaf Ebrahimi ) 47*9a0e4156SSadaf Ebrahimi) 48*9a0e4156SSadaf Ebrahimi 49*9a0e4156SSadaf Ebrahimiif "%CC%"=="" goto check_dir_exist_CC_LD_AR 50*9a0e4156SSadaf Ebrahimiif "%LD%"=="" goto check_dir_exist_CC_LD_AR 51*9a0e4156SSadaf Ebrahimiif "%AR%"=="" goto check_dir_exist_CC_LD_AR 52*9a0e4156SSadaf Ebrahimi 53*9a0e4156SSadaf Ebrahimiif "%INCLUDE%"=="" goto check_dir_exist_INCLUDE 54*9a0e4156SSadaf Ebrahimi 55*9a0e4156SSadaf Ebrahimiset WINDOWS_H= 56*9a0e4156SSadaf Ebrahimi 57*9a0e4156SSadaf Ebrahimiset INCLUDE_SC=%INCLUDE% 58*9a0e4156SSadaf Ebrahimiset INCLUDE= 59*9a0e4156SSadaf Ebrahimifor /f "tokens=1-8 delims=;" %%a in ("%INCLUDE_SC%") do ( 60*9a0e4156SSadaf Ebrahimi for %%i in ("%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h") do ( 61*9a0e4156SSadaf Ebrahimi if not %%i=="" ( 62*9a0e4156SSadaf Ebrahimi set INCLUDE=!INCLUDE! -I %%i 63*9a0e4156SSadaf Ebrahimi ) 64*9a0e4156SSadaf Ebrahimi ) 65*9a0e4156SSadaf Ebrahimi) 66*9a0e4156SSadaf Ebrahimi 67*9a0e4156SSadaf Ebrahimiif "%LIBPATH%"=="" goto check_dir_exist_LIBPATH 68*9a0e4156SSadaf Ebrahimi 69*9a0e4156SSadaf Ebrahimiset LIBPATH_SC=%LIBPATH% 70*9a0e4156SSadaf Ebrahimiset LIBPATH= 71*9a0e4156SSadaf Ebrahimifor /f "tokens=1-8 delims=;" %%a in ("%LIBPATH_SC%") do ( 72*9a0e4156SSadaf Ebrahimi for %%i in ("%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h") do ( 73*9a0e4156SSadaf Ebrahimi if not %%i=="" ( 74*9a0e4156SSadaf Ebrahimi set LIBPATH=!LIBPATH! -libpath:%%i 75*9a0e4156SSadaf Ebrahimi ) 76*9a0e4156SSadaf Ebrahimi ) 77*9a0e4156SSadaf Ebrahimi) 78*9a0e4156SSadaf Ebrahimi 79*9a0e4156SSadaf Ebrahimirem *************************************************************************** 80*9a0e4156SSadaf Ebrahimirem * COMPILATION OPTIONS * 81*9a0e4156SSadaf Ebrahimirem *************************************************************************** 82*9a0e4156SSadaf Ebrahimi 83*9a0e4156SSadaf Ebrahimiset OS=windowsce 84*9a0e4156SSadaf Ebrahimiset OS_VERSION=7.0 85*9a0e4156SSadaf Ebrahimiset OS_VERSION_NUMBER=0x700 86*9a0e4156SSadaf Ebrahimiset LIBARCH=arm 87*9a0e4156SSadaf Ebrahimiset MACH=THUMB 88*9a0e4156SSadaf Ebrahimi 89*9a0e4156SSadaf Ebrahimifor /f "delims=" %%i in ('cd') do set THIS_DIR=%%i 90*9a0e4156SSadaf Ebrahimi 91*9a0e4156SSadaf Ebrahimiset SOURCES_ROOT=%THIS_DIR%\.. 92*9a0e4156SSadaf Ebrahimiset TARGET_DIR=%THIS_DIR%\bin\%OS%_%OS_VERSION%_%LIBARCH% 93*9a0e4156SSadaf Ebrahimi 94*9a0e4156SSadaf Ebrahimifor /f "tokens=3" %%i in ('findstr /c:"#define CS_API_MAJOR" "%SOURCES_ROOT%\include\capstone\capstone.h"') do set CS_API_MAJOR=%%i 95*9a0e4156SSadaf Ebrahimifor /f "tokens=3" %%i in ('findstr /c:"#define CS_API_MINOR" "%SOURCES_ROOT%\include\capstone\capstone.h"') do set CS_API_MINOR=%%i 96*9a0e4156SSadaf Ebrahimi 97*9a0e4156SSadaf Ebrahimiset TARGET_VERSION=%CS_API_MAJOR%.%CS_API_MINOR% 98*9a0e4156SSadaf Ebrahimiset TAREGET_NAME=capstone-%TARGET_VERSION% 99*9a0e4156SSadaf Ebrahimi 100*9a0e4156SSadaf Ebrahimiset CPPFLAGS=-D LIBARCH_%LIBARCH% -D LIBARCH=L\"%LIBARCH%\" 101*9a0e4156SSadaf Ebrahimiset CPPFLAGS=%CPPFLAGS% -D _CRT_SECURE_NO_DEPRECATE -D _WINDOWS -D WINVER=%OS_VERSION_NUMBER% -D UNDER_CE=%OS_VERSION_NUMBER% -D _WIN32_WCE=%OS_VERSION_NUMBER% -D WINCE -D _UNICODE -D UNICODE -D STANDARDSHELL_UI_MODEL -D _USE_MATH_DEFINES -D ARM -D _ARM -D _ARM_ -D __ARM_ARCH_7__ -D __ARM_ARCH_7A__ -D __VFP_FP__=1 102*9a0e4156SSadaf Ebrahimi 103*9a0e4156SSadaf Ebrahimifor %%a in (%DISASM_ARCH_LIST%) do set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_HAS_%%a 104*9a0e4156SSadaf Ebrahimi 105*9a0e4156SSadaf Ebrahimiif %SHARED%==0 ( 106*9a0e4156SSadaf Ebrahimi set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_STATIC -D LIB_EXT=L\".lib\" 107*9a0e4156SSadaf Ebrahimi) else ( 108*9a0e4156SSadaf Ebrahimi set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_SHARED -D LIB_EXT=L\".dll\" 109*9a0e4156SSadaf Ebrahimi) 110*9a0e4156SSadaf Ebrahimi 111*9a0e4156SSadaf Ebrahimiif not %USE_SYS_DYN_MEM%==0 ( set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_USE_SYS_DYN_MEM ) 112*9a0e4156SSadaf Ebrahimiif not %DIET_MODE%==0 ( set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_DIET ) 113*9a0e4156SSadaf Ebrahimiif not %X86_REDUCE%==0 ( set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_X86_REDUCE ) 114*9a0e4156SSadaf Ebrahimiif not %X86_ATT_DISABLE%==0 ( set CPPFLAGS=!CPPFLAGS! -D CAPSTONE_X86_ATT_DISABLE ) 115*9a0e4156SSadaf Ebrahimi 116*9a0e4156SSadaf Ebrahimiset INCLUDE=-I %SOURCES_ROOT%\include -I %SOURCES_ROOT% %INCLUDE% 117*9a0e4156SSadaf Ebrahimi 118*9a0e4156SSadaf Ebrahimiset CFLAGS=%CPPFLAGS% %INCLUDE% -nologo -Zi -MT -Oi -GS -GF -QRarch7 -arch:VFPv3-D32 -QRfpe- -fp:fast -Oy- -W3 -WX 119*9a0e4156SSadaf Ebrahimi 120*9a0e4156SSadaf Ebrahimiset LDFLAGS=-nologo -debug -incremental:no -manifest:no -version:%TARGET_VERSION% -machine:%MACH% -subsystem:WINDOWSCE,%OS_VERSION% %LIBPATH% %LIBS% 121*9a0e4156SSadaf Ebrahimi 122*9a0e4156SSadaf Ebrahimiset ARFLAGS=-nologo -machine:%MACH% -subsystem:WINDOWSCE,%OS_VERSION% %LIBPATH% %LIBS% 123*9a0e4156SSadaf Ebrahimi 124*9a0e4156SSadaf Ebrahimiset SOURCES= 125*9a0e4156SSadaf Ebrahimifor %%f in (%SOURCES_ROOT%\*.c) do set SOURCES=!SOURCES! %%f 126*9a0e4156SSadaf Ebrahimifor /d %%a in (%SOURCES_ROOT%\arch\*) do for %%f in (%%a\*.c) do set SOURCES=!SOURCES! %%f 127*9a0e4156SSadaf Ebrahimi 128*9a0e4156SSadaf Ebrahimirem *************************************************************************** 129*9a0e4156SSadaf Ebrahimirem * COMPILATION COMMANDS * 130*9a0e4156SSadaf Ebrahimirem *************************************************************************** 131*9a0e4156SSadaf Ebrahimi 132*9a0e4156SSadaf Ebrahimird /q /s "%TARGET_DIR%" 133*9a0e4156SSadaf Ebrahimimd "%TARGET_DIR%" 134*9a0e4156SSadaf Ebrahimi 135*9a0e4156SSadaf Ebrahimiset PATH=%TOOLCHAIN%;%PATH% 136*9a0e4156SSadaf Ebrahimi 137*9a0e4156SSadaf Ebrahimirem %CC% -c %CFLAGS% -D DEBUG -D _DEBUG -Od -Fo"%TARGET_DIR%\\" -Fd"%TARGET_DIR%\%TAREGET_NAME%.pdb" %SOURCES% 138*9a0e4156SSadaf Ebrahimi%CC% -c %CFLAGS% -D NDEBUG -Ox -Fo"%TARGET_DIR%\\" -Fd"%TARGET_DIR%\%TAREGET_NAME%.pdb" %SOURCES% 139*9a0e4156SSadaf Ebrahimiif errorlevel 1 goto compilation_failed 140*9a0e4156SSadaf Ebrahimi 141*9a0e4156SSadaf Ebrahimiif %SHARED%==0 ( 142*9a0e4156SSadaf Ebrahimi %AR% -out:%TARGET_DIR%\%TAREGET_NAME%.lib %ARFLAGS% %TARGET_DIR%\*.obj 143*9a0e4156SSadaf Ebrahimi) else ( 144*9a0e4156SSadaf Ebrahimi %LD% -dll -out:%TARGET_DIR%\%TAREGET_NAME%.dll -map:"%TARGET_DIR%\%TAREGET_NAME%.map" -pdb:"%TARGET_DIR%\%TAREGET_NAME%.pdb" %LDFLAGS% -opt:REF -opt:ICF %TARGET_DIR%\*.obj 145*9a0e4156SSadaf Ebrahimi) 146*9a0e4156SSadaf Ebrahimi 147*9a0e4156SSadaf Ebrahimiendlocal 148*9a0e4156SSadaf Ebrahimigoto done 149*9a0e4156SSadaf Ebrahimi 150*9a0e4156SSadaf Ebrahimirem *************************************************************************** 151*9a0e4156SSadaf Ebrahimirem * ERROR REPORTING * 152*9a0e4156SSadaf Ebrahimirem *************************************************************************** 153*9a0e4156SSadaf Ebrahimi 154*9a0e4156SSadaf Ebrahimi:check_dir_exist_WINCE_TOOLCHAIN_ROOT 155*9a0e4156SSadaf Ebrahimiecho ERROR: WINCE_TOOLCHAIN_ROOT does not specify an existing directory. 156*9a0e4156SSadaf Ebrahimigoto done 157*9a0e4156SSadaf Ebrahimi 158*9a0e4156SSadaf Ebrahimi:check_dir_exist_TOOLCHAIN 159*9a0e4156SSadaf Ebrahimiecho ERROR: TOOLCHAIN does not specify an existing directory. 160*9a0e4156SSadaf Ebrahimigoto done 161*9a0e4156SSadaf Ebrahimi 162*9a0e4156SSadaf Ebrahimi:check_dir_exist_CC_LD_AR 163*9a0e4156SSadaf Ebrahimiecho ERROR: TOOLCHAIN does not specify a valid toolchain directory. 164*9a0e4156SSadaf Ebrahimigoto done 165*9a0e4156SSadaf Ebrahimi 166*9a0e4156SSadaf Ebrahimi:check_dir_exist_INCLUDE 167*9a0e4156SSadaf Ebrahimiecho ERROR: INCLUDE does not specify an existing directory. 168*9a0e4156SSadaf Ebrahimigoto done 169*9a0e4156SSadaf Ebrahimi 170*9a0e4156SSadaf Ebrahimi:check_dir_exist_LIBPATH 171*9a0e4156SSadaf Ebrahimiecho ERROR: LIBPATH does not specify an existing directory. 172*9a0e4156SSadaf Ebrahimigoto done 173*9a0e4156SSadaf Ebrahimi 174*9a0e4156SSadaf Ebrahimi:compilation_failed 175*9a0e4156SSadaf Ebrahimiecho ERROR: Compilation failed. 176*9a0e4156SSadaf Ebrahimigoto done 177*9a0e4156SSadaf Ebrahimi 178*9a0e4156SSadaf Ebrahimi:done 179*9a0e4156SSadaf Ebrahimipause 180