aboutsummaryrefslogtreecommitdiff
path: root/src/target.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-02-17 15:23:59 -0500
committerAndrew Kelley <andrew@ziglang.org>2020-02-17 15:23:59 -0500
commit2f9c5c0644dd516ec0d96f33333a35e6b4deea91 (patch)
tree852e7d7273da760a3a36ea551343f5e01bfe8f5a /src/target.cpp
parentc784c52819e505620fb1fcb48e59a48c6d8f487e (diff)
downloadzig-2f9c5c0644dd516ec0d96f33333a35e6b4deea91.tar.gz
zig-2f9c5c0644dd516ec0d96f33333a35e6b4deea91.zip
self-host dynamic linker detection
Diffstat (limited to 'src/target.cpp')
-rw-r--r--src/target.cpp203
1 files changed, 0 insertions, 203 deletions
diff --git a/src/target.cpp b/src/target.cpp
index b8979d0214..209b42f3c9 100644
--- a/src/target.cpp
+++ b/src/target.cpp
@@ -1204,213 +1204,10 @@ const char *target_lib_file_ext(const ZigTarget *target, bool is_static,
}
}
-enum FloatAbi {
- FloatAbiHard,
- FloatAbiSoft,
- FloatAbiSoftFp,
-};
-
-static FloatAbi get_float_abi(const ZigTarget *target) {
- const ZigLLVM_EnvironmentType env = target->abi;
- if (env == ZigLLVM_GNUEABIHF ||
- env == ZigLLVM_EABIHF ||
- env == ZigLLVM_MuslEABIHF)
- {
- return FloatAbiHard;
- } else {
- return FloatAbiSoft;
- }
-}
-
-static bool is_64_bit(ZigLLVM_ArchType arch) {
- return target_arch_pointer_bit_width(arch) == 64;
-}
-
bool target_is_android(const ZigTarget *target) {
return target->abi == ZigLLVM_Android;
}
-const char *target_dynamic_linker(const ZigTarget *target) {
- if (target_is_android(target)) {
- return is_64_bit(target->arch) ? "/system/bin/linker64" : "/system/bin/linker";
- }
-
- if (target_is_musl(target)) {
- Buf buf = BUF_INIT;
- buf_init_from_str(&buf, "/lib/ld-musl-");
- bool is_arm = false;
- switch (target->arch) {
- case ZigLLVM_arm:
- case ZigLLVM_thumb:
- buf_append_str(&buf, "arm");
- is_arm = true;
- break;
- case ZigLLVM_armeb:
- case ZigLLVM_thumbeb:
- buf_append_str(&buf, "armeb");
- is_arm = true;
- break;
- default:
- buf_append_str(&buf, target_arch_name(target->arch));
- }
- if (is_arm && get_float_abi(target) == FloatAbiHard) {
- buf_append_str(&buf, "hf");
- }
- buf_append_str(&buf, ".so.1");
- return buf_ptr(&buf);
- }
-
- switch (target->os) {
- case OsFreeBSD:
- return "/libexec/ld-elf.so.1";
- case OsNetBSD:
- return "/libexec/ld.elf_so";
- case OsDragonFly:
- return "/libexec/ld-elf.so.2";
- case OsLinux: {
- const ZigLLVM_EnvironmentType abi = target->abi;
- switch (target->arch) {
- case ZigLLVM_UnknownArch:
- zig_unreachable();
- case ZigLLVM_x86:
- case ZigLLVM_sparc:
- case ZigLLVM_sparcel:
- return "/lib/ld-linux.so.2";
-
- case ZigLLVM_aarch64:
- return "/lib/ld-linux-aarch64.so.1";
-
- case ZigLLVM_aarch64_be:
- return "/lib/ld-linux-aarch64_be.so.1";
-
- case ZigLLVM_aarch64_32:
- return "/lib/ld-linux-aarch64_32.so.1";
-
- case ZigLLVM_arm:
- case ZigLLVM_thumb:
- if (get_float_abi(target) == FloatAbiHard) {
- return "/lib/ld-linux-armhf.so.3";
- } else {
- return "/lib/ld-linux.so.3";
- }
-
- case ZigLLVM_armeb:
- case ZigLLVM_thumbeb:
- if (get_float_abi(target) == FloatAbiHard) {
- return "/lib/ld-linux-armhf.so.3";
- } else {
- return "/lib/ld-linux.so.3";
- }
-
- case ZigLLVM_mips:
- case ZigLLVM_mipsel:
- case ZigLLVM_mips64:
- case ZigLLVM_mips64el:
- zig_panic("TODO implement target_dynamic_linker for mips");
-
- case ZigLLVM_ppc:
- return "/lib/ld.so.1";
-
- case ZigLLVM_ppc64:
- return "/lib64/ld64.so.2";
-
- case ZigLLVM_ppc64le:
- return "/lib64/ld64.so.2";
-
- case ZigLLVM_systemz:
- return "/lib64/ld64.so.1";
-
- case ZigLLVM_sparcv9:
- return "/lib64/ld-linux.so.2";
-
- case ZigLLVM_x86_64:
- if (abi == ZigLLVM_GNUX32) {
- return "/libx32/ld-linux-x32.so.2";
- }
- if (abi == ZigLLVM_Musl || abi == ZigLLVM_MuslEABI || abi == ZigLLVM_MuslEABIHF) {
- return "/lib/ld-musl-x86_64.so.1";
- }
- return "/lib64/ld-linux-x86-64.so.2";
-
- case ZigLLVM_wasm32:
- case ZigLLVM_wasm64:
- return nullptr;
-
- case ZigLLVM_riscv32:
- return "/lib/ld-linux-riscv32-ilp32.so.1";
- case ZigLLVM_riscv64:
- return "/lib/ld-linux-riscv64-lp64.so.1";
-
- case ZigLLVM_arc:
- case ZigLLVM_avr:
- case ZigLLVM_bpfel:
- case ZigLLVM_bpfeb:
- case ZigLLVM_hexagon:
- case ZigLLVM_msp430:
- case ZigLLVM_r600:
- case ZigLLVM_amdgcn:
- case ZigLLVM_tce:
- case ZigLLVM_tcele:
- case ZigLLVM_xcore:
- case ZigLLVM_nvptx:
- case ZigLLVM_nvptx64:
- case ZigLLVM_le32:
- case ZigLLVM_le64:
- case ZigLLVM_amdil:
- case ZigLLVM_amdil64:
- case ZigLLVM_hsail:
- case ZigLLVM_hsail64:
- case ZigLLVM_spir:
- case ZigLLVM_spir64:
- case ZigLLVM_kalimba:
- case ZigLLVM_shave:
- case ZigLLVM_lanai:
- case ZigLLVM_renderscript32:
- case ZigLLVM_renderscript64:
- zig_panic("TODO implement target_dynamic_linker for this arch");
- }
- zig_unreachable();
- }
- case OsFreestanding:
- case OsIOS:
- case OsTvOS:
- case OsWatchOS:
- case OsMacOSX:
- case OsUefi:
- case OsWindows:
- case OsEmscripten:
- case OsOther:
- return nullptr;
-
- case OsAnanas:
- case OsCloudABI:
- case OsFuchsia:
- case OsKFreeBSD:
- case OsLv2:
- case OsOpenBSD:
- case OsSolaris:
- case OsHaiku:
- case OsMinix:
- case OsRTEMS:
- case OsNaCl:
- case OsCNK:
- case OsAIX:
- case OsCUDA:
- case OsNVCL:
- case OsAMDHSA:
- case OsPS4:
- case OsELFIAMCU:
- case OsMesa3D:
- case OsContiki:
- case OsAMDPAL:
- case OsHermitCore:
- case OsHurd:
- case OsWASI:
- zig_panic("TODO implement target_dynamic_linker for this OS");
- }
- zig_unreachable();
-}
-
bool target_can_exec(const ZigTarget *host_target, const ZigTarget *guest_target) {
assert(host_target != nullptr);