You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
5.4 KiB
Batchfile

@echo off
setlocal
setlocal EnableDelayedExpansion
cd /D "%~dp0"
:: --- Unpack Arguments -------------------------------------------------------
for %%a in (%*) do set "%%a=1"
if not "%msvc%"=="1" if not "%clang%"=="1" set msvc=1
if not "%release%"=="1" set debug=1
if "%debug%"=="1" set release=0 && echo [debug]
if "%release%"=="1" set debug=0 && echo [release]
if "%msvc%"=="1" set clang=0 && echo [msvc]
if "%clang%"=="1" set msvc=0 && echo [clang]
if "%deploy%"=="1" echo [deploy]
:: --- Unpack Command Line Build Mix-ins --------------------------------------
set auto_compile_flags=
set auto_link_flags=
if "%telemetry%"=="1" set auto_compile_flags=%auto_compile_flags% -DBUILD_TELEMETRY=1 && echo [telemetry]
if "%asan%"=="1" set auto_compile_flags=%auto_compile_flags% -fsanitize=address && echo [asan]
:: --- Mix Git Commit ID ------------------------------------------------------
git rev-parse --is-inside-work-tree >nul 2>&1 && set in_git_tree=1
if "%in_git_tree%"=="1" (
for /f %%i in ('call git describe --always --dirty') do set auto_compile_flags=%auto_compile_flags% -DBUILD_GIT_HASH=\"%%i\"
for /f %%i in ('call git rev-parse HEAD') do set auto_compile_flags=%auto_compile_flags% -DBUILD_GIT_HASH_FULL=\"%%i\"
)
:: --- [MSVC] Compile/Link Line Definitions -----------------------------------
set cl_common= /I..\code\ /I..\local\ /nologo /FC /Z7
set cl_debug= call cl /Od /DBUILD_DEBUG=1 %cl_common% %auto_compile_flags%
set cl_release= call cl /O2 /DBUILD_DEBUG=1 %cl_common% %auto_compile_flags%
set cl_link= /link /MANIFEST:EMBED /INCREMENTAL:NO /pdbaltpath:%%%%_PDB%%%% %auto_link_flags%
set cl_out= /out:
:: --- [Clang] Compile/Link Line Definitions ----------------------------------
set clang_common= -g -I..\code\ -I..\local\ -fdiagnostics-absolute-paths -Wall -Wno-unknown-warning-option -Wno-missing-braces -Wno-unused-function -Wno-unused-parameter -Wno-writable-strings -Wno-missing-field-initializers -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Wno-initializer-overrides -Wno-incompatible-pointer-types-discards-qualifiers -ferror-limit=10000
set clang_common_n64= --target=mips-unknown-elf -mcpu=mips3 -mabi=32 -EB -mno-abicalls -fno-pic -ffreestanding -nostdlib -fno-builtin -G 0 -fno-unroll-loops -DN64=1
set clang_debug= call clang -O0 -DBUILD_DEBUG=1 %clang_common% %auto_compile_flags%
set clang_release= call clang -O2 -DBUILD_DEBUG=0 %clang_common% %auto_compile_flags%
set clang_debug_n64= call clang -O0 -DBUILD_DEBUG=1 %clang_common% %auto_compile_flags% %clang_common_n64% -c
set clang_release_n64= call clang -O2 -DBUILD_DEBUG=0 %clang_common% %auto_compile_flags% %clang_common_n64% -c
set clang_link= -fuse-ld=lld -Xlinker /MANIFEST:EMBED -Xlinker /pdbaltpath:%%%%_PDB%%%% %auto_link_flags%
set clang_out= -o
:: --- [LLD] Link Line Definitions
set lld_link_common=
set lld_link_common_n64= -T "../code/n64/n64.ld"
set lld_link= call ld.lld %lld_link_common% %auto_link_flags%
set lld_link_n64= call ld.lld %lld_link_common% %lld_link_common_n64% %auto_link_flags%
:: --- Choose Compile/Link Lines ----------------------------------------------
if "%msvc%"=="1" set compile_debug=%cl_debug%
if "%msvc%"=="1" set compile_release=%cl_release%
if "%msvc%"=="1" set compile_link=%cl_link%
if "%msvc%"=="1" set out=%cl_out%
if "%clang%"=="1" set compile_debug=%clang_debug%
if "%clang%"=="1" set compile_release=%clang_release%
if "%clang%"=="1" set compile_link=%clang_link%
if "%clang%"=="1" set out=%clang_out%
if "%debug%"=="1" set compile=%compile_debug%
if "%release%"=="1" set compile=%compile_release%
if "%debug%"=="1" set compile_n64=%clang_debug_n64%
if "%release%"=="1" set compile_n64=%clang_release_n64%
set link_n64= %lld_link_n64%
set out_n64= %clang_out%
set romify_n64= n64tool -t "^!n64_rom_name^!" -o "^!n64_rom_name^!.z64" --align 256 "^!n64_rom_name^!.elf"
:: --- Per-Build Settings -----------------------------------------------------
set link_dll=-DLL
if "%msvc%"=="1" set only_compile=-c
if "%clang%"=="1" set only_compile=/c
if "%msvc%"=="1" set EHsc=/EHsc
if "%clang%"=="1" set EHsc=
if "%msvc%"=="1" set no_aslr=/DYNAMICBASE:NO
if "%clang%"=="1" set no_aslr=-Wl,/DYNAMICBASE:NO
if "%msvc%"=="1" set rc=call rc
if "%clang%"=="1" set rc=call llvm-rc
:: --- Prep Directories -------------------------------------------------------
if not exist build mkdir build
if not exist local mkdir local
:: --- Build n64tool ----------------------------------------------------------
pushd build
if "%n64tool%"=="1" if exist n64tool.exe del n64tool.exe
if not exist n64tool.exe (
%clang_debug% ..\code\third_party\n64tool\n64tool.c %clang_link% %clang_out% n64tool.exe
)
popd
:: --- Build Targets ----------------------------------------------------------
pushd build
if "%n64_test%"=="1" (
set didbuild=1
set "n64_rom_name=n64_test"
%compile_n64% ..\code\n64_test\n64_test.c
%link_n64% n64_test.o %out_n64% !n64_rom_name!.elf
%romify_n64%
)
popd
:: --- Deploy To N64 ----------------------------------------------------------
if "%deploy%"=="1" if not "%n64_rom_name%"=="" (
pushd build
..\tools\sc64deployer upload %n64_rom_name%.z64
popd
)