
The Espressif fork of LLVM now has Xtensa support in the linker LLD. (This support was written mosly by me). This means we don't have to use the Espressif GNU toolchain anymore and makes installing TinyGo simpler. In the future, this also paves the way for ThinLTO support. Right now it is mostly just a way to simplify TinyGo installation and speed up CI slightly.
40 строки
987 Б
Docker
40 строки
987 Б
Docker
# tinygo-llvm stage obtains the llvm source for TinyGo
|
|
FROM golang:1.19 AS tinygo-llvm
|
|
|
|
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
|
|
|
|
# update submodules
|
|
RUN cd /tinygo/ && \
|
|
rm -rf ./lib/*/ && \
|
|
git submodule sync && \
|
|
git submodule update --init --recursive --force
|
|
|
|
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/ && \
|
|
make wasi-libc binaryen && \
|
|
make gen-device -j4 && \
|
|
cp build/* $GOPATH/bin/
|
|
|
|
CMD ["tinygo"]
|