// const std = @import("std"); // // // Although this function looks imperative, note that its job is to // // declaratively construct a build graph that will be executed by an external // // runner. // pub fn build(b: *std.Build) void { // // Standard target options allows the person running `zig build` to choose // // what target to build for. Here we do not override the defaults, which // // means any target is allowed, and the default is native. Other options // // for restricting supported target set are available. // const target = b.standardTargetOptions(.{}); // // // Standard optimization options allow the person running `zig build` to select // // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not // // set a preferred release mode, allowing the user to decide how to optimize. // const optimize = b.standardOptimizeOption(.{}); // // const lib = b.addStaticLibrary(.{ // .name = "seam-carving", // // In this case the main source file is merely a path, however, in more // // complicated build scripts, this could be a generated file. // .root_source_file = b.path("src/root.zig"), // .target = target, // .optimize = optimize, // }); // // // This declares intent for the library to be installed into the standard // // location when the user invokes the "install" step (the default step when // // running `zig build`). // b.installArtifact(lib); // // const exe = b.addExecutable(.{ // .name = "seam-carving", // .root_source_file = b.path("src/main.zig"), // .target = target, // .optimize = optimize, // }); // // // This declares intent for the executable to be installed into the // // standard location when the user invokes the "install" step (the default // // step when running `zig build`). // b.installArtifact(exe); // // // This *creates* a Run step in the build graph, to be executed when another // // step is evaluated that depends on it. The next line below will establish // // such a dependency. // const run_cmd = b.addRunArtifact(exe); // // // By making the run step depend on the install step, it will be run from the // // installation directory rather than directly from within the cache directory. // // This is not necessary, however, if the application depends on other installed // // files, this ensures they will be present and in the expected location. // run_cmd.step.dependOn(b.getInstallStep()); // // // This allows the user to pass arguments to the application in the build // // command itself, like this: `zig build run -- arg1 arg2 etc` // if (b.args) |args| { // run_cmd.addArgs(args); // } // // // This creates a build step. It will be visible in the `zig build --help` menu, // // and can be selected like this: `zig build run` // // This will evaluate the `run` step rather than the default, which is "install". // const run_step = b.step("run", "Run the app"); // run_step.dependOn(&run_cmd.step); // // // Creates a step for unit testing. This only builds the test executable // // but does not run it. // const lib_unit_tests = b.addTest(.{ // .root_source_file = b.path("src/root.zig"), // .target = target, // .optimize = optimize, // }); // // const run_lib_unit_tests = b.addRunArtifact(lib_unit_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); // // // Similar to creating the run step earlier, this exposes a `test` step to // // the `zig build --help` menu, providing a way for the user to request // // running the unit tests. // const test_step = b.step("test", "Run unit tests"); // test_step.dependOn(&run_lib_unit_tests.step); // test_step.dependOn(&run_exe_unit_tests.step); // } const std = @import("std"); const rlz = @import("raylib-zig"); pub fn build(b: *std.Build) !void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const project_name = "seam-carving"; const raylib_dep = b.dependency("raylib-zig", .{ .target = target, .optimize = optimize, }); const raylib = raylib_dep.module("raylib"); const raylib_artifact = raylib_dep.artifact("raylib"); raylib_artifact.defineCMacro("SUPPORT_FILEFORMAT_JPG", null); const run_label = try std.fmt.allocPrint(b.allocator, "Run {s}", .{project_name}); //web exports are completely separate if (target.query.os_tag == .emscripten) { const exe_lib = rlz.emcc.compileForEmscripten(b, project_name, "src/main.zig", target, optimize); exe_lib.linkLibrary(raylib_artifact); exe_lib.root_module.addImport("raylib", raylib); // Note that raylib itself is not actually added to the exe_lib output file, so it also needs to be linked with emscripten. const link_step = try rlz.emcc.linkWithEmscripten(b, &[_]*std.Build.Step.Compile{ exe_lib, raylib_artifact }); b.getInstallStep().dependOn(&link_step.step); const run_step = try rlz.emcc.emscriptenRunStep(b); run_step.step.dependOn(&link_step.step); const run_option = b.step("run", run_label); run_option.dependOn(&run_step.step); return; } const exe = b.addExecutable(.{ .name = project_name, .root_source_file = b.path("src/main.zig"), .optimize = optimize, .target = target }); exe.linkLibrary(raylib_artifact); exe.root_module.addImport("raylib", raylib); const run_cmd = b.addRunArtifact(exe); const run_step = b.step("run", run_label); run_step.dependOn(&run_cmd.step); b.installArtifact(exe); }