forked from KBEngineLab/KBEngine-Nex
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall_windows.bat
More file actions
367 lines (303 loc) · 10.5 KB
/
install_windows.bat
File metadata and controls
367 lines (303 loc) · 10.5 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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
REM =========================================
REM Git
REM =========================================
git --version >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
echo [Error] Git is not installed or not in PATH.
echo Please install Git from https://git-scm.com/downloads
exit /b 1
) else (
echo [Success] Git is installed.
)
REM =========================================
REM Check GitHub network accessibility (Git clone test)
REM =========================================
echo [Checking] Trying to access GitHub ...
set "TMP_TEST_DIR=%TEMP%\gh_test"
if exist "%TMP_TEST_DIR%" rd /s /q "%TMP_TEST_DIR%"
mkdir "%TMP_TEST_DIR%"
git ls-remote https://github.com/microsoft/vcpkg.git >nul 2>nul
if errorlevel 1 (
echo [Error] Cannot access GitHub repository!
echo There may be a network issue or proxy required. Please resolve network issues before running the script.
echo.
echo There is also a domestic Gitee mirror. You can try running gitee\install_windows.bat.
rd /s /q "%TMP_TEST_DIR%" >nul 2>nul
if not defined CI (
pause
)
exit /b 1
)
rd /s /q "%TMP_TEST_DIR%" >nul 2>nul
echo [Success] GitHub repository is accessible
REM =========================================
REM Default parameters
REM =========================================
set "CONFIG=Debug"
set "PLATFORM=x64"
set "PROJECT_ROOT=%~dp0"
set "INIT_BUILD_PROJ=%PROJECT_ROOT%kbe\src\server\init\init.vcxproj"
set "SOLUTION_FILE=%PROJECT_ROOT%kbe\src\kbengine nex.sln"
set "GUICONSOLE_SOLUTION_FILE=%PROJECT_ROOT%kbe\src\guiconsole.sln"
set "LOG_FILE=%PROJECT_ROOT%build.log"
set "VCPKG_PATH="
REM =========================================
REM Parse parameters
REM =========================================
if "%~1"=="" (
set "CONFIG=Debug"
) else if /i "%~1"=="Debug" (
set "CONFIG=Debug"
) else if /i "%~1"=="Release" (
set "CONFIG=Release"
) else if /i "%~1"=="help" (
goto showHelp
) else (
echo [Error] Invalid CONFIG parameter: %~1
exit /b 1
)
if not "%~2"=="" (
set "VCPKG_PATH=%~2"
if not exist "!VCPKG_PATH!\vcpkg.exe" (
echo [Error] The specified vcpkg path is invalid: !VCPKG_PATH!
exit /b 1
)
)
:showHelp
echo =========================================
echo Usage:
echo build.bat [CONFIG] [VCPKGPATH]
echo.
echo Available parameters:
echo CONFIG=Debug^|Release Specify build configuration, default is Debug
echo VCPKGPATH=Path Specify vcpkg installation path
echo GUICONSOLE Install GUICONSOLE
echo =========================================
echo.
if "%~1"=="help" exit /b 0
REM =========================================
REM 1. Check vcpkg (modified)
REM =========================================
echo.
echo [Checking] Searching for vcpkg...
set "VCPKG_EXE="
REM 1) Use parameter if provided
if defined VCPKG_PATH (
set "VCPKG_EXE=!VCPKG_PATH!\vcpkg.exe"
if not exist "!VCPKG_EXE!" (
echo [Error] The specified vcpkg path is invalid: !VCPKG_PATH!
exit /b 1
)
) else (
REM 2) Search default installation directory
if exist "%USERPROFILE%\AppData\Local\kbe-vcpkg\vcpkg.exe" (
set "VCPKG_EXE=%USERPROFILE%\AppData\Local\kbe-vcpkg\vcpkg.exe"
set "VCPKG_PATH=%USERPROFILE%\AppData\Local\kbe-vcpkg"
goto :found_vcpkg
)
REM 3) Not found, prompt and install to default directory
echo.
echo [Notice] kbe-vcpkg not detected
echo [Downloading] Start downloading and installing vcpkg...
set "VCPKG_PATH=%USERPROFILE%\AppData\Local\kbe-vcpkg"
echo VCPKG_PATH=!VCPKG_PATH!
git clone https://github.com/microsoft/vcpkg "!VCPKG_PATH!"
if errorlevel 1 (
echo [Error] vcpkg download failed
exit /b 1
)
set "VCPKG_EXE=!VCPKG_PATH!\vcpkg.exe"
call "!VCPKG_PATH!\bootstrap-vcpkg.bat"
)
:found_vcpkg
echo [Found] vcpkg path: %VCPKG_EXE%
echo [Executing] vcpkg integrate install ...
"%VCPKG_EXE%" integrate install
REM =========================================
REM 2. Find Visual Studio installation path and all MSVC toolsets
REM =========================================
echo.
echo [Checking] Searching for Visual Studio installation path...
set "VSWHERE_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
if not exist "%VSWHERE_PATH%" (
echo [Error] vswhere.exe not found. Please ensure Visual Studio or Build Tools is installed.
if not defined CI (
pause
)
exit /b 1
)
set "VS_INSTALL_PATH="
for /f "usebackq tokens=*" %%i in (`"%VSWHERE_PATH%" -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath`) do (
set "VS_INSTALL_PATH=%%i"
)
if not defined VS_INSTALL_PATH (
echo [Error] No Visual Studio with C++ toolset found
if not defined CI (
pause
)
exit /b 1
)
echo [Found] Visual Studio path: %VS_INSTALL_PATH%
set "MSVC_ROOT=%VS_INSTALL_PATH%\VC\Tools\MSVC"
for /f "delims=" %%i in ('"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -property catalog_productLineVersion') do set VS_MAJOR=%%i
set "PLATFORM_TOOLSET="
if "%VS_MAJOR%"=="2015" set "PLATFORM_TOOLSET=-p:PlatformToolset=v140"
if "%VS_MAJOR%"=="2017" set "PLATFORM_TOOLSET=-p:PlatformToolset=v141"
if "%VS_MAJOR%"=="2019" set "PLATFORM_TOOLSET=-p:PlatformToolset=v142"
if "%VS_MAJOR%"=="2022" set "PLATFORM_TOOLSET=-p:PlatformToolset=v143"
echo VS_MAJOR: %VS_MAJOR%
echo PLATFORM_TOOLSET: %PLATFORM_TOOLSET%
REM List all MSVC toolset versions
set "MSVC_COUNT=0"
set "VCVARS_VAR="
set "MSVC_VER_VAR="
for /d %%v in ("%MSVC_ROOT%\*") do (
set /a MSVC_COUNT+=1
set "MSVC_VER_!MSVC_COUNT!=%%~nxv"
)
echo.
if %MSVC_COUNT%==0 (
echo [Warning] No MSVC toolset found, using default
) else if %MSVC_COUNT%==1 (
set "MSVC_VER=!MSVC_VER_1!"
echo [Selected] Using MSVC toolset version: !MSVC_VER!
set "MSVC_FULL_PATH=%MSVC_ROOT%\!MSVC_VER!"
set "VCVARS_VAR=-vcvars_ver=!MSVC_VER!"
set "MSVC_VER_VAR=-p:VCToolsVersion=!MSVC_VER!"
) else (
echo Found the following MSVC toolset versions:
for /l %%i in (1,1,%MSVC_COUNT%) do (
call echo %%i:!MSVC_VER_%%i!
)
set "LATEST_VER=0.0.0"
for /l %%i in (1,1,%MSVC_COUNT%) do (
set "CUR=!MSVC_VER_%%i!"
for /f "tokens=1-3 delims=." %%a in ("!CUR!") do (
set /a CUR_MAJOR=%%a
set /a CUR_MINOR=%%b
set /a CUR_PATCH=%%c
)
for /f "tokens=1-3 delims=." %%a in ("!LATEST_VER!") do (
set /a L_MAJOR=%%a
set /a L_MINOR=%%b
set /a L_PATCH=%%c
)
if !CUR_MAJOR! gtr !L_MAJOR! (
set "LATEST_VER=!CUR!"
) else if !CUR_MAJOR! equ !L_MAJOR! (
if !CUR_MINOR! gtr !L_MINOR! (
set "LATEST_VER=!CUR!"
) else if !CUR_MINOR! equ !L_MINOR! (
if !CUR_PATCH! gtr !L_PATCH! (
set "LATEST_VER=!CUR!"
)
)
)
)
echo.
echo Latest MSVC version is !LATEST_VER!
@REM echo.
@REM echo +------------------------------------------------------------------------------------------------------+
@REM echo ^| [Note] Choose the version compatible with vcpkg, usually the latest
@REM echo ^| [Note] If unsure, check KBEMain build logs for the compiler path, e.g.:
@REM echo ^| Compiler found: E:/vs/2022/Community/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe
@REM echo ^| [Note] The version used by vcpkg is 14.44.35207
@REM echo ^| [Note] Or remove extra toolsets and keep only one
@REM echo +------------------------------------------------------------------------------------------------------+
@REM echo.
@REM set /p "CHOICE=Please select the MSVC toolset number (1-%MSVC_COUNT%): "
@REM if "!CHOICE!"=="" set "CHOICE=1"
@REM if !CHOICE! GTR !MSVC_COUNT! (
@REM echo [Error] Invalid input!
@REM exit /b 1
@REM )
@REM call set "MSVC_VER=%%MSVC_VER_!CHOICE!%%"
set "MSVC_VER=!LATEST_VER!"
echo [Selected] Using MSVC toolset version: !MSVC_VER!
set "MSVC_FULL_PATH=%MSVC_ROOT%\!MSVC_VER!"
set "VCVARS_VAR=-vcvars_ver=!MSVC_VER!"
set "MSVC_VER_VAR=-p:VCToolsVersion=!MSVC_VER!"
)
echo %MSVC_FULL_PATH%
echo %VCVARS_VAR%
echo %MSVC_VER_VAR%
:: Extract first two version segments, e.g., 14.44
@REM for /f "tokens=1,2 delims=." %%a in ("%MSVC_VER%") do (
@REM set "VC_VER=%%a.%%b"
@REM )
echo VC_VER: %MSVC_VER%
set "VCVARSALL_BAT=%VS_INSTALL_PATH%\VC\Auxiliary\Build\vcvarsall.bat"
call "%VCVARSALL_BAT%" x64 -vcvars_ver=%MSVC_VER%
if errorlevel 1 (
echo [Error] Cannot load Visual Studio build environment
if not defined CI (
pause
)
exit /b 1
)
echo cl.exe path: %PATH%
cl
REM =========================================
REM 3. Build projects
REM =========================================
echo.
echo KBEngine-Nex Build Script
echo Project path: %PROJECT_ROOT%
echo Build configuration: %CONFIG% ^| Platform: %PLATFORM%
echo Log file: %LOG_FILE%
echo.
echo [Step 1] Building KBEMain.vcxproj ...
msbuild "%INIT_BUILD_PROJ%" /p:Configuration=%CONFIG% %MSVC_VER_VAR% %PLATFORM_TOOLSET% /p:Platform=%PLATFORM% /m ^
/fileLogger /fileLoggerParameters:LogFile=%LOG_FILE%;Append;Encoding=UTF-8 ^
/consoleloggerparameters:DisableConsoleColor
if errorlevel 1 (
echo [Error] KBEMain.vcxproj build failed. Check %LOG_FILE%
if not defined CI (
pause
)
exit /b 1
)
if "%~3"=="GUICONSOLE" (
echo [Installing] GUICONSOLE...
goto GUICONSOLE
)
echo.
echo [Step 2] Building kbengine nex.sln ...
msbuild "%SOLUTION_FILE%" /p:Configuration=%CONFIG% %MSVC_VER_VAR% %PLATFORM_TOOLSET% /p:Platform=Win64 /m ^
/fileLogger /fileLoggerParameters:LogFile=%LOG_FILE%;Append;Encoding=UTF-8 ^
/consoleloggerparameters:DisableConsoleColor
if errorlevel 1 (
echo [Error] kbengine nex.sln build failed. Check %LOG_FILE%
if not defined CI (
pause
)
exit /b 1
)
echo.
echo [Success] All builds completed!
if not defined CI (
pause
)
exit /b 0
:GUICONSOLE
echo.
echo [Step 2] Installing GUICONSOLE
msbuild "%GUICONSOLE_SOLUTION_FILE%" /p:Configuration=%CONFIG% %MSVC_VER_VAR% %PLATFORM_TOOLSET% /p:Platform=Win64 /m ^
/fileLogger /fileLoggerParameters:LogFile=%LOG_FILE%;Append;Encoding=UTF-8 ^
/consoleloggerparameters:DisableConsoleColor
if errorlevel 1 (
echo [Error] guiconsole.sln build failed. Check %LOG_FILE%
if not defined CI (
pause
)
exit /b 1
)
echo.
echo [Success] All builds completed!
if not defined CI (
pause
)
exit /b 0