1*1b9f3db4SBarry Smith// Uses zig to compiler ex1z.zig 2*1b9f3db4SBarry Smith 3*1b9f3db4SBarry Smithconst std = @import("std"); 4*1b9f3db4SBarry Smith 5*1b9f3db4SBarry Smithpub fn build(b: *std.build.Builder) void { 6*1b9f3db4SBarry Smith // Standard target options allows the person running `zig build` to choose 7*1b9f3db4SBarry Smith // what target to build for. Here we do not override the defaults, which 8*1b9f3db4SBarry Smith // means any target is allowed, and the default is native. Other options 9*1b9f3db4SBarry Smith // for restricting supported target set are available. 10*1b9f3db4SBarry Smith const target = b.standardTargetOptions(.{}); 11*1b9f3db4SBarry Smith 12*1b9f3db4SBarry Smith // Standard release options allow the person running `zig build` to select 13*1b9f3db4SBarry Smith // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. 14*1b9f3db4SBarry Smith const mode = b.standardReleaseOptions(); 15*1b9f3db4SBarry Smith 16*1b9f3db4SBarry Smith const exe = b.addExecutable("ex1z", "ex1z.zig"); 17*1b9f3db4SBarry Smith 18*1b9f3db4SBarry Smith const PETSC_DIR = std.os.getenv("PETSC_DIR") orelse unreachable; 19*1b9f3db4SBarry Smith const PETSC_ARCH = std.os.getenv("PETSC_ARCH") orelse unreachable; 20*1b9f3db4SBarry Smith var path = std.fs.path.join(std.heap.c_allocator, &[_][] const u8 { PETSC_DIR,PETSC_ARCH,"lib"}); 21*1b9f3db4SBarry Smith if (path) |value| {exe.addLibPath(value);} else |_| {std.debug.print("Error bad path: {s}\n", .{path});} 22*1b9f3db4SBarry Smith if (path) |value| {exe.addRPath(value);} else |_| {} 23*1b9f3db4SBarry Smith // This should not be needed but is export DYLD_LIBRARY_PATH=$PETSC_DIR/$PETSC_ARCH/lib 24*1b9f3db4SBarry Smith path = std.fs.path.join(std.heap.c_allocator, &[_][] const u8 { PETSC_DIR,"include"}); 25*1b9f3db4SBarry Smith if (path) |value| {exe.addIncludeDir(value);} else |_| {} 26*1b9f3db4SBarry Smith path = std.fs.path.join(std.heap.c_allocator, &[_][] const u8 { PETSC_DIR,PETSC_ARCH,"include"}); 27*1b9f3db4SBarry Smith if (path) |value| {exe.addIncludeDir(value);} else |_| {} 28*1b9f3db4SBarry Smith 29*1b9f3db4SBarry Smith exe.linkSystemLibrary("petsc"); 30*1b9f3db4SBarry Smith exe.setTarget(target); 31*1b9f3db4SBarry Smith exe.setBuildMode(mode); 32*1b9f3db4SBarry Smith exe.install(); 33*1b9f3db4SBarry Smith 34*1b9f3db4SBarry Smith const run_cmd = exe.run(); 35*1b9f3db4SBarry Smith run_cmd.step.dependOn(b.getInstallStep()); 36*1b9f3db4SBarry Smith if (b.args) |args| { 37*1b9f3db4SBarry Smith run_cmd.addArgs(args); 38*1b9f3db4SBarry Smith } 39*1b9f3db4SBarry Smith 40*1b9f3db4SBarry Smith const run_step = b.step("run", "Run the app"); 41*1b9f3db4SBarry Smith run_step.dependOn(&run_cmd.step); 42*1b9f3db4SBarry Smith} 43