diff options
| author | Ben Noordhuis <info@bnoordhuis.nl> | 2018-06-10 04:39:22 +0200 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-06-09 22:39:22 -0400 |
| commit | d464b2532200de3778ac7362e701791a11150d55 (patch) | |
| tree | 0b78986c512fac465bd2f045ef72ff745af93354 /src/link.cpp | |
| parent | 7a9635555b5ddc681134ebe0e0e9f4f373ac5025 (diff) | |
| download | zig-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.cpp | 15 |
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); } } |
