aboutsummaryrefslogtreecommitdiff
path: root/src/link.cpp
diff options
context:
space:
mode:
authorVexu <15308111+Vexu@users.noreply.github.com>2019-08-16 17:40:20 +0300
committerGitHub <noreply@github.com>2019-08-16 17:40:20 +0300
commit92a81252cbd8e2576930a0575e939ed4c26f3c29 (patch)
tree84a63ec3118a07e7116200b39616c82c43451ccb /src/link.cpp
parent34d2a1465c1b4869b70df07d735b0364506d484d (diff)
parent49c88e23af6fe1dc895544f91231cc3b53110c8e (diff)
downloadzig-92a81252cbd8e2576930a0575e939ed4c26f3c29.tar.gz
zig-92a81252cbd8e2576930a0575e939ed4c26f3c29.zip
Merge branch 'master' into fmt-comment-fix
Diffstat (limited to 'src/link.cpp')
-rw-r--r--src/link.cpp51
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();