diff options
| author | Vexu <15308111+Vexu@users.noreply.github.com> | 2019-08-16 17:40:20 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-16 17:40:20 +0300 |
| commit | 92a81252cbd8e2576930a0575e939ed4c26f3c29 (patch) | |
| tree | 84a63ec3118a07e7116200b39616c82c43451ccb /src/link.cpp | |
| parent | 34d2a1465c1b4869b70df07d735b0364506d484d (diff) | |
| parent | 49c88e23af6fe1dc895544f91231cc3b53110c8e (diff) | |
| download | zig-92a81252cbd8e2576930a0575e939ed4c26f3c29.tar.gz zig-92a81252cbd8e2576930a0575e939ed4c26f3c29.zip | |
Merge branch 'master' into fmt-comment-fix
Diffstat (limited to 'src/link.cpp')
| -rw-r--r-- | src/link.cpp | 51 |
1 files changed, 15 insertions, 36 deletions
diff --git a/src/link.cpp b/src/link.cpp index 4a17ec892c..44b3abaa90 100644 --- a/src/link.cpp +++ b/src/link.cpp @@ -914,39 +914,9 @@ static const char *glibc_start_asm_path(CodeGen *parent, const char *file) { return buf_ptr(&result); } -static const char *musl_arch_name(const ZigTarget *target) { - switch (target->arch) { - case ZigLLVM_aarch64: - case ZigLLVM_aarch64_be: - return "aarch64"; - case ZigLLVM_arm: - case ZigLLVM_armeb: - return "arm"; - case ZigLLVM_mips: - case ZigLLVM_mipsel: - return "mips"; - case ZigLLVM_mips64el: - case ZigLLVM_mips64: - return "mips64"; - case ZigLLVM_ppc: - return "powerpc"; - case ZigLLVM_ppc64: - case ZigLLVM_ppc64le: - return "powerpc64"; - case ZigLLVM_systemz: - return "s390x"; - case ZigLLVM_x86: - return "i386"; - case ZigLLVM_x86_64: - return "x86_64"; - default: - zig_unreachable(); - } -} - static const char *musl_start_asm_path(CodeGen *parent, const char *file) { Buf *result = buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "crt" OS_SEP "%s" OS_SEP "%s", - buf_ptr(parent->zig_lib_dir), musl_arch_name(parent->zig_target), file); + buf_ptr(parent->zig_lib_dir), target_arch_musl_name(parent->zig_target->arch), file); return buf_ptr(result); } @@ -961,18 +931,22 @@ static void musl_add_cc_args(CodeGen *parent, CFile *c_file, bool want_O3) { c_file->args.append("-I"); c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "arch" OS_SEP "%s", - buf_ptr(parent->zig_lib_dir), musl_arch_name(parent->zig_target)))); + buf_ptr(parent->zig_lib_dir), target_arch_musl_name(parent->zig_target->arch)))); c_file->args.append("-I"); c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "arch" OS_SEP "generic", buf_ptr(parent->zig_lib_dir)))); c_file->args.append("-I"); + c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "src" OS_SEP "include", + buf_ptr(parent->zig_lib_dir)))); + + c_file->args.append("-I"); c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "src" OS_SEP "internal", buf_ptr(parent->zig_lib_dir)))); c_file->args.append("-I"); - c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "src" OS_SEP "include", + c_file->args.append(buf_ptr(buf_sprintf("%s" OS_SEP "libc" OS_SEP "musl" OS_SEP "include", buf_ptr(parent->zig_lib_dir)))); c_file->args.append("-I"); @@ -1012,6 +986,7 @@ static const char *musl_arch_names[] = { "or1k", "powerpc", "powerpc64", + "riscv64", "s390x", "sh", "x32", @@ -1039,7 +1014,7 @@ static const char *build_musl(CodeGen *parent) { MuslSrcO3, }; - const char *target_musl_arch_name = musl_arch_name(parent->zig_target); + const char *target_musl_arch_name = target_arch_musl_name(parent->zig_target->arch); HashMap<Buf *, MuslSrc, buf_hash, buf_eql_buf> source_table = {}; source_table.init(1800); @@ -1800,11 +1775,15 @@ static void construct_linker_job_elf(LinkJob *lj) { lj->args.append("--no-as-needed"); } } else if (target_is_glibc(g->zig_target)) { - lj->args.append(build_libunwind(g)); + if (target_supports_libunwind(g->zig_target)) { + lj->args.append(build_libunwind(g)); + } add_glibc_libs(lj); lj->args.append(get_libc_crt_file(g, "libc_nonshared.a")); } else if (target_is_musl(g->zig_target)) { - lj->args.append(build_libunwind(g)); + if (target_supports_libunwind(g->zig_target)) { + lj->args.append(build_libunwind(g)); + } lj->args.append(build_musl(g)); } else { zig_unreachable(); |
