121 lines
4.4 KiB
Zig
121 lines
4.4 KiB
Zig
const std = @import("std");
|
|
|
|
pub fn build(b: *std.Build) void {
|
|
const target = b.standardTargetOptions(.{});
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
const options = .{
|
|
.enable_tracy = b.option(
|
|
bool,
|
|
"enable_tracy",
|
|
"Enable Tracy profile markers",
|
|
) orelse false,
|
|
.enable_fibers = b.option(
|
|
bool,
|
|
"enable_fibers",
|
|
"Enable Tracy fiber support",
|
|
) orelse false,
|
|
.on_demand = b.option(
|
|
bool,
|
|
"on_demand",
|
|
"Build tracy with TRACY_ON_DEMAND",
|
|
) orelse false,
|
|
.callstack = b.option(
|
|
u32,
|
|
"callstack",
|
|
"If > 0, Builds tracy with TRACY_USE_CALLSTACK and sets TRACY_CALLSTACK to the depth provided.",
|
|
) orelse 0,
|
|
.shared = b.option(
|
|
bool,
|
|
"shared",
|
|
"Build as shared library",
|
|
) orelse false,
|
|
};
|
|
|
|
const options_step = b.addOptions();
|
|
inline for (std.meta.fields(@TypeOf(options))) |field| {
|
|
options_step.addOption(field.type, field.name, @field(options, field.name));
|
|
}
|
|
|
|
const options_module = options_step.createModule();
|
|
|
|
const tracy_src = b.dependency("tracy_src", .{ .target = target, .optimize = optimize });
|
|
|
|
const translate_c = b.addTranslateC(.{
|
|
.root_source_file = tracy_src.path("public/tracy/TracyC.h"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
.link_libc = true,
|
|
});
|
|
translate_c.addIncludePath(tracy_src.path("public/tracy"));
|
|
translate_c.defineCMacro("TRACY_ENABLE", "");
|
|
translate_c.defineCMacro("TRACY_IMPORTS", "");
|
|
if (options.callstack > 0) {
|
|
translate_c.defineCMacro("TRACY_USE_CALLSTACK", "");
|
|
var callstack_buffer: [64]u8 = undefined;
|
|
const callstack_str_len = std.fmt.printInt(&callstack_buffer, @as(u32, options.callstack), 10, .lower, .{});
|
|
translate_c.defineCMacro("TRACY_CALLSTACK", callstack_buffer[0..callstack_str_len]);
|
|
}
|
|
|
|
const tracy_lib = b.addLibrary(.{
|
|
.name = "tracy",
|
|
.linkage = if (options.shared) .dynamic else .static,
|
|
.root_module = b.createModule(.{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
}),
|
|
});
|
|
|
|
if (options.shared) tracy_lib.root_module.addCMacro("TRACY_EXPORTS", "");
|
|
|
|
if (target.result.os.tag == .windows) tracy_lib.root_module.addCMacro("_WIN32_WINNT", "0x0601");
|
|
|
|
if (options.enable_tracy) tracy_lib.root_module.addCMacro("TRACY_ENABLE", "");
|
|
if (options.enable_fibers) tracy_lib.root_module.addCMacro("TRACY_FIBERS", "");
|
|
if (options.on_demand) tracy_lib.root_module.addCMacro("TRACY_ON_DEMAND", "");
|
|
|
|
tracy_lib.root_module.addIncludePath(tracy_src.path("public"));
|
|
tracy_lib.root_module.addIncludePath(tracy_src.path("public/tracy"));
|
|
tracy_lib.root_module.addIncludePath(tracy_src.path("public/common"));
|
|
tracy_lib.root_module.addIncludePath(tracy_src.path("public/client"));
|
|
tracy_lib.root_module.addCSourceFile(.{
|
|
.file = tracy_src.path("public/TracyClient.cpp"),
|
|
.flags = &.{
|
|
"-fno-sanitize=undefined",
|
|
},
|
|
});
|
|
|
|
tracy_lib.root_module.link_libc = true;
|
|
if (target.result.abi != .msvc) {
|
|
tracy_lib.root_module.link_libcpp = true;
|
|
} else {
|
|
tracy_lib.root_module.addCMacro("fileno", "_fileno");
|
|
}
|
|
|
|
// switch (target.result.os.tag) {
|
|
// .windows => {
|
|
// tracy_lib.root_module.linkSystemLibrary("ws2_32", .{});
|
|
// tracy_lib.root_module.linkSystemLibrary("dbghelp", .{});
|
|
// tracy_lib.root_module.linkSystemLibrary("secur32", .{}); // Provides GetUserNameExA
|
|
// tracy_lib.root_module.linkSystemLibrary("user32", .{}); // Often needed for other system calls
|
|
// tracy_lib.root_module.linkSystemLibrary("advapi32", .{});
|
|
// },
|
|
// // .macos => {
|
|
// // if (b.lazyDependency("system_sdk", .{})) |system_sdk| {
|
|
// // tracy_lib.root_module.addFrameworkPath(system_sdk.path("System/Library/Frameworks"));
|
|
// // }
|
|
// // },
|
|
// else => {},
|
|
// }
|
|
|
|
b.installArtifact(tracy_lib);
|
|
|
|
const tracy = b.addModule("tracy", .{
|
|
.root_source_file = b.path("src/tracy.zig"),
|
|
.imports = &.{
|
|
.{ .name = "tracy_options", .module = options_module },
|
|
},
|
|
});
|
|
tracy.addImport("c", translate_c.createModule());
|
|
tracy.linkLibrary(tracy_lib);
|
|
} |