Edited spirv-headers build behavior
This commit is contained in:
parent
a49840f365
commit
51f29f865e
3 changed files with 68 additions and 89 deletions
106
build.zig
106
build.zig
|
|
@ -3,33 +3,17 @@ const builtin = @import("builtin");
|
||||||
const Build = std.Build;
|
const Build = std.Build;
|
||||||
|
|
||||||
const log = std.log.scoped(.glslang_zig);
|
const log = std.log.scoped(.glslang_zig);
|
||||||
const spirv_header_name = "spirv-headers"; // Since update_glslang_sources downloads it as spirv-headers instead of SPIRV-Headers
|
|
||||||
|
|
||||||
pub fn build(b: *Build) !void {
|
pub fn build(b: *Build) !void {
|
||||||
_ = std.fs.openFileAbsolute(sdkPath("/External/spirv-tools/build.zig"), .{}) catch |err| {
|
|
||||||
if (err == error.FileNotFound) {
|
|
||||||
log.err("SPIRV-Tools build file was not found - ensure sources have been cloned with `./update_glslang_sources.py --site zig`/.", .{});
|
|
||||||
}
|
|
||||||
|
|
||||||
std.process.exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
const spvtools = @import("External/spirv-tools/build.zig");
|
|
||||||
|
|
||||||
const optimize = b.standardOptimizeOption(.{});
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
const target = b.standardTargetOptions(.{});
|
const target = b.standardTargetOptions(.{});
|
||||||
const debug = b.option(bool, "debug", "Whether to produce detailed debug symbols (g0) or not. These increase binary size considerably.") orelse false;
|
const debug = b.option(bool, "debug", "Whether to produce detailed debug symbols (g0) or not. These increase binary size considerably.") orelse false;
|
||||||
const shared = b.option(bool, "shared", "Build glslang as a shared library.") orelse false;
|
const shared = b.option(bool, "shared", "Build glslang as a shared library.") orelse false;
|
||||||
const enable_hlsl = !(b.option(bool, "no-hlsl", "Skip building glslang HLSL support.") orelse false);
|
const enable_hlsl = !(b.option(bool, "no_hlsl", "Skip building glslang HLSL support.") orelse false);
|
||||||
const enable_opt = !(b.option(bool, "no-opt", "Skip building spirv-tools optimization.") orelse false);
|
const enable_opt = !(b.option(bool, "no_opt", "Skip building spirv-tools optimization.") orelse false);
|
||||||
const shared_tools = b.option(bool, "shared-tools", "Build and link spirv-tools as a shared library.") orelse false;
|
const shared_tools = b.option(bool, "shared_tools", "Build and link spirv-tools as a shared library.") orelse false;
|
||||||
const standalone_glslang = b.option(bool, "standalone", "Build glslang.exe standalone command-line compiler.") orelse false;
|
const standalone_glslang = b.option(bool, "standalone", "Build glslang.exe standalone command-line compiler.") orelse false;
|
||||||
const standalone_spvremap = b.option(bool, "standalone-remap", "Build spirv-remap.exe standalone command-line remapper.") orelse false;
|
const standalone_spvremap = b.option(bool, "standalone_remap", "Build spirv-remap.exe standalone command-line remapper.") orelse false;
|
||||||
|
|
||||||
const tools_libs: spvtools.SPVLibs = spvtools.buildSpirv(b, optimize, target, shared_tools, debug, spirv_header_name) catch |err| {
|
|
||||||
log.err("Error building SPIRV-Tools: {s}", .{ @errorName(err) });
|
|
||||||
std.process.exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
var cppflags = std.ArrayList([]const u8).init(b.allocator);
|
var cppflags = std.ArrayList([]const u8).init(b.allocator);
|
||||||
|
|
||||||
|
|
@ -60,7 +44,38 @@ pub fn build(b: *Build) !void {
|
||||||
// SPIRV-Tools
|
// SPIRV-Tools
|
||||||
// ------------------
|
// ------------------
|
||||||
|
|
||||||
const build_headers = BuildHeadersStep.init(b);
|
generateHeaders(b.allocator);
|
||||||
|
|
||||||
|
_ = std.fs.openDirAbsolute(sdkPath("/External/spirv-tools"), .{}) catch |err| {
|
||||||
|
if (err == error.FileNotFound) {
|
||||||
|
log.err("SPIRV-Tools build directory was not found - ensure sources have been cloned with `./update_glslang_sources.py --site zig`/.", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
std.process.exit(1);
|
||||||
|
};
|
||||||
|
|
||||||
|
var tools_lib: *Build.Step.Compile = undefined;
|
||||||
|
var tools_opt: *Build.Step.Compile = undefined;
|
||||||
|
var tools_val: *Build.Step.Compile = undefined;
|
||||||
|
|
||||||
|
const path: []const u8 = "external/spirv-headers";
|
||||||
|
|
||||||
|
if (b.lazyDependency("SPIRV-Tools", .{
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
.debug = debug,
|
||||||
|
.shared = shared_tools,
|
||||||
|
.header_path = path,
|
||||||
|
})) |dep| {
|
||||||
|
tools_lib = dep.artifact("SPIRV-Tools");
|
||||||
|
tools_opt = dep.artifact("SPIRV-Tools-opt");
|
||||||
|
tools_val = dep.artifact("SPIRV-Tools-val");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tools_lib == undefined or tools_opt == undefined or tools_val == undefined) {
|
||||||
|
log.err("Error building SPIRV-Tools libraries", .{});
|
||||||
|
std.process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
const sources = sources_spirv ++
|
const sources = sources_spirv ++
|
||||||
sources_generic_codegen ++
|
sources_generic_codegen ++
|
||||||
|
|
@ -123,6 +138,8 @@ pub fn build(b: *Build) !void {
|
||||||
glslang_lib.defineCMacro("ENABLE_HLSL", "0");
|
glslang_lib.defineCMacro("ENABLE_HLSL", "0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glslang_lib.linkLibrary(tools_lib);
|
||||||
|
|
||||||
if (enable_opt) {
|
if (enable_opt) {
|
||||||
glslang_lib.addCSourceFiles(.{
|
glslang_lib.addCSourceFiles(.{
|
||||||
.files = &sources_opt,
|
.files = &sources_opt,
|
||||||
|
|
@ -131,22 +148,17 @@ pub fn build(b: *Build) !void {
|
||||||
|
|
||||||
glslang_lib.defineCMacro("ENABLE_OPT", "1");
|
glslang_lib.defineCMacro("ENABLE_OPT", "1");
|
||||||
|
|
||||||
glslang_lib.step.dependOn(&tools_libs.tools_opt.step);
|
glslang_lib.linkLibrary(tools_opt);
|
||||||
glslang_lib.step.dependOn(&tools_libs.tools_val.step);
|
glslang_lib.linkLibrary(tools_val);
|
||||||
glslang_lib.linkLibrary(tools_libs.tools_opt);
|
|
||||||
glslang_lib.linkLibrary(tools_libs.tools_val);
|
|
||||||
} else {
|
} else {
|
||||||
glslang_lib.defineCMacro("ENABLE_OPT", "0");
|
glslang_lib.defineCMacro("ENABLE_OPT", "0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
addIncludes(glslang_lib);
|
addIncludes(glslang_lib);
|
||||||
spvtools.addSPIRVPublicIncludes(glslang_lib, spirv_header_name);
|
|
||||||
|
|
||||||
glslang_lib.linkLibCpp();
|
glslang_lib.linkLibCpp();
|
||||||
|
|
||||||
glslang_lib.step.dependOn(&build_headers.step);
|
|
||||||
|
|
||||||
const build_step = b.step("glslang-library", "Build the glslang library");
|
const build_step = b.step("glslang-library", "Build the glslang library");
|
||||||
build_step.dependOn(&b.addInstallArtifact(glslang_lib, .{}).step);
|
build_step.dependOn(&b.addInstallArtifact(glslang_lib, .{}).step);
|
||||||
|
|
||||||
|
|
@ -323,44 +335,6 @@ fn generateHeaders(allocator: std.mem.Allocator) void {
|
||||||
genExtensionHeaders(allocator);
|
genExtensionHeaders(allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
var build_mutex = std.Thread.Mutex{};
|
|
||||||
|
|
||||||
pub const BuildHeadersStep = struct {
|
|
||||||
step: std.Build.Step,
|
|
||||||
b: *std.Build,
|
|
||||||
|
|
||||||
pub fn init(b: *std.Build) *BuildHeadersStep {
|
|
||||||
const build_headers = b.allocator.create(BuildHeadersStep) catch unreachable;
|
|
||||||
|
|
||||||
build_headers.* = .{
|
|
||||||
.step = std.Build.Step.init(.{
|
|
||||||
.id = .custom,
|
|
||||||
.name = "Build header files.",
|
|
||||||
.owner = b,
|
|
||||||
.makeFn = &make,
|
|
||||||
}),
|
|
||||||
.b = b,
|
|
||||||
};
|
|
||||||
|
|
||||||
return build_headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn make(step_ptr: *std.Build.Step, prog_node: *std.Progress.Node) anyerror!void {
|
|
||||||
_ = prog_node;
|
|
||||||
|
|
||||||
const build_headers: *BuildHeadersStep = @fieldParentPtr("step", step_ptr);
|
|
||||||
const b = build_headers.b;
|
|
||||||
|
|
||||||
// Zig will run build steps in parallel if possible, so if there were two invocations of
|
|
||||||
// then this function would be called in parallel. We're manipulating the FS here
|
|
||||||
// and so need to prevent that.
|
|
||||||
build_mutex.lock();
|
|
||||||
defer build_mutex.unlock();
|
|
||||||
|
|
||||||
generateHeaders(b.allocator);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const sources_spirv = [_][]const u8{
|
const sources_spirv = [_][]const u8{
|
||||||
"SPIRV/GlslangToSpv.cpp",
|
"SPIRV/GlslangToSpv.cpp",
|
||||||
|
|
|
||||||
|
|
@ -18,5 +18,10 @@
|
||||||
"README.md",
|
"README.md",
|
||||||
"SECURITY.md",
|
"SECURITY.md",
|
||||||
},
|
},
|
||||||
.dependencies = .{},
|
.dependencies = .{
|
||||||
|
.@"SPIRV-Tools" = .{
|
||||||
|
.path = "External/spirv-tools", // Downloaded with update_glslang_sources.py
|
||||||
|
.lazy = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"site" : "github",
|
"site" : "github",
|
||||||
"subrepo" : "KhronosGroup/SPIRV-Headers",
|
"subrepo" : "KhronosGroup/SPIRV-Headers",
|
||||||
"subdir" : "External/spirv-tools/external/spirv-headers",
|
"subdir" : "External/spirv-tools/external/spirv-headers",
|
||||||
"commit" : "4f7b471f1a66b6d06462cd4ba57628cc0cd087d7"
|
"commit" : "main"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "googletest",
|
"name": "googletest",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue