-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathbuild.bat
More file actions
185 lines (159 loc) · 8.66 KB
/
build.bat
File metadata and controls
185 lines (159 loc) · 8.66 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
@echo off
setlocal enabledelayedexpansion
set DEFAULT_BUILD_DIR=BuildArtifacts
if not exist %DEFAULT_BUILD_DIR% mkdir %DEFAULT_BUILD_DIR%
set CPP_MAIN=Core\RagLite2.cpp
set DEBUG_EXE=%DEFAULT_BUILD_DIR%/RagLiteWin32Dbg.exe
set RELEASE_EXE=%DEFAULT_BUILD_DIR%/RagLiteWin32.exe
set PAK_MAIN=Core\FileFormats\ArcturusPAK.cpp
set PAK_COMMANDLINE_EXE=%DEFAULT_BUILD_DIR%/ArcturusPAK.exe
set PROGRAM_DLLS=PatternTest DummyTest
set CLI_TOOLS=DependencyCheck PatchInfo RagnarokTools
set RUNTIME_LIBS=gdi32.lib shlwapi.lib user32.lib xinput.lib winmm.lib imagehlp.lib ws2_32.lib
for /f "delims=" %%i in ('call git describe --always --dirty') do set GIT_COMMIT_HASH=\"%%i\"
set ICON_RC=Assets/RagLite2.rc
set ICON_RES=%DEFAULT_BUILD_DIR%\RagLite2.res
:: Generate app icon
rc /nologo /fo %ICON_RES% %ICON_RC% || exit /b
set SHARED_COMPILE_FLAGS=
set SHARED_LINK_FLAGS=
set DEBUG_LINK_FLAGS=
set RELEASE_LINK_FLAGS=
set CPP_STANDARD=/std:c++23preview
:: /diagnostics:caret Reports errors and warnings with line/column/caret
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /diagnostics:caret
:: /EHsc- Disable C++ exceptions (and Structured Exception Handling translation)
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /EHsc-
:: /GR- Disables run-time type information (RTTI)
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /GR-
:: /MP Use multiple effective processors to speed up compilation
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /MP
:: /nologo Suppresses the display of the copyright banner
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /nologo
:: /options:strict Error when passing unrecognized compiler flags
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /options:strict
:: /W4 Enable informational warnings (levels 0 through 4)
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /W4
:: ...except useless ones
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /wd4189 /wd4100 /wd4505
:: /WX Treat all warnings as errors
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /WX
:: /Zc:strictStrings Require const qualifier for pointers initialized via string literals
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /Zc:strictStrings
:: /Zf Faster PDB generation in parallel builds (minimize RPC calls to mspdbsrv.exe)
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /Zf
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% %CPP_STANDARD%
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /DRAGLITE_COMMIT_HASH=%GIT_COMMIT_HASH%
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /D_CRT_SECURE_NO_WARNINGS
set SHARED_COMPILE_FLAGS=%SHARED_COMPILE_FLAGS% /Fo%DEFAULT_BUILD_DIR%\
:: /INCREMENTAL:NO Disable incremental linkage
set SHARED_LINK_FLAGS=%SHARED_LINK_FLAGS% /INCREMENTAL:NO
:: /MANIFEST:EMBED Embed assembly manifest in the executable
set SHARED_LINK_FLAGS=%SHARED_LINK_FLAGS% /MANIFEST:EMBED
:: /noexp Suppresses the display of the copyright banner
set SHARED_LINK_FLAGS=%SHARED_LINK_FLAGS% /noexp
:: /NOLOGO Prevents display of the copyright message and version number
set SHARED_LINK_FLAGS=%SHARED_LINK_FLAGS% /NOLOGO
:: /NOIMPLIB Skip import library generation (.lib files aren't needed to load DLLs at runtime)
set SHARED_LINK_FLAGS=%SHARED_LINK_FLAGS% /NOIMPLIB
:::::: Debug binaries
set DEBUG_COMPILE_FLAGS=
:: /FC Displays the full path of source code files in diagnostic text
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /FC
:: /GS Enable buffer security checks
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /GS
:: /MTd Use the debug multithread, static version of the runtime library (LIBCMTD.lib)
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /MTd
:: /Od Disables optimization
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /Od
:: /RTCcsu Enables run-time checks (stack frame, uninitialized variables, etc.)
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /RTCcsu
:: /sdl Enables recommended Security Development Lifecycle (SDL) checks
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /sdl
:: /Z7 Generate complete debugging information (embedded PDB)
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% /Z7
:: /DEBUG Creates debugging information (PDB file)
set DEBUG_LINK_FLAGS=%DEBUG_LINK_FLAGS% /DEBUG
set DEBUG_COMPILE_FLAGS=%DEBUG_COMPILE_FLAGS% %SHARED_COMPILE_FLAGS%
set DEBUG_LINK_FLAGS=%DEBUG_LINK_FLAGS% %SHARED_LINK_FLAGS%
:::::: Release binaries
set RELEASE_COMPILE_FLAGS=
:: /DNDEBUG Disable runtime assertions (#define NDEBUG)
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /DNDEBUG
:: /GL Enables whole program optimization
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /GL
:: /GS- Disables buffer security checks (faster, but less safe)
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /GS-
:: /Gy Enable Function-Level Linking via packaged functions (COMDATs)
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /Gy
:: /Gw Package global data in COMDAT sections for optimization
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /Gw
:: /MT Use the multithread, static version of the runtime library (LIBCMT.lib)
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /MT
:: /Oi Generates intrinsic functions
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /Oi
:: /O2 Creates fast code
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% /O2
:: /LTCG:STATUS Enables link-time code generation (display progress also)
set RELEASE_LINK_FLAGS=%RELEASE_LINK_FLAGS% /LTCG:STATUS
:: /NXCOMPAT Indicates compatibility with Windows Data Execution Prevention feature
set RELEASE_LINK_FLAGS=%RELEASE_LINK_FLAGS% /NXCOMPAT
:: /OPT:REF Eliminates functions and data that are never referenced
set RELEASE_LINK_FLAGS=%RELEASE_LINK_FLAGS% /OPT:REF
:: /OPT:ICF Merge identical COMDAT packages
set RELEASE_LINK_FLAGS=%RELEASE_LINK_FLAGS% /OPT:ICF
set RELEASE_COMPILE_FLAGS=%RELEASE_COMPILE_FLAGS% %SHARED_COMPILE_FLAGS%
set RELEASE_LINK_FLAGS=%RELEASE_LINK_FLAGS% %SHARED_LINK_FLAGS%
for %%T in (%CLI_TOOLS%) do (
set CLI_MAIN=Tools/%%T.cpp
set DEBUG_CLI=%DEFAULT_BUILD_DIR%/%%TDbg.exe
set RELEASE_CLI=%DEFAULT_BUILD_DIR%/%%T.exe
call :msvcbuild !RELEASE_CLI! !CLI_MAIN! "%RUNTIME_LIBS%" "%RELEASE_COMPILE_FLAGS%" "%RELEASE_LINK_FLAGS%" || exit /b
call :msvcbuild !DEBUG_CLI! !CLI_MAIN! "%RUNTIME_LIBS%" "%DEBUG_COMPILE_FLAGS%" "%DEBUG_LINK_FLAGS%" || exit /b
call :checkdeps !RELEASE_CLI! %DEFAULT_BUILD_DIR% || exit /b
call :checkdeps !DEBUG_CLI! %DEFAULT_BUILD_DIR% || exit /b
)
call :msvcbuild !DEBUG_EXE! "%CPP_MAIN%" "%RUNTIME_LIBS%" "%DEBUG_COMPILE_FLAGS%" "%ICON_RES% %DEBUG_LINK_FLAGS%" || exit /b
call :msvcbuild !RELEASE_EXE! "%CPP_MAIN%" "%RUNTIME_LIBS%" "%RELEASE_COMPILE_FLAGS%" "%ICON_RES% %RELEASE_LINK_FLAGS%" || exit /b
call :msvcbuild !PAK_COMMANDLINE_EXE! "%PAK_MAIN%" "%RUNTIME_LIBS%" "%RELEASE_COMPILE_FLAGS%" "%ICON_RES% %RELEASE_LINK_FLAGS%" || exit /b
call :checkdeps !DEBUG_EXE! %DEFAULT_BUILD_DIR% || exit /b
call :checkdeps !RELEASE_EXE! %DEFAULT_BUILD_DIR% || exit /b
for %%D in (%PROGRAM_DLLS%) do (
set DLL_MAIN=Core/%%D.cpp
set DEBUG_DLL=%DEFAULT_BUILD_DIR%/RagLite%%DDbg.dll
set RELEASE_DLL=%DEFAULT_BUILD_DIR%/RagLite%%D.dll
set NO_LIBS=
call :msvcbuild !DEBUG_DLL! !DLL_MAIN! "%NO_LIBS%" "%DEBUG_COMPILE_FLAGS%" "/DLL %DEBUG_LINK_FLAGS%" || exit /b
call :msvcbuild !RELEASE_DLL! !DLL_MAIN! "%NO_LIBS%" "%RELEASE_COMPILE_FLAGS%" "/DLL %RELEASE_LINK_FLAGS%" || exit /b
call :checkdeps !DEBUG_DLL! %DEFAULT_BUILD_DIR% || exit /b
call :checkdeps !RELEASE_DLL! %DEFAULT_BUILD_DIR% || exit /b
)
endlocal
exit /b
:msvcbuild
set BUILD_TARGET=%1
set SOURCE_FILES=%~2
set STATIC_LIBS=%~3
set COMPILE_FLAGS=%~4
set LINKAGE_FLAGS=%~5
set BUILD_COMMAND=cl %COMPILE_FLAGS% %SOURCE_FILES% %STATIC_LIBS% /link %LINKAGE_FLAGS% /out:%BUILD_TARGET% || exit /b
echo The Ancient One speaketh:
echo Let us now turn %SOURCE_FILES% into %BUILD_TARGET%
echo Harken, mortal, as I prepare thy unholy incantation...
echo %BUILD_COMMAND%
echo --------------------------------------------------------------------------------------------------------
%BUILD_COMMAND%
echo --------------------------------------------------------------------------------------------------------
exit /b
:checkdeps
set INPUT_FILE=%1
set ROOT_DIR=%2
set CHECK_COMMAND=%ROOT_DIR%\DependencyCheck.exe %INPUT_FILE% || exit /b
echo The Ancient One speaketh:
echo Let us ensure no evil hides in %INPUT_FILE%
echo Behold, mortal, as I expose what treachery it may obscure...
echo %CHECK_COMMAND%
echo --------------------------------------------------------------------------------------------------------
%CHECK_COMMAND%
echo --------------------------------------------------------------------------------------------------------
exit /b