aboutsummaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-02-26 15:51:32 -0500
committerAndrew Kelley <andrew@ziglang.org>2019-02-26 15:58:10 -0500
commitade10387a583351fe597b58c4c9ceb97d959adf5 (patch)
tree5e508bc243ec6e65c1d2a11908d7e28bcf0b8c48 /std
parent1ec1097bd389b9af1b3e40d9edbc4c1c0b65f6a1 (diff)
downloadzig-ade10387a583351fe597b58c4c9ceb97d959adf5.tar.gz
zig-ade10387a583351fe597b58c4c9ceb97d959adf5.zip
breaking changes to the way targets work in zig
* CLI: `-target [name]` instead of `--target-*` args. This matches clang's API. * `builtin.Environ` renamed to `builtin.Abi` - likewise `builtin.environ` renamed to `builtin.abi` * stop hiding the concept of sub-arch. closes #1526 * `zig targets` only shows available targets. closes #438 * include all targets in readme, even those that don't print with `zig targets` but note they are Tier 4 * refactor target.cpp and make the naming conventions more consistent * introduce the concept of a "default C ABI" for a given OS/Arch combo. As a rule of thumb, if the system compiler is clang or gcc then the default C ABI is the gnu ABI.
Diffstat (limited to 'std')
-rw-r--r--std/build.zig59
-rw-r--r--std/fmt/index.zig2
-rw-r--r--std/os/linux/index.zig2
-rw-r--r--std/special/bootstrap.zig2
-rw-r--r--std/special/compiler_rt/index.zig58
5 files changed, 50 insertions, 73 deletions
diff --git a/std/build.zig b/std/build.zig
index d88a9b3270..e90d827602 100644
--- a/std/build.zig
+++ b/std/build.zig
@@ -731,20 +731,40 @@ const Version = struct {
const CrossTarget = struct {
arch: builtin.Arch,
os: builtin.Os,
- environ: builtin.Environ,
+ abi: builtin.Abi,
};
pub const Target = union(enum) {
Native: void,
Cross: CrossTarget,
+ fn archSubArchName(arch: builtin.Arch) []const u8 {
+ return switch (arch) {
+ builtin.Arch.arm => |sub| @tagName(sub),
+ builtin.Arch.armeb => |sub| @tagName(sub),
+ builtin.Arch.thumb => |sub| @tagName(sub),
+ builtin.Arch.thumbeb => |sub| @tagName(sub),
+ builtin.Arch.aarch64 => |sub| @tagName(sub),
+ builtin.Arch.aarch64_be => |sub| @tagName(sub),
+ builtin.Arch.kalimba => |sub| @tagName(sub),
+ else => "",
+ };
+ }
+
+ pub fn subArchName(self: Target) []const u8 {
+ switch (self) {
+ Target.Native => return archSubArchName(builtin.arch),
+ Target.Cross => |cross| return archSubArchName(cross.arch),
+ }
+ }
+
pub fn oFileExt(self: *const Target) []const u8 {
- const environ = switch (self.*) {
- Target.Native => builtin.environ,
- Target.Cross => |t| t.environ,
+ const abi = switch (self.*) {
+ Target.Native => builtin.abi,
+ Target.Cross => |t| t.abi,
};
- return switch (environ) {
- builtin.Environ.msvc => ".obj",
+ return switch (abi) {
+ builtin.Abi.msvc => ".obj",
else => ".o",
};
}
@@ -978,12 +998,17 @@ pub const LibExeObjStep = struct {
}
}
- pub fn setTarget(self: *LibExeObjStep, target_arch: builtin.Arch, target_os: builtin.Os, target_environ: builtin.Environ) void {
+ pub fn setTarget(
+ self: *LibExeObjStep,
+ target_arch: builtin.Arch,
+ target_os: builtin.Os,
+ target_abi: builtin.Abi,
+ ) void {
self.target = Target{
.Cross = CrossTarget{
.arch = target_arch,
.os = target_os,
- .environ = target_environ,
+ .abi = target_abi,
},
};
self.computeOutFileNames();
@@ -1296,14 +1321,16 @@ pub const LibExeObjStep = struct {
switch (self.target) {
Target.Native => {},
Target.Cross => |cross_target| {
- zig_args.append("--target-arch") catch unreachable;
- zig_args.append(@tagName(cross_target.arch)) catch unreachable;
-
- zig_args.append("--target-os") catch unreachable;
- zig_args.append(@tagName(cross_target.os)) catch unreachable;
-
- zig_args.append("--target-environ") catch unreachable;
- zig_args.append(@tagName(cross_target.environ)) catch unreachable;
+ const triple = builder.fmt(
+ "{}{}-{}-{}",
+ @tagName(cross_target.arch),
+ Target.archSubArchName(cross_target.arch),
+ @tagName(cross_target.os),
+ @tagName(cross_target.abi),
+ );
+
+ try zig_args.append("-target");
+ try zig_args.append(triple);
},
}
diff --git a/std/fmt/index.zig b/std/fmt/index.zig
index f006dfdbdc..4f864b3662 100644
--- a/std/fmt/index.zig
+++ b/std/fmt/index.zig
@@ -1118,7 +1118,7 @@ test "fmt.format" {
const result = try bufPrint(buf1[0..], "f64: {}\n", math.nan_f64);
testing.expect(mem.eql(u8, result, "f64: nan\n"));
}
- if (builtin.arch != builtin.Arch.armv8) {
+ if (builtin.arch != builtin.Arch.arm) {
// negative nan is not defined by IEE 754,
// and ARM thus normalizes it to positive nan
var buf1: [32]u8 = undefined;
diff --git a/std/os/linux/index.zig b/std/os/linux/index.zig
index ec90755164..b78c1b3da5 100644
--- a/std/os/linux/index.zig
+++ b/std/os/linux/index.zig
@@ -6,7 +6,7 @@ const vdso = @import("vdso.zig");
pub use switch (builtin.arch) {
builtin.Arch.x86_64 => @import("x86_64.zig"),
builtin.Arch.i386 => @import("i386.zig"),
- builtin.Arch.aarch64v8 => @import("arm64.zig"),
+ builtin.Arch.aarch64 => @import("arm64.zig"),
else => @compileError("unsupported arch"),
};
pub use @import("errno.zig");
diff --git a/std/special/bootstrap.zig b/std/special/bootstrap.zig
index 1192d7e46f..950fd5cbb9 100644
--- a/std/special/bootstrap.zig
+++ b/std/special/bootstrap.zig
@@ -31,7 +31,7 @@ nakedcc fn _start() noreturn {
: [argc] "=r" (-> [*]usize)
);
},
- builtin.Arch.aarch64v8 => {
+ builtin.Arch.aarch64, builtin.Arch.aarch64_be => {
argc_ptr = asm ("mov %[argc], sp"
: [argc] "=r" (-> [*]usize)
);
diff --git a/std/special/compiler_rt/index.zig b/std/special/compiler_rt/index.zig
index 6715df1805..7657ce6118 100644
--- a/std/special/compiler_rt/index.zig
+++ b/std/special/compiler_rt/index.zig
@@ -184,60 +184,10 @@ const is_arm_64 = switch (builtin.arch) {
};
const is_arm_arch = switch (builtin.arch) {
- builtin.Arch.armv8_3a,
- builtin.Arch.armv8_2a,
- builtin.Arch.armv8_1a,
- builtin.Arch.armv8,
- builtin.Arch.armv8r,
- builtin.Arch.armv8m_baseline,
- builtin.Arch.armv8m_mainline,
- builtin.Arch.armv7,
- builtin.Arch.armv7em,
- builtin.Arch.armv7m,
- builtin.Arch.armv7s,
- builtin.Arch.armv7k,
- builtin.Arch.armv7ve,
- builtin.Arch.armv6,
- builtin.Arch.armv6m,
- builtin.Arch.armv6k,
- builtin.Arch.armv6t2,
- builtin.Arch.armv5,
- builtin.Arch.armv5te,
- builtin.Arch.armv4t,
- builtin.Arch.armebv8_3a,
- builtin.Arch.armebv8_2a,
- builtin.Arch.armebv8_1a,
- builtin.Arch.armebv8,
- builtin.Arch.armebv8r,
- builtin.Arch.armebv8m_baseline,
- builtin.Arch.armebv8m_mainline,
- builtin.Arch.armebv7,
- builtin.Arch.armebv7em,
- builtin.Arch.armebv7m,
- builtin.Arch.armebv7s,
- builtin.Arch.armebv7k,
- builtin.Arch.armebv7ve,
- builtin.Arch.armebv6,
- builtin.Arch.armebv6m,
- builtin.Arch.armebv6k,
- builtin.Arch.armebv6t2,
- builtin.Arch.armebv5,
- builtin.Arch.armebv5te,
- builtin.Arch.armebv4t,
- builtin.Arch.aarch64v8_3a,
- builtin.Arch.aarch64v8_2a,
- builtin.Arch.aarch64v8_1a,
- builtin.Arch.aarch64v8,
- builtin.Arch.aarch64v8r,
- builtin.Arch.aarch64v8m_baseline,
- builtin.Arch.aarch64v8m_mainline,
- builtin.Arch.aarch64_bev8_3a,
- builtin.Arch.aarch64_bev8_2a,
- builtin.Arch.aarch64_bev8_1a,
- builtin.Arch.aarch64_bev8,
- builtin.Arch.aarch64_bev8r,
- builtin.Arch.aarch64_bev8m_baseline,
- builtin.Arch.aarch64_bev8m_mainline,
+ builtin.Arch.arm,
+ builtin.Arch.armeb,
+ builtin.Arch.aarch64,
+ builtin.Arch.aarch64_be,
builtin.Arch.thumb,
builtin.Arch.thumbeb,
=> true,