-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.bat
155 lines (123 loc) · 3.69 KB
/
build.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
@ECHO off
SETLOCAL enableextensions enabledelayedexpansion
SET "NAME=cgame"
:: (D)ebug, (R)elease
SET CONFIG=D
SET CC=cl.exe
SET C_FLAGS=/std:c17 /experimental:c11atomics /GR- /nologo /Gm- /WX /Wall ^
/fp:precise ^
/wd4820 /wd4255 /wd5045 /wd4710 /wd4711 /wd4505 ^
/I"src" ^
/I"src\pch" ^
/I"src\deps" ^
/I"src\deps\d3d12" ^
/I"src\deps\nuklear" ^
/I"src\deps\xaudio2" ^
/I"src\deps\box2d\include" ^
/I"src\deps\enkits"
IF %CONFIG%==D SET C_FLAGS=%C_FLAGS% /GS /Zi /Od /D"_DEBUG" /MTd /RTCs
IF %CONFIG%==R SET C_FLAGS=%C_FLAGS% /O2 /Gy /MT /D"NDEBUG" /Oi /Ot /GS-
SET LINK_FLAGS=/INCREMENTAL:NO /NOLOGO /NOIMPLIB /NOEXP
IF %CONFIG%==D SET LINK_FLAGS=%LINK_FLAGS% /DEBUG:FULL
IF %CONFIG%==R SET LINK_FLAGS=%LINK_FLAGS%
set LIB_FLAGS=/NOLOGO
if %CONFIG%==D set LIB_FLAGS=%LIB_FLAGS%
if %CONFIG%==R set LIB_FLAGS=%LIB_FLAGS%
SET DXC=bin\dxc.exe
SET HLSL_OUT_DIR=src\shaders\cso
SET HLSL_SM=6_6
SET HLSL_FLAGS=/WX /Ges /HV 2021 /nologo
IF %CONFIG%==D SET HLSL_FLAGS=%HLSL_FLAGS% /Od /Zi /Qembed_debug
IF %CONFIG%==R SET HLSL_FLAGS=%HLSL_FLAGS% /O3
IF "%1"=="clean" (
IF EXIST "*.pch" DEL "*.pch"
IF EXIST "*.obj" DEL "*.obj"
IF EXIST "*.lib" DEL "*.lib"
IF EXIST "*.pdb" DEL "*.pdb"
IF EXIST "*.exe" DEL "*.exe"
)
::
:: Shaders
::
:: Compiles all shaders from %FIRST_SHADER% to %LAST_SHADER%.
:: Shader is selected by defining a preprocessor symbol: _s00, _s01, ...
:: All shaders are kept in a single source file: "src\shaders\shaders.c".
::
SET FIRST_SHADER=0
SET LAST_SHADER=2
SET COMPILE_HLSL=1
IF "%1"=="hlsl" SET COMPILE_HLSL=1
IF "%1"=="clean" SET COMPILE_HLSL=1
IF %COMPILE_HLSL%==1 (
IF EXIST "%HLSL_OUT_DIR%\*.h" DEL "%HLSL_OUT_DIR%\*.h"
FOR /L %%i IN (%FIRST_SHADER%, 1, %LAST_SHADER%) DO (
SET "SH=000000%%i"
SET SH=s!SH:~-2!
SET COMPUTE_SHADER=0
IF !SH!==s02 SET COMPUTE_SHADER=1
IF !COMPUTE_SHADER!==0 (
%DXC% %HLSL_FLAGS% /T vs_%HLSL_SM% /E !SH!_vs /D_!SH! ^
src\shaders\shaders.c /Fh %HLSL_OUT_DIR%\!SH!_vs.h
%DXC% %HLSL_FLAGS% /T ps_%HLSL_SM% /E !SH!_ps /D_!SH! ^
src\shaders\shaders.c /Fh %HLSL_OUT_DIR%\!SH!_ps.h
)
IF !COMPUTE_SHADER!==1 (
%DXC% %HLSL_FLAGS% /T cs_%HLSL_SM% /E !SH!_cs /D_!SH! ^
src\shaders\shaders.c /Fh %HLSL_OUT_DIR%\!SH!_cs.h
)
)
)
::
:: Nuklear
::
IF NOT EXIST nuklear.lib (
%CC% %C_FLAGS% /Fd:"nuklear.pdb" /c "src\deps\nuklear\*.c" ^
/wd4127 /wd4116 /wd4061 /wd4701 ^
/D_CRT_SECURE_NO_WARNINGS
lib %LIB_FLAGS% "*.obj" /OUT:"nuklear.lib"
IF EXIST "*.obj" DEL "*.obj"
) & if ERRORLEVEL 1 GOTO error
::
:: Box2D
::
IF NOT EXIST box2d.lib (
%CC% %C_FLAGS% /Fd:"box2d.pdb" /c "src\deps\box2d\src\*.c" ^
/W3 /wd4242 /wd4244 /wd4018
lib %LIB_FLAGS% "*.obj" /OUT:"box2d.lib"
IF EXIST "*.obj" DEL "*.obj"
) & if ERRORLEVEL 1 GOTO error
::
:: enkiTS
::
IF NOT EXIST enkits.lib (
%CC% %C_FLAGS% /Fd:"enkits.pdb" /EHsc /W3 /wd4946 ^
/c "src\deps\enkits\TaskScheduler.cpp" "src\deps\enkits\TaskScheduler_c.cpp"
lib %LIB_FLAGS% "*.obj" /OUT:"enkits.lib"
IF EXIST "*.obj" DEL "*.obj"
) & if ERRORLEVEL 1 GOTO error
::
:: Precompiled header
::
IF NOT EXIST pch.lib (
%CC% %C_FLAGS% /Fo:"pch.lib" /Fp:"pch.pch" /Fd:"pch.pdb" /Yc"pch.h" ^
/c "src\pch\pch.c"
) & if ERRORLEVEL 1 GOTO error
::
:: Game
::
IF NOT "%1"=="hlsl" (
IF EXIST "%NAME%.exe" DEL "%NAME%.exe"
%CC% %C_FLAGS% /MP /Fp:"pch.pch" /Fd:"pch.pdb" /Fe:"%NAME%.exe" ^
/Yu"pch.h" "src\*.c" ^
/link %LINK_FLAGS% d3d12.lib dxgi.lib user32.lib ole32.lib windowscodecs.lib ^
mfplat.lib mfreadwrite.lib ^
pch.lib nuklear.lib box2d.lib enkits.lib
IF EXIST "*.obj" DEL "*.obj"
IF "%1"=="run" IF EXIST "%NAME%.exe" "%NAME%.exe"
)
GOTO end
:error
ECHO ---------------
ECHO ERROR
ECHO ---------------
:end