aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-16 14:31:54 -0400
committerGitHub <noreply@github.com>2019-05-16 14:31:54 -0400
commit8468ff0fe1466d8b38aff1d265d953b5cc8fefe6 (patch)
tree584a749d0d79d662f12454b0e2179dde12ad3056 /src
parent07d0aee11a5725dc22eeaa116fb59c40a1a7c99c (diff)
parent978fab817caacb7bb3ba96fe3ec08bab1c78c1da (diff)
downloadzig-8468ff0fe1466d8b38aff1d265d953b5cc8fefe6.tar.gz
zig-8468ff0fe1466d8b38aff1d265d953b5cc8fefe6.zip
Merge pull request #2507 from ziglang/wasm-libs
improvements to build-lib use case of WebAssembly
Diffstat (limited to 'src')
-rw-r--r--src/codegen.cpp2
-rw-r--r--src/link.cpp25
-rw-r--r--src/target.cpp7
3 files changed, 17 insertions, 17 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index ecdee4e9e5..7e7c1432e9 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -8548,7 +8548,7 @@ static void gen_root_source(CodeGen *g) {
}
report_errors_and_maybe_exit(g);
- if (!g->is_test_build && g->zig_target->os != OsFreestanding &&
+ if (!g->is_test_build && (g->zig_target->os != OsFreestanding || target_is_wasm(g->zig_target)) &&
g->zig_target->os != OsUefi &&
!g->have_c_main && !g->have_winmain && !g->have_winmain_crt_startup &&
((g->have_pub_main && g->out_type == OutTypeObj) || g->out_type == OutTypeExe))
diff --git a/src/link.cpp b/src/link.cpp
index 538d663b03..3585f675a5 100644
--- a/src/link.cpp
+++ b/src/link.cpp
@@ -800,19 +800,18 @@ static Buf *build_a_raw(CodeGen *parent_gen, const char *aname, Buf *full_path,
return &child_gen->output_file_path;
}
-static Buf *build_a(CodeGen *parent_gen, const char *aname) {
- Buf *source_basename = buf_sprintf("%s.zig", aname);
+static Buf *build_compiler_rt(CodeGen *parent_gen, OutType child_out_type) {
Buf *full_path = buf_alloc();
- os_path_join(parent_gen->zig_std_special_dir, source_basename, full_path);
+ os_path_join(parent_gen->zig_std_special_dir, buf_create_from_str("compiler_rt.zig"), full_path);
- return build_a_raw(parent_gen, aname, full_path, OutTypeLib);
+ return build_a_raw(parent_gen, "compiler_rt", full_path, child_out_type);
}
-static Buf *build_compiler_rt(CodeGen *parent_gen, OutType child_out_type) {
+static Buf *build_c(CodeGen *parent_gen, OutType child_out_type) {
Buf *full_path = buf_alloc();
- os_path_join(parent_gen->zig_std_special_dir, buf_create_from_str("compiler_rt.zig"), full_path);
+ os_path_join(parent_gen->zig_std_special_dir, buf_create_from_str("c.zig"), full_path);
- return build_a_raw(parent_gen, "compiler_rt", full_path, child_out_type);
+ return build_a_raw(parent_gen, "c", full_path, child_out_type);
}
static const char *get_darwin_arch_string(const ZigTarget *t) {
@@ -1003,7 +1002,7 @@ static void construct_linker_job_elf(LinkJob *lj) {
if (!g->is_dummy_so && (g->out_type == OutTypeExe || is_dyn_lib)) {
if (g->libc_link_lib == nullptr) {
- Buf *libc_a_path = build_a(g, "c");
+ Buf *libc_a_path = build_c(g, OutTypeLib);
lj->args.append(buf_ptr(libc_a_path));
}
@@ -1118,10 +1117,10 @@ static void construct_linker_job_wasm(LinkJob *lj) {
}
if (g->out_type != OutTypeObj) {
- Buf *libc_a_path = build_a(g, "c");
- lj->args.append(buf_ptr(libc_a_path));
+ Buf *libc_o_path = build_c(g, OutTypeObj);
+ lj->args.append(buf_ptr(libc_o_path));
- Buf *compiler_rt_o_path = build_compiler_rt(g, OutTypeLib);
+ Buf *compiler_rt_o_path = build_compiler_rt(g, OutTypeObj);
lj->args.append(buf_ptr(compiler_rt_o_path));
}
}
@@ -1360,7 +1359,7 @@ static void construct_linker_job_coff(LinkJob *lj) {
if (g->out_type == OutTypeExe || (g->out_type == OutTypeLib && g->is_dynamic)) {
if (g->libc_link_lib == nullptr && !g->is_dummy_so) {
- Buf *libc_a_path = build_a(g, "c");
+ Buf *libc_a_path = build_c(g, OutTypeLib);
lj->args.append(buf_ptr(libc_a_path));
}
@@ -1687,7 +1686,7 @@ void codegen_link(CodeGen *g) {
lj.args.append("-r");
}
- if (g->out_type == OutTypeLib && !g->is_dynamic) {
+ if (g->out_type == OutTypeLib && !g->is_dynamic && !target_is_wasm(g->zig_target)) {
ZigList<const char *> file_names = {};
for (size_t i = 0; i < g->link_objects.length; i += 1) {
file_names.append(buf_ptr(g->link_objects.at(i)));
diff --git a/src/target.cpp b/src/target.cpp
index 7a3459af1a..630096204b 100644
--- a/src/target.cpp
+++ b/src/target.cpp
@@ -947,8 +947,6 @@ bool target_allows_addr_zero(const ZigTarget *target) {
const char *target_o_file_ext(const ZigTarget *target) {
if (target->abi == ZigLLVM_MSVC || target->os == OsWindows || target->os == OsUefi) {
return ".obj";
- } else if (target_is_wasm(target)) {
- return ".wasm";
} else {
return ".o";
}
@@ -975,7 +973,7 @@ const char *target_exe_file_ext(const ZigTarget *target) {
}
const char *target_lib_file_prefix(const ZigTarget *target) {
- if (target->os == OsWindows || target->os == OsUefi) {
+ if (target->os == OsWindows || target->os == OsUefi || target_is_wasm(target)) {
return "";
} else {
return "lib";
@@ -985,6 +983,9 @@ const char *target_lib_file_prefix(const ZigTarget *target) {
const char *target_lib_file_ext(const ZigTarget *target, bool is_static,
size_t version_major, size_t version_minor, size_t version_patch)
{
+ if (target_is_wasm(target)) {
+ return ".wasm";
+ }
if (target->os == OsWindows || target->os == OsUefi) {
if (is_static) {
return ".lib";