-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.bat
More file actions
80 lines (68 loc) · 2.66 KB
/
build.bat
File metadata and controls
80 lines (68 loc) · 2.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
@echo off
setlocal
:: WinUnix - Build Script
:: Requires Visual Studio 2019 or 2022 with C++ workload
set "SCRIPT_DIR=%~dp0"
set "SRC_DIR=%SCRIPT_DIR%src"
set "OUT_DIR=%SCRIPT_DIR%bin"
:: Detect Visual Studio (2022 or 2019)
set "VCVARS="
if exist "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat"
) else if exist "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat"
) else if exist "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" (
set "VCVARS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat"
)
if not defined VCVARS (
echo [ERROR] Visual Studio 2019 or 2022 not found.
echo Please install "Desktop development with C++" workload.
exit /b 1
)
call "%VCVARS%" x64 >nul 2>&1
if errorlevel 1 (
echo [ERROR] Failed to initialize Visual Studio environment.
exit /b 1
)
if not exist "%OUT_DIR%" mkdir "%OUT_DIR%"
set CFLAGS=/nologo /O2 /W3 /EHsc /std:c++17 /MT
set LIBS_PROC=psapi.lib advapi32.lib
set LIBS_PDH=psapi.lib advapi32.lib pdh.lib
set LIBS_SHWAPI=shlwapi.lib
echo Building WinUnix tools...
echo.
set ERRORS=0
call :build uname ""
call :build free "%LIBS_PROC%"
call :build df ""
call :build du "%LIBS_SHWAPI%"
call :build ps "%LIBS_PROC%"
call :build pstree "%LIBS_PROC%"
call :build top "%LIBS_PDH%"
call :build htop "%LIBS_PDH%"
echo.
if %ERRORS%==0 (
echo [OK] All tools built successfully in: %OUT_DIR%
) else (
echo [WARN] %ERRORS% tool(s) failed to build.
exit /b 1
)
exit /b 0
:build
set TOOL=%~1
set TOOL_LIBS=%~2
echo Building %TOOL%...
cl %CFLAGS% "%SRC_DIR%\%TOOL%.cpp" /Fe:"%OUT_DIR%\%TOOL%.exe" %TOOL_LIBS% >"%OUT_DIR%\%TOOL%_build.log" 2>&1
if errorlevel 1 (
echo [FAIL] %TOOL% - see %OUT_DIR%\%TOOL%_build.log
set /a ERRORS+=1
) else (
del "%OUT_DIR%\%TOOL%_build.log" 2>nul
del "%OUT_DIR%\%TOOL%.obj" 2>nul
echo [OK] %TOOL%.exe
)
exit /b 0