diff --git a/engine/build.zig b/engine/build.zig index b3b6783..371da9a 100644 --- a/engine/build.zig +++ b/engine/build.zig @@ -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, diff --git a/engine/src/runtime/root.zig b/engine/src/runtime/root.zig index 6ed6503..77aa877 100644 --- a/engine/src/runtime/root.zig +++ b/engine/src/runtime/root.zig @@ -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| {