aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorLayne Gustafson <lgustaf1@binghamton.edu>2020-01-08 20:27:36 -0500
committerAndrew Kelley <andrew@ziglang.org>2020-01-19 20:53:19 -0500
commitc61856ebcf54a55f1c17a5fd6a3b3300115b2c65 (patch)
tree16c00869a16f4c80f697be2822bbfa80c1b04cef /lib/std
parent79a2747de490ca2bb1603fd1ce55637fb5278671 (diff)
downloadzig-c61856ebcf54a55f1c17a5fd6a3b3300115b2c65.tar.gz
zig-c61856ebcf54a55f1c17a5fd6a3b3300115b2c65.zip
Add TargetDetails abstraction
Diffstat (limited to 'lib/std')
-rw-r--r--lib/std/build.zig42
-rw-r--r--lib/std/target.zig6
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,