diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-02-26 15:51:32 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-02-26 15:58:10 -0500 |
| commit | ade10387a583351fe597b58c4c9ceb97d959adf5 (patch) | |
| tree | 5e508bc243ec6e65c1d2a11908d7e28bcf0b8c48 /std | |
| parent | 1ec1097bd389b9af1b3e40d9edbc4c1c0b65f6a1 (diff) | |
| download | zig-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.zig | 59 | ||||
| -rw-r--r-- | std/fmt/index.zig | 2 | ||||
| -rw-r--r-- | std/os/linux/index.zig | 2 | ||||
| -rw-r--r-- | std/special/bootstrap.zig | 2 | ||||
| -rw-r--r-- | std/special/compiler_rt/index.zig | 58 |
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, |
