-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.zig
More file actions
77 lines (65 loc) · 2.58 KB
/
build.zig
File metadata and controls
77 lines (65 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const std = @import("std");
const builtin = @import("builtin");
const Build = std.Build;
const Target = std.Target;
const Step = Build.Step;
pub fn build(b: *std.Build) void {
const target_arch = b.option(Target.Cpu.Arch, "tarch", "Target archtecture") orelse builtin.cpu.arch;
const optimize = b.standardOptimizeOption(.{});
var core_target = Target.Query{
.cpu_arch = target_arch,
.os_tag = .freestanding,
.abi = .none,
.ofmt = .elf,
};
switch (target_arch) {
.x86_64 => {
const Feature = std.Target.x86.Feature;
core_target.cpu_features_sub.addFeature(@intFromEnum(Feature.sse));
core_target.cpu_features_sub.addFeature(@intFromEnum(Feature.sse2));
core_target.cpu_features_sub.addFeature(@intFromEnum(Feature.avx));
core_target.cpu_features_sub.addFeature(@intFromEnum(Feature.avx2));
core_target.cpu_features_add.addFeature(@intFromEnum(Feature.soft_float));
},
.aarch64 => {
const features = std.Target.aarch64.Feature;
core_target.cpu_features_sub.addFeature(@intFromEnum(features.fp_armv8));
core_target.cpu_features_sub.addFeature(@intFromEnum(features.crypto));
core_target.cpu_features_sub.addFeature(@intFromEnum(features.neon));
},
else => std.debug.panic("Unsuported archtecture {s}!", .{@tagName(target_arch)}),
}
const target_query = b.resolveTargetQuery(core_target);
// Kernel library
const kernel_lib = b.addModule("lib", .{
.root_source_file = b.path("lib/root.zig"),
.target = target_query,
.optimize = optimize,
});
// kernel module
const kernel_mod = b.addModule("kernel", .{
.root_source_file = b.path("src/main.zig"),
.target = target_query,
.optimize = optimize,
.red_zone = false,
});
kernel_mod.code_model = switch (target_arch) {
.aarch64 => .small,
.x86_64 => .kernel,
else => unreachable,
};
kernel_mod.omit_frame_pointer = false;
kernel_mod.strip = false;
kernel_mod.single_threaded = true;
const target_system_impl = b.dependency("system", .{}).module("system");
kernel_mod.addImport("system", target_system_impl);
kernel_mod.addImport("lib", kernel_lib);
// kernel executable
const kernel_exe = b.addExecutable(.{
.name = "kernel",
.root_module = kernel_mod,
.use_llvm = true,
});
const kernel_install = b.addInstallArtifact(kernel_exe, .{});
b.default_step.dependOn(&kernel_install.step);
}