aboutsummaryrefslogtreecommitdiff
path: root/src/link.cpp
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2018-06-10 04:39:22 +0200
committerAndrew Kelley <superjoe30@gmail.com>2018-06-09 22:39:22 -0400
commitd464b2532200de3778ac7362e701791a11150d55 (patch)
tree0b78986c512fac465bd2f045ef72ff745af93354 /src/link.cpp
parent7a9635555b5ddc681134ebe0e0e9f4f373ac5025 (diff)
downloadzig-d464b2532200de3778ac7362e701791a11150d55.tar.gz
zig-d464b2532200de3778ac7362e701791a11150d55.zip
support `--target-arch wasm32` (#1094)
Add wasm32 support to the build-obj, build-exe and build-lib commands of the stage 1 compiler. Wasm64 should work transparently once it's supported in upstream LLVM. To export a function: // lib.zig - for exposition, not necessary for this example pub use @import("add.zig"); // add.zig export fn add(a: i32, b: i32) i32 { return a + b; } To import a function: // cube.zig extern fn square(x: i32) i32; export fn cube(x: i32) i32 { return x * square(x); }
Diffstat (limited to 'src/link.cpp')
-rw-r--r--src/link.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/link.cpp b/src/link.cpp
index d454d77aae..d2925cb5a8 100644
--- a/src/link.cpp
+++ b/src/link.cpp
@@ -391,6 +391,19 @@ static void construct_linker_job_elf(LinkJob *lj) {
}
}
+static void construct_linker_job_wasm(LinkJob *lj) {
+ CodeGen *g = lj->codegen;
+
+ lj->args.append("--relocatable"); // So lld doesn't look for _start.
+ lj->args.append("-o");
+ lj->args.append(buf_ptr(&lj->out_file));
+
+ // .o files
+ for (size_t i = 0; i < g->link_objects.length; i += 1) {
+ lj->args.append((const char *)buf_ptr(g->link_objects.at(i)));
+ }
+}
+
//static bool is_target_cyg_mingw(const ZigTarget *target) {
// return (target->os == ZigLLVM_Win32 && target->env_type == ZigLLVM_Cygnus) ||
// (target->os == ZigLLVM_Win32 && target->env_type == ZigLLVM_GNU);
@@ -924,7 +937,7 @@ static void construct_linker_job(LinkJob *lj) {
case ZigLLVM_MachO:
return construct_linker_job_macho(lj);
case ZigLLVM_Wasm:
- zig_panic("TODO link wasm");
+ return construct_linker_job_wasm(lj);
}
}