avoid using static library when hot reloading is disabled

This commit is contained in:
Rokas Puzonas 2026-02-08 01:32:41 +02:00
parent 9d733902b5
commit daeb07379f
2 changed files with 17 additions and 24 deletions

View File

@ -31,13 +31,6 @@ pub fn init(outer_builder: *std.Build, opts: InitOptions) void {
hot_reload = opts.hot_reload orelse (opts.optimize == .Debug);
}
opts.root_module.resolved_target = opts.target;
opts.root_module.optimize = opts.optimize;
const game_lib = b.addLibrary(.{
.name = "game",
.root_module = opts.root_module,
.linkage = if (hot_reload) .dynamic else .static,
});
const engine_lib = b.createModule(.{
.root_source_file = b.path("src/lib/root.zig")
});
@ -50,6 +43,10 @@ pub fn init(outer_builder: *std.Build, opts: InitOptions) void {
.has_imgui = opts.has_imgui,
.hot_reload = hot_reload
});
engine_module.root_module.addImport("lib", engine_lib);
if (!hot_reload) {
engine_module.root_module.addImport("game", opts.root_module);
}
const mod_main = b.createModule(.{
.root_source_file = b.path("src/runtime/main.zig"),
@ -57,11 +54,7 @@ pub fn init(outer_builder: *std.Build, opts: InitOptions) void {
.optimize = opts.optimize,
.link_libc = true
});
mod_main.addImport("lib", engine_lib);
mod_main.addImport("engine", engine_module.root_module);
if (!hot_reload) {
mod_main.linkLibrary(game_lib);
}
var run_cmd_step: *std.Build.Step = undefined;
if (isWasm) {
@ -95,6 +88,14 @@ pub fn init(outer_builder: *std.Build, opts: InitOptions) void {
run_cmd.addArgs(args);
}
if (hot_reload) {
opts.root_module.resolved_target = opts.target;
opts.root_module.optimize = opts.optimize;
const game_lib = b.addLibrary(.{
.name = "game",
.root_module = opts.root_module,
.linkage = .dynamic
});
run_cmd.addFileArg(game_lib.getEmittedBin());
}
run_cmd_step = &run_cmd.step;
@ -134,10 +135,6 @@ fn createEngineModule(b: *std.Build, opts: EngineModule.Options) EngineModule {
.optimize = opts.optimize,
.link_libc = true
});
const lib = b.createModule(.{
.root_source_file = b.path("src/lib/root.zig")
});
mod.addImport("lib", lib);
const dep_sokol = b.dependency("sokol", .{
.target = opts.target,

View File

@ -36,11 +36,6 @@ const GameCallbacks = struct {
debug: if (build_options.has_imgui) Debug else void
};
extern fn init(opts: *const Lib.Init) void;
extern fn tick(frame: *Lib.Frame) void;
extern fn deinit() void;
extern fn debug(imgui: *Lib.ImGui) void;
const GameLinking = union(enum) {
static,
dynamic: struct {
@ -54,11 +49,12 @@ const GameLinking = union(enum) {
return error.StaticLinkingDisabled;
}
const game = @import("game");
return GameCallbacks{
.init = init,
.deinit = deinit,
.tick = tick,
.debug = if (build_options.has_imgui) debug else {},
.init = game.init,
.deinit = game.deinit,
.tick = game.tick,
.debug = if (build_options.has_imgui) game.debug else {},
};
},
.dynamic => |*opts| {