From 0143fbb8aa893b38024b6aefd69dac32c6418050 Mon Sep 17 00:00:00 2001 From: AdvDebug <90452585+AdvDebug@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:31:58 +0300 Subject: [PATCH] Fix build.bat and support multiple compilers --- Brovan.Graphics/brovvulk-icd/build.bat | 102 +++++++++++++++++++------ 1 file changed, 80 insertions(+), 22 deletions(-) diff --git a/Brovan.Graphics/brovvulk-icd/build.bat b/Brovan.Graphics/brovvulk-icd/build.bat index 5841c0b..a21cb05 100644 --- a/Brovan.Graphics/brovvulk-icd/build.bat +++ b/Brovan.Graphics/brovvulk-icd/build.bat @@ -4,6 +4,8 @@ setlocal EnableExtensions EnableDelayedExpansion set "HERE=%~dp0" set "REPO=%GITHUB_WORKSPACE%" +if defined REPO if not exist "%REPO%" set "REPO=" + if not defined REPO ( for /f "delims=" %%i in ('git -C "%HERE%" rev-parse --show-toplevel 2^>nul') do set "REPO=%%i" ) @@ -22,40 +24,95 @@ if not exist "%HERE%obj\generated\exports.def" ( exit /b 1 ) -if not exist "%HERE%bin" mkdir "%HERE%bin" -if not exist "%HERE%obj\build" mkdir "%HERE%obj\build" +if not exist "%HERE%bin" md "%HERE%bin" || exit /b 1 +if not exist "%HERE%obj\build" md "%HERE%obj\build" || exit /b 1 + +set "COMPILER=" +set "MODE=" where cl >nul 2>&1 -if errorlevel 1 call :init_msvc -where cl >nul 2>&1 -if errorlevel 1 ( - echo error: cl.exe not found. Run this from a Visual Studio developer environment on GitHub Actions Windows runners. 1>&2 - exit /b 1 +if not errorlevel 1 ( + for /f "delims=" %%C in ('where cl 2^>nul') do ( + set "COMPILER=%%~fC" + set "MODE=msvc" + goto :have_compiler + ) +) + +where clang-cl >nul 2>&1 +if not errorlevel 1 ( + if not defined VSCMD_VER call :init_msvc + if not errorlevel 1 ( + for /f "delims=" %%C in ('where clang-cl 2^>nul') do ( + set "COMPILER=%%~fC" + set "MODE=msvc" + goto :have_compiler + ) + ) +) + +for %%T in (gcc clang cc) do ( + if not defined COMPILER ( + for /f "delims=" %%C in ('where %%T 2^>nul') do ( + set "COMPILER=%%~fC" + set "MODE=gnu" + goto :have_compiler + ) + ) +) + +call :init_msvc +if not errorlevel 1 ( + where cl >nul 2>&1 + if not errorlevel 1 ( + for /f "delims=" %%C in ('where cl 2^>nul') do ( + set "COMPILER=%%~fC" + set "MODE=msvc" + goto :have_compiler + ) + ) + + where clang-cl >nul 2>&1 + if not errorlevel 1 ( + for /f "delims=" %%C in ('where clang-cl 2^>nul') do ( + set "COMPILER=%%~fC" + set "MODE=msvc" + goto :have_compiler + ) + ) +) + +echo error: no supported compiler found. Install MSVC, clang-cl, gcc, or clang. 1>&2 +exit /b 1 + +:have_compiler +pushd "%HERE%" || exit /b 1 + +if /i "%MODE%"=="msvc" ( + "%COMPILER%" /nologo /O2 /MT /LD vulkan_shim.c /I. /I"..\vulkan-headers" /Fo"obj\build\" /Fe"bin\vulkan-1.dll" /link /DEF:"obj\generated\exports.def" /IMPLIB:"bin\vulkan-1.lib" kernel32.lib +) else ( + "%COMPILER%" -O2 -c "vulkan_shim.c" -I. -I"..\vulkan-headers" -o "obj\build\vulkan_shim.o" + if not errorlevel 1 ( + "%COMPILER%" -shared -o "bin\vulkan-1.dll" "obj\build\vulkan_shim.o" "obj\generated\exports.def" -Wl,--out-implib,"bin\vulkan-1.lib" + ) ) -pushd "%HERE%" -cl /nologo /O2 /MT /LD vulkan_shim.c /I. /I..\vulkan-headers /Foobj\build\ /Febin\vulkan-1.dll /link /DEF:obj\generated\exports.def /IMPLIB:bin\vulkan-1.lib kernel32.lib if errorlevel 1 ( popd exit /b 1 ) + popd echo Deploying vulkan-1.dll: -call :deploy "%REPO%\VirtualFS" -if exist "%REPO%\Brovan\bin" ( - for /r "%REPO%\Brovan\bin" %%E in (Brovan.exe) do call :deploy "%%~dpE\VirtualFS" -) - -if exist "%REPO%\Brovan.Graphics" ( - for /r "%REPO%\Brovan.Graphics" %%E in (Brovan.exe) do call :deploy "%%~dpE\VirtualFS" -) +for /f "delims=" %%E in ('dir /s /b /a-d "%REPO%\Brovan\bin\Brovan.exe" 2^>nul') do call :deploy "%%~dpEVirtualFS" exit /b 0 :init_msvc set "VSDEVCMD=" + for %%P in ( "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\Professional\Common7\Tools\VsDevCmd.bat" @@ -66,14 +123,14 @@ for %%P in ( "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat" ) do ( - if exist %%~P ( + if exist "%%~P" ( set "VSDEVCMD=%%~P" goto :have_vsdevcmd ) ) -for /f "usebackq delims=" %%P in (`where vswhere.exe 2^>nul`) do ( - for /f "usebackq delims=" %%Q in (`"%%P" -latest -products * -requires Microsoft.Component.MSBuild -find Common7\Tools\VsDevCmd.bat 2^>nul`) do ( +for /f "delims=" %%P in ('where vswhere.exe 2^>nul') do ( + for /f "delims=" %%Q in ('"%%P" -latest -products * -requires Microsoft.Component.MSBuild -find Common7\Tools\VsDevCmd.bat 2^>nul') do ( if exist "%%Q" ( set "VSDEVCMD=%%Q" goto :have_vsdevcmd @@ -85,11 +142,12 @@ exit /b 1 :have_vsdevcmd call "%VSDEVCMD%" -arch=amd64 -host_arch=amd64 >nul -exit /b 0 +exit /b %errorlevel% :deploy set "VFS=%~1\C\Windows\System32" -if not exist "%VFS%" mkdir "%VFS%" +if not exist "%VFS%" md "%VFS%" || exit /b 1 copy /Y "%HERE%bin\vulkan-1.dll" "%VFS%\vulkan-1.dll" >nul +if errorlevel 1 exit /b 1 echo deployed -^> %VFS%\vulkan-1.dll exit /b 0 \ No newline at end of file