const std = @import("std"); const CrossTarget = @import("std").zig.CrossTarget; const Target = @import("std").Target; const Feature = @import("std").Target.Cpu.Feature; pub fn build(b: *std.Build) void { const features = Target.riscv.Feature; var disabled_features = Feature.Set.empty; var enabled_features = Feature.Set.empty; // disable all CPU extensions disabled_features.addFeature(@intFromEnum(features.a)); disabled_features.addFeature(@intFromEnum(features.c)); disabled_features.addFeature(@intFromEnum(features.d)); disabled_features.addFeature(@intFromEnum(features.e)); disabled_features.addFeature(@intFromEnum(features.f)); // except multiply enabled_features.addFeature(@intFromEnum(features.m)); const target = b.resolveTargetQuery(.{ .cpu_arch = Target.Cpu.Arch.riscv32, .os_tag = Target.Os.Tag.freestanding, .abi = Target.Abi.none, .cpu_model = .{ .explicit = &std.Target.riscv.cpu.generic_rv32}, .cpu_features_sub = disabled_features, .cpu_features_add = enabled_features }); const exe = b.addExecutable(.{ .name = "mandel", .root_module = b.createModule(.{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = .ReleaseSmall, }), }); b.installArtifact(exe); exe.addAssemblyFile(b.path("../common/crt0.S")); exe.setLinkerScript(b.path("../common/linker.ld")); exe.addIncludePath(b.path("../../common")); exe.addIncludePath(b.path("../common")); const bin = b.addObjCopy(exe.getEmittedBin(), .{ .format = .bin, }); bin.step.dependOn(&exe.step); const copy_bin = b.addInstallBinFile(bin.getOutput(), "mandel.bin"); b.default_step.dependOn(©_bin.step); }