@echo off

REM usage: <script> [target [mode]]
REM  works from any directory, but must remain in custom/bin path to work
REM  target : if specified determines the file that acts as the build target
REM           when not specified the build target is 4coder_default_bindings.cpp
REM  mode : if set to "release" builds with optimizations
REM  The build steps are:
REM   1. preprocess the build target
REM   2. build the metadata generator
REM   3. run the metadata generator on the result from (1)
REM   4. build the build target
REM   5. cleanup after the metadata generator
REM  All output files are generated in the current directory when the script is run

set location=%cd%
set me="%~dp0"
cd %me%
cd ..
set custom_root=%cd%
set custom_bin=%custom_root%\bin
cd %location%

if NOT "%Platform%" == "X86" IF NOT "%Platform%" == "x86" (call "%custom_bin%\setup_cl_x86.bat")

set target=%1
if "%target%" == "" set target=%custom_root%\4coder_default_bindings.cpp

set debug=/Zi
set release=/O2 /Zi
set mode=%debug%
if "%2" == "release" (set mode=%release%)

set binname=%3
if "%binname%" == "" set binname="custom_4coder"

set opts=/W4 /wd4310 /wd4100 /wd4201 /wd4505 /wd4996 /wd4127 /wd4510 /wd4512 /wd4610 /wd4457 /WX
set opts=%opts% /GR- /nologo /FC
set opts=%opts% -I%custom_root%
set opts=%opts% /D OS_WINDOWS=1 /D OS_LINUX=0 /D OS_MAC=0
set opts=%opts% %mode%

set preproc_file=4coder_command_metadata.i
set meta_opts=/P /Fi%preproc_file% /DMETA_PASS

set build_dll=/LD /link /INCREMENTAL:NO /OPT:REF /RELEASE /PDBALTPATH:%%%%_PDB%%%%
set build_dll=%build_dll% /EXPORT:get_version /EXPORT:init_apis

call cl %opts% %meta_opts% %target%
call cl %opts% "%custom_root%\4coder_metadata_generator.cpp" /Femetadata_generator
metadata_generator -R "%custom_root%" "%cd%\%preproc_file%"

call cl %opts% %target% /Fecustom_4coder %build_dll%

REM file spammation preventation
del metadata_generator*
del *.exp
del *.obj
del *.lib
del %preproc_file%