-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.bat
More file actions
152 lines (124 loc) · 3.74 KB
/
build.bat
File metadata and controls
152 lines (124 loc) · 3.74 KB
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
@echo off
setlocal enabledelayedexpansion
IF not EXIST build mkdir build
pushd build
set arg1=%1
set arg2=%2
set config=debug
set modeApp=1
set modeTest=0
rem default modeApp: 1 modeTest: 0
rem build test: modeApp: 1 modeTest: 1
rem test-only: modeApp: 0 modeTest: 1
rem build -> debug build
rem build rel -> release build
rem build test -> debug build and run debug test
rem build rel test -> rel build and run rel test
rem build test-only -> run debug test
rem build rel test-only -> run rel test
rem "rel" can be replaced with "release" anytime
if "!arg1!" == "rel" (
set config=release
) else if "!arg1!" == "release" (
set config=release
) else if "!arg2!" == "rel" (
set config=release
) else if "!arg2!" == "release" (
set config=release
)
if "!arg1!" == "test" (
set modeTest=1
) else if "!arg2!" == "test" (
set modeTest=1
)
rem test-only overrides everything
if "!arg1!" == "test-only" (
set modeApp=0
set modeTest=1
) else if "!arg2!" == "test-only" (
set modeApp=0
set modeTest=1
)
echo Config: !config!
echo App: !modeApp!
echo Test: !modeTest!
rem /FAs /Fm, .asm and .map
rem /LTCG link time optimization, not really used for unity builds I suppose
rem not used: /Zc:__cplusplus
rem remove debug from release
set defines=-DCOMPRESSOR_WIN32=1 -DCOMPRESSOR_DEBUG=1
set flags=/W4 /FC /Oi /EHa- /GR- /GS /std:c++20 /utf-8 /nologo
rem Couldn't get AddressSanitizer to be found automatically
rem so just copied the clang_rt.asan_dynamic-x86_64.dll to root...
rem debug: /MTd /Zi /Od
rem release: /MT /O2
if !config! == debug (
set defines=!defines! -DCOMPRESSOR_DEV=1 -DCOMPRESSOR_DEBUG=1
rem /fsanitize=address
set flags=!flags! /MTd /Od /Zi
) else if !config! == release (
rem /MT /O2
set flags=!flags! /MD /Od
)
set flagsCombined=!defines! !flags!
rem TODO: take a look at /FIXED
rem TODO: examine flags that might make Microsoft Defender flag as a virus
rem set linkerFlags=/INCREMENTAL:NO /NOCOFFGRPINFO /EMITTOOLVERSIONINFO:NO /OPT:REF /OPT:ICF /FIXED /merge:_RDATA=.rdata /SUBSYSTEM:WINDOWS
set linkerFlags=/SUBSYSTEM:WINDOWS
rem libraries
set win32Libraries=Kernel32.lib User32.lib Shell32.lib Comdlg32.lib Shlwapi.lib Pathcch.lib
set dxLibraries=d3d11.lib dxgi.lib d3dcompiler.lib
set buildFailed=0
if !modeApp! == 1 (
if exist *.pdb del /q win32_compressor.pdb
echo !defines!
echo !flags!
cl !flagsCombined! ../src/win32_compressor.cpp /I ../src /I ../vendor/imgui ^
/link !linkerFlags! !win32Libraries! !dxLibraries!
if ERRORLEVEL 1 (
set buildFailed=1
echo [31m[1mwin32_compressor.cpp failed[0m[1m
)
rem Don't remember the layout when testing UX
IF EXIST imgui.ini del imgui.ini
set NOW=!TIME:~0,8!
echo.
if !buildFailed! NEQ 0 (
echo [31m[1mBuild failed[0m[1m !DATE! !NOW!
) else (
echo [32m[1mBuild succeeded[0m[1m !DATE! !NOW!
)
)
if !modeTest! == 1 (
echo Building tests...
set defines=!defines! -DCOMPRESSOR_TESTS=1
echo !defines!
echo !flags!
set flagsCombined=!defines! !flags!
cl !flagsCombined! /wd4505 ../src/compressor_tests.cpp /I ../src /I ../vendor ^
/link /SUBSYSTEM:CONSOLE !win32Libraries!
set NOW=!TIME:~0,8!
if ERRORLEVEL 1 (
echo [31m[1mtests.cpp failed[0m[1m !DATE! !NOW!
set buildFailed=1
) else (
echo Running tests...
rem --success, show all INFO output
compressor_tests.exe --no-intro
if ERRORLEVEL 1 (
set buildFailed=1
echo [31m[1mTests failed[0m[1m !DATE! !NOW!
) else (
echo [32m[1mTests passed[0m[1m !DATE! !NOW!
)
)
)
popd
echo.
if !buildFailed! NEQ 0 (
echo BUILD FAILED
exit /b 1
) else (
echo BUILD SUCCESS
exit /b 0
)