blob: 60f096fab3109a976d90b59d6fa79d5de6b76e60 (
plain)
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
|
@echo off
setlocal
setlocal enabledelayedexpansion
set "cc=cl.exe"
set "ar=lib.exe"
set "bin_dir=bin\"
set "src_dir=src\"
set "obj_dir=obj\"
set "inc_dir=include\"
set "lib_dir=lib\"
set "log_dir=log\"
set "warn=/wd4244 /wd5105 /wd4127"
set "cdefines=/D _CRT_SECURE_NO_WARNINGS /D _WINSOCK_DEPRECATED_NO_WARNINGS /D _UNICODE /D UNICODE"
set "cflags=/nologo /std:c11 /utf-8 /W4 /WX- /diagnostics:column /TC /Zi /fp:fast"
set "link_conf=/INCREMENTAL:NO"
::
:: ------------
::
if "%1"=="Release" ( goto release )
if "%1"=="release" ( goto release )
if "%1"=="rel" ( goto release )
if "%1"=="Sanitize" ( goto sanitize )
if "%1"=="asan" ( goto sanitize )
if "%1"=="san" ( goto sanitize )
goto debug
:sanitize
set "flag=/D DEBUG /MTd /fsanitize=address /Od /Gs /MP"
goto build
:release
set "flag=/D NDEBUG /MT /Ox /GS- /MP /cgthreads8 /GL"
goto build
:debug
set "flag=/D DEBUG /MTd /Od /GS /MP"
goto build
:build
if exist %bin_dir% ( rmdir /s /q %bin_dir% )
if exist %obj_dir% ( rmdir /s /q %obj_dir% )
if exist %inc_dir% ( rmdir /s /q %inc_dir% )
if exist %lib_dir% ( rmdir /s /q %lib_dir% )
if exist %log_dir% ( rmdir /s /q %log_dir% )
if not exist %bin_dir% ( mkdir %bin_dir% )
if not exist %obj_dir% ( mkdir %obj_dir% )
if not exist %inc_dir% ( mkdir %inc_dir% )
if not exist %lib_dir% ( mkdir %lib_dir% )
if not exist %log_dir% ( mkdir %log_dir% )
%cc% %cflags% %warn% %flag% /c %src_dir%ungrateful.c /Fo%obj_dir%ungrateful.obj /Fd%obj_dir%ungrateful.pdb %cdefines%
%cc% %cflags% %warn% %flag% /I %src_dir% /c %src_dir%cynic.c /Fo%obj_dir%cynic.obj /Fd%obj_dir%cynic.pdb %cdefines%
%cc% %cflags% %warn% %flag% /I %src_dir% /c %src_dir%disgrace.c /Fo%obj_dir%disgrace.obj /Fd%obj_dir%disgrace.pdb %cdefines%
%ar% /nologo /OUT:lib\ungrateful.lib %obj_dir%ungrateful.obj
%ar% /nologo /OUT:lib\cynic.lib %obj_dir%cynic.obj
%ar% /nologo /OUT:lib\disgrace.lib %obj_dir%disgrace.obj
for %%f in ("%src_dir%*.h") do (
copy "%%f" "%inc_dir%%%~nxf" 1>nul
)
echo:
set "link_param=/link %link_conf% %lib_dir%ungrateful.lib"
for %%f in ("tests\un\*.c") do (
start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1
)
set "link_param=/link %link_conf% %lib_dir%ungrateful.lib %lib_dir%cynic.lib"
for %%f in ("tests\cyn\*.c") do (
start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1
)
set "link_param=/link %link_conf% %lib_dir%ungrateful.lib %lib_dir%cynic.lib %lib_dir%disgrace.lib"
for %%f in ("tests\d\*.c") do (
start "Compile %%f" /B %cc% %cflags% %warn% %flag% %cdefines% %%f /I%inc_dir% /Fo%obj_dir%%%~nf.obj /Fd%bin_dir%%%~nf.pdb /Fe%bin_dir%%%~nf.exe %link_param% > %log_dir%\log_%%~nxf.txt 2>&1
)
:wait
tasklist | find "%cc%.exe" > nul
if %errorlevel% == 0 (
timeout /t 0 > nul
goto wait
)
echo Logs:
for %%f in ("%log_dir%*.txt") do (
type %%f
)
echo:
for %%f in ("%bin_dir%*.exe") do (
%%f
if !errorlevel! == 0 (
echo [DONE] %%f
) else (
echo [FAIL] %%f
)
)
echo:
echo Done!
endlocal
|