const std = @import("std"); const sokol = @import("sokol"); const title = "sok"; const buildForWeb = false; pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const dep_sokol = b.dependency("sokol", .{ .target = target, .optimize = optimize }); if (!buildForWeb) { // Native exe const exe = b.addExecutable(.{ .name = title, .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); exe.root_module.addImport("sokol", dep_sokol.module("sokol")); // Set this to hide console on windows //exe.subsystem = .Windows; b.installArtifact(exe); // Check step (for ZLS) const exe_check = b.addExecutable(.{ .name = "check_step", .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); exe_check.root_module.addImport("sokol", dep_sokol.module("sokol")); const check = b.step("check", "Check if project compiles"); check.dependOn(&exe_check.step); // Run const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| { run_cmd.addArgs(args); } const run_step = b.step("run", "Run" ++ title ++ " as native app"); run_step.dependOn(&run_cmd.step); } else { // Web const wasmLib = b.addStaticLibrary(.{ .name = title, .target = target, .optimize = optimize, .root_source_file = b.path("src/pacman.zig"), }); wasmLib.root_module.addImport("sokol", dep_sokol.module("sokol")); // create a build step which invokes the Emscripten linker const emsdk = dep_sokol.builder.dependency("emsdk", .{}); const link_step = try sokol.emLinkStep(b, .{ .lib_main = wasmLib, .target = target, .optimize = optimize, .emsdk = emsdk, .use_webgl2 = true, .use_emmalloc = true, .use_filesystem = false, .shell_file_path = dep_sokol.path("src/sokol/web/shell.html").getPath(b), }); // ...and a special run step to start the web build output via 'emrun' const run = sokol.emRunStep(b, .{ .name = "sok", .emsdk = emsdk }); run.step.dependOn(&link_step.step); b.step("run", "Run " ++ title ++ " as wasm").dependOn(&run.step); } // Tests const exe_unit_tests = b.addTest(.{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); const test_step = b.step("test", "Run unit tests"); test_step.dependOn(&run_exe_unit_tests.step); } // for web builds, the Zig code needs to be built into a library and linked with the Emscripten linker fn buildWeb(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.Build.OptimizeMode, dep_sokol: *std.Build.Dependency) !void { _ = b; // autofix _ = target; // autofix _ = optimize; // autofix _ = dep_sokol; // autofix }