2828partial class Build {
2929 AbsolutePath Vkd3dPath => RootDirectory / "build" / "submodules" / "vkd3d" ;
3030 AbsolutePath SPIRVToolsPath => RootDirectory / "build" / "submodules" / "SPIRV-Tools" ;
31+ AbsolutePath VulkanHeadersPath => RootDirectory / "build" / "submodules" / "Vulkan-Headers" ;
3132
3233 Target Vkd3d => CommonTarget
3334 (
@@ -37,64 +38,78 @@ partial class Build {
3738 (
3839 ( ) =>
3940 {
40- if ( ! RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
41+ if ( ! RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
4142 {
4243 throw new PlatformNotSupportedException ( "This task only runs on Linux!" ) ;
4344 }
4445
45- var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Vkd3d.Native" / "runtimes" ;
46-
47- var vkd3dBuild = SPIRVToolsPath / "build" ;
48- EnsureCleanDirectory ( vkd3dBuild ) ;
46+ InheritedShell ( $ "./git-sync-deps", SPIRVToolsPath / "utils" ) . AssertZeroExitCode ( ) ;
4947
50- { //SPIRV-Tools
51- //Sync the external deps
52- InheritedShell ( $ "./git-sync-deps", SPIRVToolsPath / "utils" ) . AssertZeroExitCode ( ) ;
48+ // Get rid of the Vulkan library check since we will not be needing it.
49+ File . WriteAllText (
50+ Vkd3dPath / "configure.ac" ,
51+ File . ReadAllText ( Vkd3dPath / "configure.ac" )
52+ . Replace ( "[VKD3D_CHECK_VULKAN]" , "[]" ) ) ;
5353
54- //Make the build scripts, with shared libs enabled, and tests disabled
55- InheritedShell ( $ "cmake .. -DBUILD_SHARED_LIBS=1 -DSPIRV_SKIP_TESTS=ON", vkd3dBuild ) . AssertZeroExitCode ( ) ;
54+ InheritedShell ( $ "./autogen.sh", Vkd3dPath ) . AssertZeroExitCode ( ) ;
5655
57- //Compile SPIRV-Tools
58- InheritedShell ( $ "cmake --build . --config Release { JobsArg } ", vkd3dBuild ) . AssertZeroExitCode ( ) ;
59-
60- //Run `strip -g` on the shared library file to remove debug info and shrink it from ~30mb down to only ~5.5mb
61- InheritedShell ( $ "strip -g libSPIRV-Tools-shared.so", vkd3dBuild / "source" ) . AssertZeroExitCode ( ) ;
56+ var spirvToolsBuild = SPIRVToolsPath / "build" ;
57+ var vkd3dBuild = Vkd3dPath / "build" ;
58+ var vkd3dShaderCompiler = RootDirectory / "src" / "Microsoft" / "Vkd3dCompiler" ;
59+ var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Vkd3d.Native" / "runtimes" ;
6260
63- //Copy the resulting SPIRV-Tools shared library to the runtimes folder
64- CopyFile ( vkd3dBuild / "source" / "libSPIRV-Tools-shared.so" , runtimes / "linux-x64" / "native" / "libSPIRV-Tools-shared.so" , FileExistsPolicy . Overwrite ) ;
61+ foreach ( var ( triple , rid ) in new [ ]
62+ {
63+ ( "x86_64-linux-gnu" , "linux-x64" ) ,
64+ ( "arm-linux-gnueabihf" , "linux-arm" ) ,
65+ ( "aarch64-linux-gnu" , "linux-arm64" ) ,
66+ } )
67+ {
68+ // SPIRV-Tools
69+ {
70+ EnsureCleanDirectory ( spirvToolsBuild ) ;
71+
72+ InheritedShell ( $ "cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DSPIRV_SKIP_EXECUTABLES=ON { GetCMakeToolchainFlag ( triple ) } ", spirvToolsBuild ) . AssertZeroExitCode ( ) ;
73+ InheritedShell ( $ "cmake --build . --config Release{ JobsArg } ", spirvToolsBuild ) . AssertZeroExitCode ( ) ;
74+
75+ InheritedShell ( $ "{ triple } -strip --strip-unneeded source/libSPIRV-Tools-shared.so", spirvToolsBuild ) . AssertZeroExitCode ( ) ;
76+
77+ CopyFile ( spirvToolsBuild / "source" / "libSPIRV-Tools-shared.so" , runtimes / rid / "native" / "libSPIRV-Tools-shared.so" , FileExistsPolicy . Overwrite ) ;
78+ CopyFile ( spirvToolsBuild / "source" / "libSPIRV-Tools-shared.so" , vkd3dShaderCompiler / "libSPIRV-Tools-shared.so" , FileExistsPolicy . Overwrite ) ;
79+ }
80+
81+ // Vkd3d
82+ {
83+ EnsureCleanDirectory ( vkd3dBuild ) ;
84+
85+ // We only need to configure Vkd3d; we include its sources directly.
86+ InheritedShell ( $ "./configure --prefix={ vkd3dBuild } --disable-static --host={ triple } --disable-tests --disable-doxygen-doc --with-spirv-tools WIDL=x86_64-w64-mingw32-widl CPPFLAGS=\" -I { VulkanHeadersPath / "include" } -I { SPIRVToolsPath / "external" / "spirv-headers" / "include" } -DNDEBUG -DVKD3D_NO_DEBUG_MESSAGES -DVKD3D_NO_TRACE_MESSAGES\" PKG_CONFIG_PATH={ spirvToolsBuild } ", Vkd3dPath ) . AssertZeroExitCode ( ) ;
87+
88+ // Invoke widl for some headers that we need.
89+ foreach ( var name in new [ ]
90+ {
91+ "vkd3d_d3d12" ,
92+ "vkd3d_d3d12sdklayers" ,
93+ "vkd3d_d3dcommon" ,
94+ "vkd3d_dxgibase" ,
95+ "vkd3d_dxgiformat" ,
96+ } )
97+ {
98+ InheritedShell ( $ "make include/{ name } .h", Vkd3dPath ) . AssertZeroExitCode ( ) ;
99+ }
100+ }
101+
102+ // d3dcompile_vkd3d
103+ {
104+ // Note that the glibc version should match the one used to build SPIRV-Tools. Since we
105+ // currently build on Ubuntu 22.04, that's glibc 2.35.
106+ InheritedShell ( $ "zig build -Doptimize=ReleaseFast -Dtarget={ triple } .2.35 --verbose", vkd3dShaderCompiler ) . AssertZeroExitCode ( ) ;
107+
108+ CopyFile ( vkd3dShaderCompiler / "zig-out" / "lib" / "libd3dcompile_vkd3d.so" , runtimes / rid / "native" / "libd3dcompile_vkd3d.so" , FileExistsPolicy . Overwrite ) ;
109+ }
65110 }
66111
67- { //Vkd3d
68- var dest = Vkd3dPath / "dest" ;
69- var @out = Vkd3dPath / "build" ;
70-
71- EnsureCleanDirectory ( @out ) ;
72- EnsureCleanDirectory ( dest ) ;
73-
74- //Run autogen
75- InheritedShell ( $ "./autogen.sh", Vkd3dPath ) . AssertZeroExitCode ( ) ;
76- //Run configure to make a non-debug build, with no trace messages, with a prefix of /usr and with spirv-tools
77- InheritedShell ( $ "./configure CPPFLAGS=\" -DNDEBUG -DVKD3D_NO_TRACE_MESSAGES -fPIC\" --prefix=/usr --with-spirv-tools --disable-doxygen-pdf", Vkd3dPath ) . AssertZeroExitCode ( ) ;
78- //Build vkd3d
79- InheritedShell ( $ "make { JobsArg } ", Vkd3dPath ) . AssertZeroExitCode ( ) ;
80- //Install vkd3d to the dest folder
81- InheritedShell ( $ "make DESTDIR=\" { Vkd3dPath . ToString ( ) . TrimEnd ( '/' ) } /dest\" install", Vkd3dPath ) . AssertZeroExitCode ( ) ;
82-
83- var vkd3dShaderCompiler = RootDirectory / "src" / "Microsoft" / "Vkd3dCompiler" ;
84-
85- //Copy libvkd3d-shader.a
86- CopyFile ( @dest / "usr" / "lib" / "libvkd3d-shader.a" , vkd3dShaderCompiler / "libvkd3d-shader.a" ) ;
87- //Copy libvkd3d-shader.la
88- CopyFile ( @dest / "usr" / "lib" / "libvkd3d-shader.la" , vkd3dShaderCompiler / "libvkd3d-shader.la" ) ;
89- //Copy libSPIRV-Tools-shared.so
90- CopyFile ( vkd3dBuild / "source" / "libSPIRV-Tools-shared.so" , vkd3dShaderCompiler / "libSPIRV-Tools-shared.so" ) ;
91-
92- //Build the shader compiler
93- InheritedShell ( $ "zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-gnu --verbose", vkd3dShaderCompiler ) . AssertZeroExitCode ( ) ;
94-
95- //Copy the resulting shader compiler to the native output
96- CopyFile ( vkd3dShaderCompiler / "zig-out" / "lib" / "libd3dcompile_vkd3d.so" , runtimes / "linux-x64" / "native" / "libd3dcompile_vkd3d.so" , FileExistsPolicy . Overwrite ) ;
97- }
112+ Git ( "checkout HEAD configure.ac" , Vkd3dPath ) ;
98113
99114 PrUpdatedNativeBinary ( "Vkd3d" ) ;
100115 }
0 commit comments