mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
Merge pull request #24629 from alexrp/android-requires-libc
`std.Target`: require libc for Android API levels prior to 29
This commit is contained in:
commit
163e9ce7d9
@ -697,57 +697,6 @@ pub const Os = struct {
|
|||||||
=> |field| @field(os.version_range, @tagName(field)).isAtLeast(ver),
|
=> |field| @field(os.version_range, @tagName(field)).isAtLeast(ver),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// On Darwin, we always link libSystem which contains libc.
|
|
||||||
/// Similarly on FreeBSD and NetBSD we always link system libc
|
|
||||||
/// since this is the stable syscall interface.
|
|
||||||
pub fn requiresLibC(os: Os) bool {
|
|
||||||
return switch (os.tag) {
|
|
||||||
.aix,
|
|
||||||
.driverkit,
|
|
||||||
.macos,
|
|
||||||
.ios,
|
|
||||||
.tvos,
|
|
||||||
.watchos,
|
|
||||||
.visionos,
|
|
||||||
.dragonfly,
|
|
||||||
.openbsd,
|
|
||||||
.haiku,
|
|
||||||
.solaris,
|
|
||||||
.illumos,
|
|
||||||
.serenity,
|
|
||||||
=> true,
|
|
||||||
|
|
||||||
.linux,
|
|
||||||
.windows,
|
|
||||||
.freebsd,
|
|
||||||
.netbsd,
|
|
||||||
.freestanding,
|
|
||||||
.fuchsia,
|
|
||||||
.ps3,
|
|
||||||
.zos,
|
|
||||||
.rtems,
|
|
||||||
.cuda,
|
|
||||||
.nvcl,
|
|
||||||
.amdhsa,
|
|
||||||
.ps4,
|
|
||||||
.ps5,
|
|
||||||
.mesa3d,
|
|
||||||
.contiki,
|
|
||||||
.amdpal,
|
|
||||||
.hermit,
|
|
||||||
.hurd,
|
|
||||||
.wasi,
|
|
||||||
.emscripten,
|
|
||||||
.uefi,
|
|
||||||
.opencl,
|
|
||||||
.opengl,
|
|
||||||
.vulkan,
|
|
||||||
.plan9,
|
|
||||||
.other,
|
|
||||||
=> false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const aarch64 = @import("Target/aarch64.zig");
|
pub const aarch64 = @import("Target/aarch64.zig");
|
||||||
@ -2055,6 +2004,61 @@ pub inline fn isWasiLibC(target: *const Target) bool {
|
|||||||
return target.os.tag == .wasi and target.abi.isMusl();
|
return target.os.tag == .wasi and target.abi.isMusl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Does this target require linking libc? This may be the case if the target has an unstable
|
||||||
|
/// syscall interface, for example.
|
||||||
|
pub fn requiresLibC(target: *const Target) bool {
|
||||||
|
return switch (target.os.tag) {
|
||||||
|
.aix,
|
||||||
|
.driverkit,
|
||||||
|
.macos,
|
||||||
|
.ios,
|
||||||
|
.tvos,
|
||||||
|
.watchos,
|
||||||
|
.visionos,
|
||||||
|
.dragonfly,
|
||||||
|
.openbsd,
|
||||||
|
.haiku,
|
||||||
|
.solaris,
|
||||||
|
.illumos,
|
||||||
|
.serenity,
|
||||||
|
=> true,
|
||||||
|
|
||||||
|
// Android API levels prior to 29 did not have native TLS support. For these API levels, TLS
|
||||||
|
// is implemented through calls to `__emutls_get_address`. We provide this function in
|
||||||
|
// compiler-rt, but it's implemented by way of `pthread_key_create` et al, so linking libc
|
||||||
|
// is required.
|
||||||
|
.linux => target.abi.isAndroid() and target.os.version_range.linux.android < 29,
|
||||||
|
|
||||||
|
.windows,
|
||||||
|
.freebsd,
|
||||||
|
.netbsd,
|
||||||
|
.freestanding,
|
||||||
|
.fuchsia,
|
||||||
|
.ps3,
|
||||||
|
.zos,
|
||||||
|
.rtems,
|
||||||
|
.cuda,
|
||||||
|
.nvcl,
|
||||||
|
.amdhsa,
|
||||||
|
.ps4,
|
||||||
|
.ps5,
|
||||||
|
.mesa3d,
|
||||||
|
.contiki,
|
||||||
|
.amdpal,
|
||||||
|
.hermit,
|
||||||
|
.hurd,
|
||||||
|
.wasi,
|
||||||
|
.emscripten,
|
||||||
|
.uefi,
|
||||||
|
.opencl,
|
||||||
|
.opengl,
|
||||||
|
.vulkan,
|
||||||
|
.plan9,
|
||||||
|
.other,
|
||||||
|
=> false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
pub const DynamicLinker = struct {
|
pub const DynamicLinker = struct {
|
||||||
/// Contains the memory used to store the dynamic linker path. This field
|
/// Contains the memory used to store the dynamic linker path. This field
|
||||||
/// should not be used directly. See `get` and `set`. This field exists so
|
/// should not be used directly. See `get` and `set`. This field exists so
|
||||||
|
|||||||
@ -20,7 +20,7 @@ pub fn cannotDynamicLink(target: *const std.Target) bool {
|
|||||||
/// Similarly on FreeBSD and NetBSD we always link system libc
|
/// Similarly on FreeBSD and NetBSD we always link system libc
|
||||||
/// since this is the stable syscall interface.
|
/// since this is the stable syscall interface.
|
||||||
pub fn osRequiresLibC(target: *const std.Target) bool {
|
pub fn osRequiresLibC(target: *const std.Target) bool {
|
||||||
return target.os.requiresLibC();
|
return target.requiresLibC();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.builtin.LinkMode) bool {
|
pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.builtin.LinkMode) bool {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user