From 86359ea8a9e1e8be65261477c783151d01d8c81e Mon Sep 17 00:00:00 2001 From: otavepto <153766569+otavepto@users.noreply.github.com> Date: Sun, 2 Jun 2024 08:32:04 +0300 Subject: [PATCH] update these scripts + add support to build deps via `--deps` + simple help page via `--help` --- README.md | 4 +- build_linux_premake.sh | 76 +++++++++++++++++---- build_win_premake.bat | 146 ++++++++++++++++++++++++++++++----------- 3 files changed, 174 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 281a98bb..088d91a0 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,7 @@ Open CMD in the repo folder, then run the following This will build a release version of the emu in the folder `build\win\\release` +An example script `build_win_premake.bat` is available, check it out
@@ -238,7 +239,8 @@ To see all possible build targets make help ``` -This will build a release version of the emu in the folder `build/linux//release` +This will build a release version of the emu in the folder `build/linux//release` +An example script `build_linux_premake.sh` is available, check it out --- diff --git a/build_linux_premake.sh b/build_linux_premake.sh index 6a706f58..9cd53e49 100644 --- a/build_linux_premake.sh +++ b/build_linux_premake.sh @@ -1,19 +1,71 @@ #!/usr/bin/env bash -chmod +777 third-party/common/win/premake/premake5 -./third-party/common/win/premake/premake5 --os=linux genproto +function help_page () { + echo "./$(basename "$0") [switches]" + echo "switches:" + echo " --deps: rebuild third-party dependencies" + echo " --help: show this page" +} -# target other than clang? -./third-party/common/win/premake/premake5 --os=linux --cc=clang gmake2 +# use 70% +build_threads="$(( $(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 0) * 70 / 100 ))" +[[ $build_threads -lt 2 ]] && build_threads=2 + +BUILD_DEPS=0 +for (( i=1; i<=$#; ++i )); do + arg="${!i}" + if [[ "$arg" = "--deps" ]]; then + BUILD_DEPS=1 + elif [[ "$arg" = "--help" ]]; then + help_page + exit 0 + else + echo "invalid arg $arg" 1>&2 + exit 1 + fi +done + +premake_exe=./"third-party/common/linux/premake/premake5" +if [[ ! -f "$premake_exe" ]]; then + echo "preamke wasn't found" 1>&2 + exit 1 +fi +chmod 777 "$premake_exe" + +# build deps +if [[ $BUILD_DEPS = 1 ]]; then + export CMAKE_GENERATOR="Unix Makefiles" + "$premake_exe" --file="premake5-deps.lua" --all-ext --all-build --64-build --32-build --verbose --clean --os=linux gmake2 || { + exit 1; + } +fi + +"$premake_exe" --genproto --os=linux gmake2 || { + exit 1; +} + +pushd ./"build/project/gmake2/linux" -# going into build dir -cd build/project/gmake2/linux # you can select individual or all -# make config=debug_x32 -make config=debug_x32 -make config=debug_x64 -make config=release_x32 -make config=release_x64 +echo; echo building debug x64 +make -j $build_threads config=debug_x64 || { + exit 1; +} -cd .. \ No newline at end of file +echo; echo building debug x32 +make -j $build_threads config=debug_x32 || { + exit 1; +} + +echo; echo building release x64 +make -j $build_threads config=release_x64 || { + exit 1; +} + +echo; echo building release x32 +make -j $build_threads config=release_x32 || { + exit 1; +} + +popd diff --git a/build_win_premake.bat b/build_win_premake.bat index 2447a38e..8f5623d2 100644 --- a/build_win_premake.bat +++ b/build_win_premake.bat @@ -1,52 +1,120 @@ @echo off -call "third-party\common\win\premake\premake5.exe" --os=windows --file="premake5.lua" genproto -call "third-party\common\win\premake\premake5.exe" --os=windows --file="premake5.lua" vs2022 +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%" ( - echo "vswhere.exe wasn't found" + 1>&2 echo "vswhere wasn't found" goto :end_script_with_err ) -set "my_vs_path=%vs_static_path%" -if "%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" - ) + +:: .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" ) -goto :builder +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 /MP%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 /MP%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 /MP%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 /MP%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 -popd -endlocal & ( - exit /b 1 -) +endlocal +exit /b 1 -:builder - -:: -v:n make it so we can actually see what commands it runs -call %my_vs_path% build\project\vs2022\win\GBE.sln /p:Configuration=debug /p:Platform=x64 -v:n -set /a _exit=%errorlevel% -if %_exit% equ 1 ( - goto :end_script_with_err -) - -call %my_vs_path% build\project\vs2022\win\GBE.sln /p:Configuration=debug /p:Platform=Win32 -v:n -set /a _exit=%errorlevel% -if %_exit% equ 1 ( - goto :end_script_with_err -) - -call %my_vs_path% build\project\vs2022\win\GBE.sln /p:Configuration=release /p:Platform=x64 -v:n -set /a _exit=%errorlevel% -if %_exit% equ 1 ( - goto :end_script_with_err -) - -call %my_vs_path% build\project\vs2022\win\GBE.sln /p:Configuration=release /p:Platform=Win32 -v:n -set /a _exit=%errorlevel% -if %_exit% equ 1 ( - goto :end_script_with_err -) \ No newline at end of file +:help_page +echo: +echo "%~nx0" [switches] +echo switches: +echo --deps: rebuild third-party dependencies +echo --help: show this page +exit /b 0