From 26a07e06e799e46b7293dd35f6ed8357ff1a6294 Mon Sep 17 00:00:00 2001 From: Sak32009 Date: Sun, 18 Aug 2024 11:08:23 +0200 Subject: [PATCH] improved build_win_premake.bat and package_win.bat --- .github/workflows/release.yml | 14 +- build_win_premake.bat | 237 +++++++++++++++++----------------- build_win_premake_deps.bat | 3 + package_win.bat | 193 ++++++++++++++------------- package_win_debug.bat | 3 + package_win_release.bat | 3 + 6 files changed, 239 insertions(+), 214 deletions(-) create mode 100644 build_win_premake_deps.bat create mode 100644 package_win_debug.bat create mode 100644 package_win_release.bat diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4378a381..2541c2d7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: Prepare release on: push: - tags: + tags: - release-* workflow_dispatch: # allows manual trigger @@ -58,12 +58,12 @@ jobs: dir /s /b /a:-d build\win ### remove linker files - - name: Remove linker files - shell: cmd - working-directory: ${{ github.workspace }} - run: | - del /f /s /q build\win\*.exp,build\win\*.lib - exit /b 0 +### - name: Remove linker files +### shell: cmd +### working-directory: ${{ github.workspace }} +### run: | +### del /f /s /q build\win\*.exp,build\win\*.lib +### exit /b 0 ### package (release mode) - name: Package build (release) diff --git a/build_win_premake.bat b/build_win_premake.bat index 214f93fd..b79d8c0f 100644 --- a/build_win_premake.bat +++ b/build_win_premake.bat @@ -1,120 +1,117 @@ -@echo off -setlocal - -:: use 70% -set /a build_threads=2 -if defined NUMBER_OF_PROCESSORS ( - set /a build_threads=NUMBER_OF_PROCESSORS*70/100 -) -if %build_threads% lss 1 ( - set /a build_threads=1 -) - -set /a BUILD_DEPS=0 -:args_loop - if "%~1"=="" ( - goto :args_loop_end - ) else if "%~1"=="--deps" ( - set /a BUILD_DEPS=1 - ) else if "%~1"=="--help" ( - call :help_page - goto :end_script - ) else ( - 1>&2 echo "invalid arg %~1" - goto :end_script_with_err - ) -shift /1 -goto :args_loop -:args_loop_end - -set "premake_exe=third-party\common\win\premake\premake5.exe" -if not exist "%premake_exe%" ( - 1>&2 echo "preamke wasn't found" - goto :end_script_with_err -) - -:: build deps -if %BUILD_DEPS%==0 ( - goto :build_deps_end -) -set "CMAKE_GENERATOR=Visual Studio 17 2022" -call "%premake_exe%" --file="premake5-deps.lua" --all-ext --all-build --64-build --32-build --verbose --clean --os=windows vs2022 -if %errorlevel% neq 0 ( - goto :end_script_with_err -) -:build_deps_end - -:: VS WHERE to get MSBUILD -set "vswhere_exe=third-party\common\win\vswhere\vswhere.exe" -if not exist "%vswhere_exe%" ( - 1>&2 echo "vswhere wasn't found" - goto :end_script_with_err -) - -:: .sln file -set "sln_file=build\project\vs2022\win\gbe.sln" - -:: get msbuild path -set "my_vs_path=" -for /f "tokens=* delims=" %%A in ('"%vswhere_exe%" -prerelease -latest -nocolor -nologo -property installationPath 2^>nul') do ( - set "my_vs_path=%%~A\MSBuild\Current\Bin\MSBuild.exe" -) -if not exist "%my_vs_path%" ( - 1>&2 echo "MSBuild wasn't found" - goto :end_script_with_err -) - -call "%premake_exe%" --file="premake5.lua" --dosstub --winrsrc --winsign --genproto --os=windows vs2022 -if %errorlevel% neq 0 ( - goto :end_script_with_err -) -if not exist "%sln_file%" ( - 1>&2 echo "project solution file wasn't found" - goto :end_script_with_err -) - -:: -v:n make it so we can actually see what commands it runs -echo: & echo building debug x64 -call "%my_vs_path%" /nologo "%sln_file%" /p:Configuration=debug /p:Platform=x64 -v:n -m:%build_threads% -if %errorlevel% neq 0 ( - goto :end_script_with_err -) - -echo: & echo building debug x32 -call "%my_vs_path%" /nologo "%sln_file%" /p:Configuration=debug /p:Platform=Win32 -v:n -m:%build_threads% -if %errorlevel% neq 0 ( - goto :end_script_with_err -) - -echo: & echo building release x64 -call "%my_vs_path%" /nologo "%sln_file%" /p:Configuration=release /p:Platform=x64 -v:n -m:%build_threads% -if %errorlevel% neq 0 ( - goto :end_script_with_err -) - -echo: & echo building release x32 -call "%my_vs_path%" /nologo "%sln_file%" /p:Configuration=release /p:Platform=Win32 -v:n -m:%build_threads% -if %errorlevel% neq 0 ( - goto :end_script_with_err -) - - -:: if all ok -:end_script -endlocal -exit /b 0 - - -:: exit with error -:end_script_with_err -endlocal -exit /b 1 - - -:help_page -echo: -echo "%~nx0" [switches] -echo switches: -echo --deps: rebuild third-party dependencies -echo --help: show this page -exit /b 0 +@echo off +setlocal EnableDelayedExpansion +cd /d "%~dp0" + +set /a "MAX_THREADS=2" +if defined NUMBER_OF_PROCESSORS ( + :: use 70% + set /a "MAX_THREADS=%NUMBER_OF_PROCESSORS% * 70 / 100" + if %MAX_THREADS% lss 1 ( + set /a "MAX_THREADS=1" + ) +) + +set /a "BUILD_DEPS=0" + +:args_loop + if "%~1" equ "" ( + goto :args_loop_end + ) else if "%~1" equ "--deps" ( + set /a "BUILD_DEPS=1" + ) else if "%~1" equ "--help" ( + goto :help_page + ) else ( + 1>&2 echo: invalid arg %~1 + goto :end_script_with_err + ) + + shift /1 + goto :args_loop + +:args_loop_end + :: check premake + set "PREMAKE_EXE=third-party\common\win\premake\premake5.exe" + if not exist "%PREMAKE_EXE%" ( + 1>&2 echo: premake wasn't found + goto :end_script_with_err + ) + + :: build deps + if %BUILD_DEPS% equ 1 ( + set "CMAKE_GENERATOR=Visual Studio 17 2022" + call "%PREMAKE_EXE%" --file="premake5-deps.lua" --64-build --32-build --all-ext --all-build --j=2 --verbose --clean --os=windows vs2022 + if %errorlevel% neq 0 ( + goto :end_script_with_err + ) + goto :end_script + ) + + :: check vswhere + set "VSWHERE_EXE=third-party\common\win\vswhere\vswhere.exe" + if not exist "%VSWHERE_EXE%" ( + 1>&2 echo: vswhere wasn't found + goto :end_script_with_err + ) + + :: check msbuild + set "MSBUILD_EXE=" + for /f "tokens=* delims=" %%A in ('"%VSWHERE_EXE%" -prerelease -latest -nocolor -nologo -property installationPath 2^>nul') do ( + set "MSBUILD_EXE=%%~A\MSBuild\Current\Bin\MSBuild.exe" + ) + if not exist "%MSBUILD_EXE%" ( + 1>&2 echo: MSBuild wasn't found + goto :end_script_with_err + ) + + :: create .sln + call "%PREMAKE_EXE%" --file="premake5.lua" --genproto --dosstub --winrsrc --winsign --os=windows vs2022 + if %errorlevel% neq 0 ( + goto :end_script_with_err + ) + + :: check .sln + set "SLN_FILE=build\project\vs2022\win\gbe.sln" + if not exist "%SLN_FILE%" ( + 1>&2 echo: .sln file wasn't found + goto :end_script_with_err + ) + + :: build .sln + set "BUILD_TYPES=release debug" + set "BUILD_PLATFORMS=x64 Win32" + set "BUILD_TARGETS=api_regular api_experimental steamclient_experimental_stub steamclient_experimental steamclient_experimental_loader steamclient_experimental_extra lib_game_overlay_renderer tool_lobby_connect tool_generate_interfaces" + + for %%A in (%BUILD_TYPES%) do ( + set "BUILD_TYPE=%%A" + for %%B in (%BUILD_PLATFORMS%) do ( + set "BUILD_PLATFORM=%%B" + for %%C in (%BUILD_TARGETS%) do ( + set "BUILD_TARGET=%%C" + echo. & echo: building !BUILD_TARGET! !BUILD_TYPE! !BUILD_PLATFORM! + call "%MSBUILD_EXE%" /nologo -m:%MAX_THREADS% -v:n /p:Configuration=!BUILD_TYPE!,Platform=!BUILD_PLATFORM! /target:!BUILD_TARGET! "%SLN_FILE%" + if %errorlevel% neq 0 ( + goto :end_script_with_err + ) + ) + ) + ) + + goto :end_script + +:: exit without error +:end_script + endlocal + exit /b 0 + +:: exit with error +:end_script_with_err + endlocal + exit /b 1 + +:: show help page +:help_page + echo: "%~nx0" [switches] + echo: switches: + echo: --deps: rebuild third-party dependencies + echo: --help: show this page + goto :end_script diff --git a/build_win_premake_deps.bat b/build_win_premake_deps.bat new file mode 100644 index 00000000..fa9fec8d --- /dev/null +++ b/build_win_premake_deps.bat @@ -0,0 +1,3 @@ +@echo off + +call "build_win_premake.bat" --deps diff --git a/package_win.bat b/package_win.bat index 85d0b843..5e86da4b 100644 --- a/package_win.bat +++ b/package_win.bat @@ -1,87 +1,106 @@ -@echo off - -setlocal -pushd "%~dp0" - -set /a last_code=0 - -set "build_base_dir=build\win" -set "out_dir=build\package\win" - -set /a MEM_PERCENT=90 -set /a DICT_SIZE_MB=384 -set "packager=third-party\deps\win\7za\7za.exe" - -:: use 70% -set /a THREAD_COUNT=2 -if defined NUMBER_OF_PROCESSORS ( - set /a THREAD_COUNT=NUMBER_OF_PROCESSORS*70/100 -) -if %THREAD_COUNT% lss 2 ( - set /a THREAD_COUNT=2 -) - -if not exist "%packager%" ( - 1>&2 echo [X] packager app wasn't found - set /a last_code=1 - goto :script_end -) - -if "%~1"=="" ( - 1>&2 echo [X] missing build folder - set /a last_code=1 - goto :script_end -) - -set "target_src_dir=%build_base_dir%\%~1" -if not exist "%target_src_dir%" ( - 1>&2 echo [X] build folder wasn't found - set /a last_code=1 - goto :script_end -) - -:::::::::::::::::::::::::::::::::::::::::: -echo // copying readmes + example files -xcopy /y /s /e /r "post_build\steam_settings.EXAMPLE\" "%target_src_dir%\steam_settings.EXAMPLE\" -copy /y "post_build\README.release.md" "%target_src_dir%\" -copy /y "CHANGELOG.md" "%target_src_dir%\" -copy /y "CREDITS.md" "%target_src_dir%\" -if "%~2"=="1" ( - copy /y "post_build\README.debug.md" "%target_src_dir%\" -) -if exist "%target_src_dir%\experimental\" ( - copy /y "post_build\README.experimental.md" "%target_src_dir%\experimental\" -) -if exist "%target_src_dir%\steamclient_experimental\" ( - xcopy /y /s /e /r "post_build\win\ColdClientLoader.EXAMPLE\" "%target_src_dir%\steamclient_experimental\dll_injection.EXAMPLE\" - copy /y "post_build\README.experimental_steamclient.md" "%target_src_dir%\steamclient_experimental\" - copy /y "tools\steamclient_loader\win\ColdClientLoader.ini" "%target_src_dir%\steamclient_experimental\" -) -if exist "%target_src_dir%\tools\generate_interfaces\" ( - copy /y "post_build\README.generate_interfaces.md" "%target_src_dir%\tools\generate_interfaces\" -) -if exist "%target_src_dir%\tools\lobby_connect\" ( - copy /y "post_build\README.lobby_connect.md" "%target_src_dir%\tools\lobby_connect\" -) -:::::::::::::::::::::::::::::::::::::::::: - -set "archive_dir=%out_dir%\%~1" -if exist "%archive_dir%\" ( - rmdir /s /q "%archive_dir%" -) -set "archive_file=" -for %%A in ("%archive_dir%") do ( - set "archive_file=%%~dpAemu-win-%%~nxA.7z" -) - -for %%A in ("%archive_dir%") do ( - mkdir "%%~dpA" -) -"%packager%" a "%archive_file%" ".\%target_src_dir%" -t7z -slp -ssw -mx -myx -mmemuse=p%MEM_PERCENT% -ms=on -mqs=off -mf=on -mhc+ -mhe- -m0=LZMA2:d=%DICT_SIZE_MB%m -mmt=%THREAD_COUNT% -mmtf+ -mtm- -mtc- -mta- -mtr+ - - -:script_end -popd -endlocal & ( - exit /b %last_code% -) +@echo off +setlocal EnableDelayedExpansion +cd /d "%~dp0" + +set /a "MAX_THREADS=2" +if defined NUMBER_OF_PROCESSORS ( + :: use 70% + set /a "MAX_THREADS=%NUMBER_OF_PROCESSORS% * 70 / 100" + if %MAX_THREADS% lss 1 ( + set /a "MAX_THREADS=1" + ) +) + +set "BUILD_DIR=build\win" +set "OUT_DIR=build\package\win" + +if "%~1" equ "" ( + 1>&2 echo: missing build target folder arg + goto :end_script_with_err +) + +set "TARGET_DIR=%BUILD_DIR%\%~1" +if not exist "%TARGET_DIR%\" ( + 1>&2 echo: build target folder wasn't found + goto :end_script_with_err +) + +set /a "BUILD_DEBUG=0" +if "%~2" equ "1" ( + set /a "BUILD_DEBUG=1" +) + +set /a "PKG_EXE_MEM_PERCENT=90" +set /a "PKG_EXE_DICT_SIZE_MB=384" +set "PKG_EXE=third-party\deps\win\7za\7za.exe" +if not exist "%PKG_EXE%" ( + 1>&2 echo: packager wasn't found + goto :end_script_with_err +) + +:::::::::::::::::::::::::::::::::::::::::: +echo: // copying readmes + example files + +xcopy /y /s /e /r "post_build\steam_settings.EXAMPLE\" "%TARGET_DIR%\steam_settings.EXAMPLE\" + +copy /y "post_build\README.release.md" "%TARGET_DIR%\" +copy /y "CHANGELOG.md" "%TARGET_DIR%\" +copy /y "CREDITS.md" "%TARGET_DIR%\" + +if %BUILD_DEBUG% equ 1 ( + copy /y "post_build\README.debug.md" "%TARGET_DIR%\" +) + +if exist "%TARGET_DIR%\experimental\" ( + copy /y "post_build\README.experimental.md" "%TARGET_DIR%\experimental\" +) + +if exist "%TARGET_DIR%\steamclient_experimental\" ( + xcopy /y /s /e /r "post_build\win\ColdClientLoader.EXAMPLE\" "%TARGET_DIR%\steamclient_experimental\dll_injection.EXAMPLE\" + copy /y "post_build\README.experimental_steamclient.md" "%TARGET_DIR%\steamclient_experimental\" + copy /y "tools\steamclient_loader\win\ColdClientLoader.ini" "%TARGET_DIR%\steamclient_experimental\" +) + +if exist "%TARGET_DIR%\tools\generate_interfaces\" ( + copy /y "post_build\README.generate_interfaces.md" "%TARGET_DIR%\tools\generate_interfaces\" +) + +if exist "%TARGET_DIR%\tools\lobby_connect\" ( + copy /y "post_build\README.lobby_connect.md" "%TARGET_DIR%\tools\lobby_connect\" +) +:::::::::::::::::::::::::::::::::::::::::: + +set "ACHIVE_DIR=%OUT_DIR%\%~1" +if exist "%ACHIVE_DIR%\" ( + rmdir /s /q "%ACHIVE_DIR%" +) + +for %%A in ("%ACHIVE_DIR%") do ( + md "%%~dpA" +) + +set "ACHIVE_FILE=" +for %%A in ("%ACHIVE_DIR%") do ( + set "ACHIVE_FILE=%%~dpAemu-win-%%~nxA.7z" +) + +if exist "%ACHIVE_FILE%" ( + del /f /s /q "%ACHIVE_FILE%" +) + +call "%PKG_EXE%" a "%ACHIVE_FILE%" ".\%TARGET_DIR%" -t7z -xr^^!*.lib -xr^^!*.exp -slp -ssw -mx -myx -mmemuse=p%PKG_EXE_MEM_PERCENT% -ms=on -mqs=off -mf=on -mhc+ -mhe- -m0=LZMA2:d=%PKG_EXE_DICT_SIZE_MB%m -mmt=%MAX_THREADS% -mmtf+ -mtm- -mtc- -mta- -mtr+ +if %errorlevel% neq 0 ( + goto :end_script_with_err +) + +goto :end_script + +:: exit without error +:end_script + endlocal + exit /b 0 + +:: exit with error +:end_script_with_err + endlocal + exit /b 1 diff --git a/package_win_debug.bat b/package_win_debug.bat new file mode 100644 index 00000000..ae172a8d --- /dev/null +++ b/package_win_debug.bat @@ -0,0 +1,3 @@ +@echo off + +call "package_win.bat" vs2022/debug 1 diff --git a/package_win_release.bat b/package_win_release.bat new file mode 100644 index 00000000..eb49220b --- /dev/null +++ b/package_win_release.bat @@ -0,0 +1,3 @@ +@echo off + +call "package_win.bat" vs2022/release