|
1 |
| -# In the first container we want to assemble the `wasi-sysroot` by compiling it |
2 |
| -# from source. This requires a clang 8.0+ compiler with enough wasm support and |
3 |
| -# then we're just running a standard `make` inside of what we clone. |
4 |
| -FROM ubuntu:18.04 as wasi-sysroot |
| 1 | +FROM ubuntu:19.10 |
5 | 2 |
|
6 | 3 | RUN apt-get update && \
|
7 | 4 | apt-get install -y --no-install-recommends \
|
8 | 5 | ca-certificates \
|
9 | 6 | clang \
|
10 |
| - cmake \ |
11 | 7 | curl \
|
12 |
| - g++ \ |
13 | 8 | git \
|
14 | 9 | libc6-dev \
|
15 |
| - libclang-dev \ |
16 | 10 | make \
|
17 |
| - ssh \ |
18 | 11 | xz-utils
|
19 | 12 |
|
20 |
| -# Fetch clang 8.0+ which is used to compile the wasi target and link our |
21 |
| -# programs together. |
22 |
| -RUN curl http://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz | tar xJf - |
23 |
| -RUN mv /clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04 /wasmcc |
24 |
| - |
25 | 13 | # Note that we're using `git reset --hard` to pin to a specific commit for
|
26 | 14 | # verification for now. The sysroot is currently in somewhat of a state of flux
|
27 | 15 | # and is expected to have breaking changes, so this is an attempt to mitigate
|
28 | 16 | # those breaking changes on `libc`'s own CI
|
29 |
| -RUN git clone https://github.com/CraneStation/wasi-sysroot && \ |
30 |
| - cd wasi-sysroot && \ |
31 |
| - git reset --hard eee6ee7566e26f2535eb6088c8494a112ff423b9 |
32 |
| -RUN make -C wasi-sysroot install -j $(nproc) WASM_CC=/wasmcc/bin/clang INSTALL_DIR=/wasi-sysroot |
33 |
| - |
34 |
| -# This is a small wrapper script which executes the actual clang binary in |
35 |
| -# `/wasmcc` and then is sure to pass the right `--sysroot` argument which we |
36 |
| -# just built above. |
37 |
| -COPY docker/wasm32-wasi/clang.sh /wasi-sysroot/bin/clang |
38 |
| - |
39 |
| -# In the second container we're going to build the `wasmtime` binary which is |
40 |
| -# used to execute wasi executables. This is a standard Rust project so we're |
41 |
| -# just checking out a known revision (which pairs with the sysroot one we |
42 |
| -# downlaoded above) and then we're building it with Cargo |
43 |
| -FROM ubuntu:18.04 as wasmtime |
| 17 | +RUN git clone https://github.com/CraneStation/wasi-libc && \ |
| 18 | + cd wasi-libc && \ |
| 19 | + git reset --hard f645f498dfbbbc00a7a97874d33082d3605c3f21 |
| 20 | +RUN apt-get install -y --no-install-recommends llvm |
| 21 | +RUN make -C wasi-libc install -j $(nproc) INSTALL_DIR=/wasi-libc |
44 | 22 |
|
45 |
| -RUN apt-get update && \ |
46 |
| - apt-get install -y --no-install-recommends \ |
47 |
| - ca-certificates \ |
48 |
| - clang \ |
49 |
| - cmake \ |
50 |
| - curl \ |
51 |
| - g++ \ |
52 |
| - git \ |
53 |
| - libclang-dev \ |
54 |
| - make \ |
55 |
| - ssh |
56 |
| - |
57 |
| -RUN curl -sSf https://sh.rustup.rs | sh -s -- -y |
58 |
| -ENV PATH=/root/.cargo/bin:$PATH |
59 |
| - |
60 |
| -RUN apt-get install -y --no-install-recommends python |
61 |
| -RUN git clone --recursive https://github.com/CraneStation/wasmtime wasmtime && \ |
62 |
| - cd wasmtime && \ |
63 |
| - git reset --hard a2647878977726935c3d04c05cabad9607ec7606 |
64 |
| -RUN cargo build --release --manifest-path wasmtime/Cargo.toml |
65 |
| - |
66 |
| -# And finally in the last image we're going to assemble everything together. |
67 |
| -# We'll install things needed at runtime for now and then copy over the |
68 |
| -# sysroot/wasmtime artifacts into their final location. |
69 |
| -FROM ubuntu:18.04 |
70 |
| - |
71 |
| -RUN apt-get update && \ |
72 |
| - apt-get install -y --no-install-recommends \ |
73 |
| - gcc \ |
74 |
| - libc6-dev \ |
75 |
| - libxml2 \ |
76 |
| - ca-certificates |
| 23 | +RUN curl -L https://github.com/bytecodealliance/wasmtime/releases/download/dev/wasmtime-dev-x86_64-linux.tar.xz | \ |
| 24 | + tar xJf - |
| 25 | +ENV PATH=$PATH:/wasmtime-dev-x86_64-linux |
| 26 | +COPY docker/wasm32-wasi/clang.sh /wasi-libc/bin/clang |
77 | 27 |
|
78 |
| -# Copy over clang we downloaded to link executables ... |
79 |
| -COPY --from=wasi-sysroot /wasmcc /wasmcc/ |
80 |
| -# ... and the sysroot we built to link executables against ... |
81 |
| -COPY --from=wasi-sysroot /wasi-sysroot/ /wasi-sysroot/ |
82 |
| -# ... and finally wasmtime to actually execute binaries |
83 |
| -COPY --from=wasmtime /wasmtime/target/release/wasmtime /usr/bin/ |
| 28 | +RUN apt-get install -y --no-install-recommends lld |
| 29 | +ENV PATH=$PATH:/usr/lib/llvm-9/bin |
84 | 30 |
|
85 | 31 | # Of note here is our clang wrapper which just executes a normal clang
|
86 | 32 | # executable with the right sysroot, and then we're sure to turn off the
|
87 | 33 | # crt-static feature to ensure that the CRT that we're specifying with `clang`
|
88 | 34 | # is used.
|
89 | 35 | ENV CARGO_TARGET_WASM32_WASI_RUNNER=wasmtime \
|
90 |
| - CARGO_TARGET_WASM32_WASI_LINKER=/wasi-sysroot/bin/clang \ |
91 |
| - CC_wasm32_wasi=/wasi-sysroot/bin/clang \ |
| 36 | + CARGO_TARGET_WASM32_WASI_LINKER=/wasi-libc/bin/clang \ |
| 37 | + CC_wasm32_wasi=/wasi-libc/bin/clang \ |
92 | 38 | PATH=$PATH:/rust/bin \
|
93 | 39 | RUSTFLAGS=-Ctarget-feature=-crt-static
|
0 commit comments