diff options
| author | Layne Gustafson <lgustaf1@binghamton.edu> | 2020-01-08 20:27:36 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-01-19 20:53:19 -0500 |
| commit | c61856ebcf54a55f1c17a5fd6a3b3300115b2c65 (patch) | |
| tree | 16c00869a16f4c80f697be2822bbfa80c1b04cef /lib/std | |
| parent | 79a2747de490ca2bb1603fd1ce55637fb5278671 (diff) | |
| download | zig-c61856ebcf54a55f1c17a5fd6a3b3300115b2c65.tar.gz zig-c61856ebcf54a55f1c17a5fd6a3b3300115b2c65.zip | |
Add TargetDetails abstraction
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/build.zig | 42 | ||||
| -rw-r--r-- | lib/std/target.zig | 6 |
2 files changed, 23 insertions, 25 deletions
diff --git a/lib/std/build.zig b/lib/std/build.zig index 65c5a6f064..72fb173ac9 100644 --- a/lib/std/build.zig +++ b/lib/std/build.zig @@ -1199,8 +1199,7 @@ pub const LibExeObjStep = struct { subsystem: ?builtin.SubSystem = null, - cpu: ?[]const u8 = null, - features: ?[]const u8 = null, + target_details: ?std.target.TargetDetails = null, const LinkObject = union(enum) { StaticPath: []const u8, @@ -1387,21 +1386,8 @@ pub const LibExeObjStep = struct { self.computeOutFileNames(); } - pub fn setCpu(self: *LibExeObjStep, cpu: *const std.target.Cpu) void { - self.cpu = cpu.name; - } - - pub fn setFeatures(self: *LibExeObjStep, features: []*const std.target.Feature) void { - var features_str_buffer = std.Buffer.init(self.builder.allocator, "") catch unreachable; - defer features_str_buffer.deinit(); - - for (features) |feature| { - features_str_buffer.append("+") catch unreachable; - features_str_buffer.append(feature.name) catch unreachable; - features_str_buffer.append(",") catch unreachable; - } - - self.features = features_str_buffer.toOwnedSlice(); + pub fn setTargetDetails(self: *LibExeObjStep, target_details: std.target.TargetDetails) void { + self.target_details = target_details; } pub fn setTargetGLibC(self: *LibExeObjStep, major: u32, minor: u32, patch: u32) void { @@ -1994,14 +1980,20 @@ pub const LibExeObjStep = struct { }, } - if (self.cpu) |cpu| { - try zig_args.append("--cpu"); - try zig_args.append(cpu); - } - - if (self.features) |features| { - try zig_args.append("--features"); - try zig_args.append(features); + if (self.target_details) |td| { + switch (td) { + .cpu => |cpu| { + try zig_args.append("--cpu"); + try zig_args.append(cpu.name); + }, + .features => |features| { + try zig_args.append("--features"); + for (features) |feature| { + try zig_args.append(feature.name); + try zig_args.append(","); + } + }, + } } if (self.target_glibc) |ver| { diff --git a/lib/std/target.zig b/lib/std/target.zig index 8a86af6733..9bb4936f11 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -860,6 +860,7 @@ pub const x86 = @import("target/x86.zig"); pub const Feature = struct { name: []const u8, + llvm_name: []const u8, description: []const u8, dependencies: []*const Feature, @@ -872,6 +873,11 @@ pub const Cpu = struct { dependencies: []*const Feature, }; +pub const TargetDetails = union(enum) { + cpu: *const Cpu, + features: []*const Feature, +}; + pub fn getFeaturesForArch(arch: @TagType(Target.Arch)) []*const Feature { return switch (arch) { .arm, .armeb, .thumb, .thumbeb => arm.features, |
