-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBuildTest.bat
More file actions
76 lines (61 loc) · 2.68 KB
/
BuildTest.bat
File metadata and controls
76 lines (61 loc) · 2.68 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
::Copyright(c) 2024 gdemers
::
::Permission is hereby granted, free of charge, to any person obtaining a copy
::of this software and associated documentation files(the "Software"), to deal
::in the Software without restriction, including without limitation the rights
::to use, copy, modify, merge, publish, distribute, sublicense, and /or sell
::copies of the Software, and to permit persons to whom the Software is
::furnished to do so, subject to the following conditions :
::
::The above copyright notice and this permission notice shall be included in all
::copies or substantial portions of the Software.
::
::THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
::IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
::FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
::AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
::LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
::OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
::SOFTWARE.
@ECHO OFF
SETLOCAL enabledelayedexpansion
:: build path executable
SET buildDir="%~dp0Out/Build"
IF NOT EXIST %buildDir%/Test (mkdir %buildDir%/Test)
:: retrieve all translation units
SET cppFilenames=
FOR /f usebackq %%i in (`DIR /ad /b %~dp0`) do (
IF "%%i" EQU "Test" (
PUSHD "%%i"
FOR /r %%k in (*.cc) do (
SET cppFilenames=!cppFilenames! %%k
)
POPD
)
)
:: project include directory
SET projDir="%~dp0Includes"
SET srcDir="%~dp0Sources"
:: vendor include directories
SET googletestDir="%~dp0Vendor/googletest/googletest"
:: googletest source files we care about
SET googletestSrc="%googletestDir%/src/gtest-all.cc" "%googletestDir%/src/gtest_main.cc"
SET cppFilenames=!cppFilenames! %googletestSrc%
:: compiler flags
SET cflags=/std:c++20 /EHsc /MT /Od /I"%projDir%" /I"%srcDir%" /I"%googletestDir%" /I"%googletestDir%/include" /Fe"%buildDir%/Test/Test.exe" /Fo"%buildDir%/Test/"
:: libraries
SET languagelibs=libucrt.lib libvcruntime.lib libcmt.lib libcpmt.lib
SET systemlibs=kernel32.lib user32.lib Shell32.lib oldnames.lib
:: https://learn.microsoft.com/en-us/cpp/c-runtime-library/compatibility?view=msvc-170
:: https://learn.microsoft.com/en-us/cpp/c-runtime-library/backward-compatibility?view=msvc-170
:: oldnames.lib
:: program linkage with system libs
SET elinkage=%languagelibs% %systemlibs%
:: system library path
SET winkit_ucrt="%WinKit_ucrt%"
SET winkit_um="%WinKit_um%"
SET vcruntime="%VS_cruntime%"
:: linker flag
SET lflags=/NODEFAULTLIB /MACHINE:X64 /SUBSYSTEM:CONSOLE /LIBPATH:%winkit_um% /LIBPATH:%winkit_ucrt% /LIBPATH:%vcruntime%
:: compiler command
cl %cflags% %cppFilenames% /link %lflags% %elinkage%