4616af0ca4
* re-introduce `std.build.Target` which is distinct from `std.Target`. `std.build.Target` wraps `std.Target` so that it can be annotated as "the native target" or an explicitly specified target. * `std.Target.Os` is moved to `std.Target.Os.Tag`. The former is now a struct which has the tag as well as version range information. * `std.elf` gains some more ELF header constants. * `std.Target.parse` gains the ability to parse operating system version ranges as well as glibc version. * Added `std.Target.isGnuLibC()`. * self-hosted dynamic linker detection and glibc version detection. This also adds the improved logic using `/usr/bin/env` rather than invoking the system C compiler to find the dynamic linker when zig is statically linked. Related: #2084 Note: this `/usr/bin/env` code is work-in-progress. * `-target-glibc` CLI option is removed in favor of the new `-target` syntax. Example: `-target x86_64-linux-gnu.2.27` closes #1907
37 lines
1.1 KiB
Zig
37 lines
1.1 KiB
Zig
const std = @import("std");
|
|
const Target = std.Target;
|
|
const llvm = @import("llvm.zig");
|
|
|
|
pub fn getDarwinArchString(self: Target) [:0]const u8 {
|
|
const arch = self.getArch();
|
|
switch (arch) {
|
|
.aarch64 => return "arm64",
|
|
.thumb,
|
|
.arm,
|
|
=> return "arm",
|
|
.powerpc => return "ppc",
|
|
.powerpc64 => return "ppc64",
|
|
.powerpc64le => return "ppc64le",
|
|
// @tagName should be able to return sentinel terminated slice
|
|
else => @panic("TODO https://github.com/ziglang/zig/issues/3779"), //return @tagName(arch),
|
|
}
|
|
}
|
|
|
|
pub fn llvmTargetFromTriple(triple: std.Buffer) !*llvm.Target {
|
|
var result: *llvm.Target = undefined;
|
|
var err_msg: [*:0]u8 = undefined;
|
|
if (llvm.GetTargetFromTriple(triple.toSlice(), &result, &err_msg) != 0) {
|
|
std.debug.warn("triple: {s} error: {s}\n", .{ triple.toSlice(), err_msg });
|
|
return error.UnsupportedTarget;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
pub fn initializeAllTargets() void {
|
|
llvm.InitializeAllTargets();
|
|
llvm.InitializeAllTargetInfos();
|
|
llvm.InitializeAllTargetMCs();
|
|
llvm.InitializeAllAsmPrinters();
|
|
llvm.InitializeAllAsmParsers();
|
|
}
|