From 0f9d2ac0e437a0b80ffb72cb7ab2e6d898d46f3e Mon Sep 17 00:00:00 2001 From: deadprogram Date: Wed, 1 Dec 2021 00:59:44 +0100 Subject: [PATCH] docker: update Dockerfile for dev build for LLVM 12 changes Signed-off-by: deadprogram --- Dockerfile | 90 +++++++++++++++--------------------------------------- 1 file changed, 25 insertions(+), 65 deletions(-) diff --git a/Dockerfile b/Dockerfile index e21b29ad..f6a65515 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,22 @@ -# TinyGo base stage installs the most recent Go 1.17.x, LLVM 11 and the TinyGo compiler itself. -FROM golang:1.17 AS tinygo-base +# tinygo-llvm stage obtains the llvm source for TinyGo +FROM golang:1.17 AS tinygo-llvm -RUN wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key| apt-key add - && \ - echo "deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-11 main" >> /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y llvm-11-dev libclang-11-dev lld-11 git +RUN apt-get update && \ + apt-get install -y apt-utils make cmake clang-11 binutils-avr gcc-avr avr-libc ninja-build + +COPY ./Makefile /tinygo/Makefile + +RUN cd /tinygo/ && \ + make llvm-source + +# tinygo-llvm-build stage build the custom llvm with xtensa support +FROM tinygo-llvm AS tinygo-llvm-build + +RUN cd /tinygo/ && \ + make llvm-build + +# tinygo-compiler stage builds the compiler itself +FROM tinygo-llvm-build AS tinygo-compiler COPY . /tinygo @@ -15,66 +27,14 @@ RUN cd /tinygo/ && \ git submodule sync && \ git submodule update --init --recursive --force -COPY ./lib/picolibc-stdio.c /tinygo/lib/picolibc-stdio.c +RUN cd /tinygo/ && \ + make + +# tinygo-tools stage installs the needed dependencies to compile TinyGo programs for all platforms. +FROM tinygo-compiler AS tinygo-tools RUN cd /tinygo/ && \ - go install /tinygo/ - -# tinygo-wasm stage installs the needed dependencies to compile TinyGo programs for WASM. -FROM tinygo-base AS tinygo-wasm - -COPY --from=tinygo-base /go/bin/tinygo /go/bin/tinygo -COPY --from=tinygo-base /tinygo/src /tinygo/src -COPY --from=tinygo-base /tinygo/targets /tinygo/targets - -RUN cd /tinygo/ && \ - apt-get update && \ - apt-get install -y make clang-11 libllvm11 lld-11 cmake ninja-build && \ - mkdir build && \ - make wasi-libc binaryen - -# tinygo-avr stage installs the needed dependencies to compile TinyGo programs for AVR microcontrollers. -FROM tinygo-base AS tinygo-avr - -COPY --from=tinygo-base /go/bin/tinygo /go/bin/tinygo -COPY --from=tinygo-base /tinygo/src /tinygo/src -COPY --from=tinygo-base /tinygo/targets /tinygo/targets -COPY --from=tinygo-base /tinygo/Makefile /tinygo/ -COPY --from=tinygo-base /tinygo/tools /tinygo/tools -COPY --from=tinygo-base /tinygo/lib /tinygo/lib - -RUN cd /tinygo/ && \ - apt-get update && \ - apt-get install -y apt-utils make binutils-avr gcc-avr avr-libc && \ - make gen-device-avr && \ - apt-get autoremove -y && \ - apt-get clean - -# tinygo-arm stage installs the needed dependencies to compile TinyGo programs for ARM microcontrollers. -FROM tinygo-base AS tinygo-arm - -COPY --from=tinygo-base /go/bin/tinygo /go/bin/tinygo -COPY --from=tinygo-base /tinygo/src /tinygo/src -COPY --from=tinygo-base /tinygo/targets /tinygo/targets -COPY --from=tinygo-base /tinygo/Makefile /tinygo/ -COPY --from=tinygo-base /tinygo/tools /tinygo/tools -COPY --from=tinygo-base /tinygo/lib /tinygo/lib - -RUN cd /tinygo/ && \ - apt-get update && \ - apt-get install -y apt-utils make clang-11 && \ - make gen-device-nrf && make gen-device-stm32 - -# tinygo-all stage installs the needed dependencies to compile TinyGo programs for all platforms. -FROM tinygo-wasm AS tinygo-all - -COPY --from=tinygo-base /tinygo/Makefile /tinygo/ -COPY --from=tinygo-base /tinygo/tools /tinygo/tools -COPY --from=tinygo-base /tinygo/lib /tinygo/lib - -RUN cd /tinygo/ && \ - apt-get update && \ - apt-get install -y apt-utils make clang-11 binutils-avr gcc-avr avr-libc && \ - make gen-device + make wasi-libc binaryen && \ + make gen-device -j4 CMD ["tinygo"]