110 lines
4.5 KiB
Zig
110 lines
4.5 KiB
Zig
const std = @import("std");
|
|
|
|
const flags: []const []const u8 = &.{
|
|
"-fno-exceptions",
|
|
"-fno-rtti",
|
|
"-fno-threadsafe-statics",
|
|
};
|
|
|
|
pub fn build(b: *std.Build) void {
|
|
// Standard options
|
|
const target = b.standardTargetOptions(.{});
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
const optimize_external = switch (optimize) {
|
|
.Debug => .ReleaseSafe,
|
|
else => optimize,
|
|
};
|
|
|
|
// Get the upstream code
|
|
const upstream = b.dependency("dear-imgui", .{});
|
|
|
|
// Compile Dear ImGui as a static library
|
|
const dear_imgui_lib = b.addStaticLibrary(.{
|
|
.name = "dear_imgui",
|
|
.target = target,
|
|
.optimize = optimize_external,
|
|
});
|
|
dear_imgui_lib.addIncludePath(upstream.path(""));
|
|
dear_imgui_lib.installHeadersDirectory(upstream.path(""), "", .{});
|
|
dear_imgui_lib.linkLibC();
|
|
dear_imgui_lib.addCSourceFiles(.{
|
|
.root = upstream.path(""),
|
|
.files = &.{
|
|
"imgui.cpp",
|
|
"imgui_demo.cpp",
|
|
"imgui_draw.cpp",
|
|
"imgui_tables.cpp",
|
|
"imgui_widgets.cpp",
|
|
},
|
|
.flags = flags,
|
|
});
|
|
dear_imgui_lib.addCSourceFiles(.{
|
|
.root = b.path("src/cached"),
|
|
.files = &.{"cimgui.cpp"},
|
|
.flags = flags,
|
|
});
|
|
b.installArtifact(dear_imgui_lib);
|
|
|
|
// Compile the Vulkan backend as a static library
|
|
const dear_imgui_vulkan_lib = b.addStaticLibrary(.{
|
|
.name = "dear_imgui_vulkan",
|
|
.target = target,
|
|
.optimize = optimize_external,
|
|
});
|
|
dear_imgui_vulkan_lib.linkLibrary(dear_imgui_lib);
|
|
dear_imgui_vulkan_lib.addCSourceFile(.{ .file = upstream.path("backends/imgui_impl_vulkan.cpp"), .flags = flags });
|
|
dear_imgui_vulkan_lib.addCSourceFile(.{ .file = b.path("src/cached/cimgui_impl_vulkan.cpp"), .flags = flags });
|
|
dear_imgui_vulkan_lib.addIncludePath(upstream.path(""));
|
|
dear_imgui_vulkan_lib.addIncludePath(upstream.path("backends"));
|
|
const vulkan_headers = b.dependency("Vulkan-Headers", .{});
|
|
dear_imgui_vulkan_lib.addIncludePath(vulkan_headers.path("include"));
|
|
dear_imgui_vulkan_lib.defineCMacro("IMGUI_IMPL_VULKAN_NO_PROTOTYPES", "1"); // Assumed in generator
|
|
dear_imgui_vulkan_lib.installHeadersDirectory(upstream.path("backends"), "", .{});
|
|
dear_imgui_vulkan_lib.installHeadersDirectory(vulkan_headers.path("include"), "", .{});
|
|
b.installArtifact(dear_imgui_vulkan_lib);
|
|
|
|
// Compile the generator
|
|
const generate_exe = b.addExecutable(.{
|
|
.name = "generate",
|
|
.root_source_file = b.path("src/generate.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
const generate_cmd = b.addRunArtifact(generate_exe);
|
|
generate_cmd.step.dependOn(b.getInstallStep());
|
|
if (b.args) |args| {
|
|
generate_cmd.addArgs(args);
|
|
}
|
|
|
|
const generate_step = b.step("generate", "Generate Zig bindings for Dear ImGui. This is done automatically as part of the build process, but is exposed as an option for debugging purposes.");
|
|
generate_step.dependOn(&generate_cmd.step);
|
|
|
|
// Generate Zig bindings for Dear ImGui
|
|
const generate_dear_imgui = b.addRunArtifact(generate_exe);
|
|
generate_dear_imgui.addFileArg(b.path("src/cached/cimgui.json"));
|
|
const dear_imgui_zig = generate_dear_imgui.addOutputFileArg("dear_imgui.zig");
|
|
generate_dear_imgui.addFileArg(b.path("src/templates/cimgui_prefix.zig.template"));
|
|
generate_dear_imgui.addFileArg(b.path("src/templates/cimgui_postfix.zig.template"));
|
|
const dear_imgui_zig_module = b.addModule("dear_imgui", .{
|
|
.root_source_file = dear_imgui_zig,
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
dear_imgui_zig_module.linkLibrary(dear_imgui_lib);
|
|
|
|
// Generate Zig bindings for the Vulkan backend
|
|
const generate_vulkan = b.addRunArtifact(generate_exe);
|
|
generate_vulkan.addFileArg(b.path("src/cached/cimgui_impl_vulkan.json"));
|
|
const dear_imgui_vulkan_zig = generate_vulkan.addOutputFileArg("dear_imgui_impl_vulkan.zig");
|
|
generate_vulkan.addFileArg(b.path("src/templates/impl_vulkan_prefix.zig.template"));
|
|
generate_vulkan.addFileArg(b.path("src/templates/impl_vulkan_postfix.zig.template"));
|
|
const dear_imgui_vulkan_zig_module = b.addModule("dear_imgui_vulkan", .{
|
|
.root_source_file = dear_imgui_vulkan_zig,
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
dear_imgui_vulkan_zig_module.linkLibrary(dear_imgui_vulkan_lib);
|
|
dear_imgui_vulkan_zig_module.addImport("dear_imgui", dear_imgui_zig_module);
|
|
}
|