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
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
|
|
)
|