|
1 |
| -FROM fedora:30 |
2 |
| - |
3 |
| -# Update system and install some build tools |
4 |
| - |
5 |
| -RUN dnf -y update |
6 |
| -RUN dnf -y install make automake gcc gcc-c++ kernel-devel git cmake ninja-build python file ncurses-devel flex bison gperf which |
7 |
| - |
8 |
| -# Clone xtensa version of llvm & clang |
9 |
| - |
10 |
| -ARG LLVM_REF=esp-develop |
11 |
| -ARG CLANG_REF=esp-develop |
12 |
| - |
13 |
| -RUN git clone -b ${LLVM_REF} https://github.com/espressif/llvm-xtensa.git |
14 |
| -RUN git clone -b ${CLANG_REF} https://github.com/espressif/clang-xtensa.git llvm-xtensa/tools/clang |
15 |
| - |
16 |
| -RUN mkdir llvm_build |
17 |
| -WORKDIR llvm_build |
18 |
| - |
19 |
| -RUN cmake ../llvm-xtensa -DLLVM_TARGETS_TO_BUILD="Xtensa;X86" -DCMAKE_BUILD_TYPE=Release -G "Ninja" |
20 |
| -RUN cmake --build . |
21 |
| - |
22 |
| -WORKDIR / |
23 |
| - |
24 |
| -# Clone esp-idf |
25 |
| - |
26 |
| -RUN git clone -b v3.3-beta3 --recursive https://github.com/espressif/esp-idf.git esp-idf |
27 |
| - |
28 |
| -ENV IDF_PATH=/esp-idf |
29 |
| -ENV PATH=$PATH:$IDF_PATH/tools |
30 |
| -RUN /usr/bin/python -m pip install --user -r /esp-idf/requirements.txt |
31 |
| - |
32 |
| -# Download xtensa-esp32 toolchain |
33 |
| - |
34 |
| -ARG XTENSA_ESP32_VERSION=1.22.0-80-g6c4433a-5.2.0 |
35 |
| -RUN curl -o /xtensa-esp32-elf-linux64.tar.gz -L https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-${XTENSA_ESP32_VERSION}.tar.gz && mkdir /esp && cd /esp && tar xzf /xtensa-esp32-elf-linux64.tar.gz && rm /xtensa-esp32-elf-linux64.tar.gz |
36 |
| -ENV PATH=$PATH:/esp/xtensa-esp32-elf/bin |
37 |
| - |
38 |
| -RUN echo 'int main() { printf("Hello world\n"); }' > test.c \ |
39 |
| - && /llvm_build/bin/clang -target xtensa -fomit-frame-pointer -S test.c -o test.S \ |
40 |
| - && xtensa-esp32-elf-as test.S \ |
41 |
| - && file a.out \ |
42 |
| - && rm a.out test.c test.S |
43 |
| - |
44 |
| -# RUN git clone https://github.com/MabezDev/rust-xtensa.git |
45 |
| -ARG RUST_REF=xtensa-target |
46 |
| -RUN git clone -b ${RUST_REF} https://github.com/MabezDev/rust-xtensa.git \ |
47 |
| - && mkdir /rust_build \ |
48 |
| - && cd rust-xtensa \ |
49 |
| - && ./configure --llvm-root="/llvm_build" --prefix="/rust_build" \ |
| 1 | +FROM debian:buster-slim |
| 2 | + |
| 3 | +# ------------------------------------------------------------------- |
| 4 | +# Toolchain Version Config |
| 5 | +# ------------------------------------------------------------------- |
| 6 | + |
| 7 | +# Espressif toolchain |
| 8 | +ARG ESP_VERSION="1.22.0-80-g6c4433a-5.2.0" |
| 9 | + |
| 10 | +# esp-idf framework |
| 11 | +ARG IDF_VERSION="v3.3-beta3" |
| 12 | + |
| 13 | +# llvm-xtensa |
| 14 | +ARG CLANG_VERSION="248d9ce8765248d953c3e5ef4022fb350bbe6c51" |
| 15 | +ARG LLVM_VERSION="757e18f722dbdcd98b8479e25041b1eee1128ce9" |
| 16 | + |
| 17 | +# rust-xtensa |
| 18 | +ARG RUSTC_VERSION="8b4a5a9d98912e97d4d3178705bb2dc19f50d1cb" |
| 19 | + |
| 20 | +# ------------------------------------------------------------------- |
| 21 | +# Toolchain Path Config |
| 22 | +# ------------------------------------------------------------------- |
| 23 | + |
| 24 | +ARG TOOLCHAIN="/home/esp32-toolchain" |
| 25 | + |
| 26 | +ARG ESP_BASE="${TOOLCHAIN}/esp" |
| 27 | +ENV ESP_PATH "${ESP_BASE}/esp-toolchain" |
| 28 | +ENV IDF_PATH "${ESP_BASE}/esp-idf" |
| 29 | + |
| 30 | +ARG LLVM_BASE="${TOOLCHAIN}/llvm" |
| 31 | +ARG LLVM_PATH="${LLVM_BASE}/llvm_xtensa" |
| 32 | +ARG LLVM_BUILD_PATH="${LLVM_BASE}/llvm_build" |
| 33 | +ARG LLVM_INSTALL_PATH="${LLVM_BASE}/llvm_install" |
| 34 | + |
| 35 | +ARG RUSTC_BASE="${TOOLCHAIN}/rustc" |
| 36 | +ARG RUSTC_PATH="${RUSTC_BASE}/rust_xtensa" |
| 37 | +ARG RUSTC_BUILD_PATH="${RUSTC_BASE}/rust_build" |
| 38 | + |
| 39 | +ENV PATH "/root/.cargo/bin:${ESP_PATH}/bin:${PATH}" |
| 40 | + |
| 41 | +# ------------------------------------------------------------------- |
| 42 | +# Install expected depdendencies |
| 43 | +# ------------------------------------------------------------------- |
| 44 | + |
| 45 | +RUN apt-get update \ |
| 46 | + && apt-get install -y \ |
| 47 | + bison \ |
| 48 | + cmake \ |
| 49 | + curl \ |
| 50 | + flex \ |
| 51 | + g++ \ |
| 52 | + gcc \ |
| 53 | + git \ |
| 54 | + gperf \ |
| 55 | + libncurses-dev \ |
| 56 | + make \ |
| 57 | + ninja-build \ |
| 58 | + python \ |
| 59 | + python-pip \ |
| 60 | + wget \ |
| 61 | + && rm -rf /var/lib/apt/lists/* |
| 62 | + |
| 63 | +# ------------------------------------------------------------------- |
| 64 | +# Setup esp32 toolchain |
| 65 | +# ------------------------------------------------------------------- |
| 66 | + |
| 67 | +WORKDIR "${ESP_BASE}" |
| 68 | +RUN curl \ |
| 69 | + --proto '=https' \ |
| 70 | + --tlsv1.2 \ |
| 71 | + -sSf \ |
| 72 | + -o "${ESP_PATH}.tar.gz" \ |
| 73 | + "https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-${ESP_VERSION}.tar.gz" \ |
| 74 | + && mkdir "${ESP_PATH}" \ |
| 75 | + && tar -xzf "${ESP_PATH}.tar.gz" -C "${ESP_PATH}" --strip-components 1 \ |
| 76 | + && rm -rf "${ESP_PATH}.tar.gz" |
| 77 | + |
| 78 | +# ------------------------------------------------------------------- |
| 79 | +# Setup esp-idf |
| 80 | +# ------------------------------------------------------------------- |
| 81 | + |
| 82 | +WORKDIR "${ESP_BASE}" |
| 83 | +RUN git clone \ |
| 84 | + --recursive --single-branch -b "${IDF_VERSION}" \ |
| 85 | + https://github.com/espressif/esp-idf.git \ |
| 86 | + && pip install --user -r "${IDF_PATH}/requirements.txt" |
| 87 | + |
| 88 | +# ------------------------------------------------------------------- |
| 89 | +# Build llvm-xtensa |
| 90 | +# ------------------------------------------------------------------- |
| 91 | + |
| 92 | +WORKDIR "${LLVM_BASE}" |
| 93 | +RUN git clone \ |
| 94 | + --recursive --single-branch \ |
| 95 | + https://github.com/espressif/llvm-xtensa.git "${LLVM_PATH}" \ |
| 96 | + && git clone \ |
| 97 | + --recursive --single-branch \ |
| 98 | + https://github.com/espressif/clang-xtensa.git "${LLVM_PATH}/tools/clang" \ |
| 99 | + && cd "${LLVM_PATH}/tools/clang/" \ |
| 100 | + && git reset --hard "${CLANG_VERSION}" \ |
| 101 | + && cd "${LLVM_PATH}" \ |
| 102 | + && git reset --hard "${LLVM_VERSION}" \ |
| 103 | + && mkdir -p "${LLVM_BUILD_PATH}" \ |
| 104 | + && cd "${LLVM_BUILD_PATH}" \ |
| 105 | + && cmake "${LLVM_PATH}" \ |
| 106 | + -DLLVM_TARGETS_TO_BUILD="Xtensa;X86" \ |
| 107 | + -DLLVM_INSTALL_UTILS=ON \ |
| 108 | + -DLLVM_BUILD_TESTS=0 \ |
| 109 | + -DLLVM_INCLUDE_TESTS=0 \ |
| 110 | + -DCMAKE_BUILD_TYPE=Release \ |
| 111 | + -DCMAKE_INSTALL_PREFIX="${LLVM_BASE}/llvm_install" \ |
| 112 | + -G "Ninja" \ |
| 113 | + && ninja install \ |
| 114 | + && rm -rf "${LLVM_PATH}" "${LLVM_BUILD_PATH}" |
| 115 | + |
| 116 | +# ------------------------------------------------------------------- |
| 117 | +# Build rust-xtensa |
| 118 | +# ------------------------------------------------------------------- |
| 119 | + |
| 120 | +WORKDIR "${RUSTC_BASE}" |
| 121 | +RUN git clone \ |
| 122 | + --recursive --single-branch \ |
| 123 | + https://github.com/MabezDev/rust-xtensa.git \ |
| 124 | + "${RUSTC_PATH}" \ |
| 125 | + && mkdir -p "${RUSTC_BUILD_PATH}" \ |
| 126 | + && cd "${RUSTC_PATH}" \ |
| 127 | + && git reset --hard "${RUSTC_VERSION}" \ |
| 128 | + && ./configure \ |
| 129 | + --llvm-root "${LLVM_INSTALL_PATH}" \ |
| 130 | + --prefix "${RUSTC_BUILD_PATH}" \ |
50 | 131 | && python ./x.py build \
|
51 |
| - && python ./x.py install \ |
52 |
| - && cd .. |
53 |
| - |
54 |
| -RUN /rust_build/bin/rustc --print target-list | grep xtensa |
55 |
| -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
56 |
| -ENV PATH=$PATH:/root/.cargo/bin |
| 132 | + && python ./x.py install |
57 | 133 |
|
58 |
| -RUN rustup component add rustfmt |
| 134 | +# ------------------------------------------------------------------- |
| 135 | +# Setup rustup toolchain |
| 136 | +# ------------------------------------------------------------------- |
59 | 137 |
|
60 |
| -# install bindgen |
61 |
| -RUN cargo install bindgen |
62 |
| -# set LIBCLANG_PATH for bindgen |
63 |
| -ENV LIBCLANG_PATH=/llvm_build/lib |
| 138 | +RUN curl \ |
| 139 | + --proto '=https' \ |
| 140 | + --tlsv1.2 \ |
| 141 | + -sSf \ |
| 142 | + https://sh.rustup.rs \ |
| 143 | + | sh -s -- -y --default-toolchain stable \ |
| 144 | + && rustup component add rustfmt \ |
| 145 | + && rustup toolchain link xtensa "${RUSTC_BUILD_PATH}" \ |
| 146 | + && cargo install cargo-xbuild bindgen |
64 | 147 |
|
65 |
| -RUN rustup toolchain link xtensa /rust_build |
66 |
| -RUN rustup run xtensa rustc --print target-list | grep xtensa |
| 148 | +# ------------------------------------------------------------------- |
| 149 | +# Our Project |
| 150 | +# ------------------------------------------------------------------- |
67 | 151 |
|
68 |
| -# add xargo |
69 |
| -RUN cargo install xargo |
70 |
| -ENV XARGO_RUST_SRC=/rust-xtensa/src |
| 152 | +ENV PROJECT="/home/project/" |
71 | 153 |
|
72 |
| -# set up the build directory |
73 |
| -RUN mkdir /build |
74 |
| -VOLUME /build |
75 |
| -WORKDIR /build |
| 154 | +ENV XARGO_RUST_SRC="${RUSTC_PATH}/src" |
| 155 | +ENV TEMPLATES="${TOOLCHAIN}/templates" |
| 156 | +ENV LIBCLANG_PATH="${LLVM_INSTALL_PATH}/lib" |
76 | 157 |
|
77 |
| -COPY create-project image-project bindgen-project build-project xargo-project /usr/local/bin/ |
78 |
| -RUN chmod a+x /usr/local/bin/* |
79 |
| -COPY templates /templates |
| 158 | +VOLUME "${PROJECT}" |
| 159 | +WORKDIR "${PROJECT}" |
80 | 160 |
|
81 |
| -CMD /usr/local/bin/build-project |
| 161 | +COPY bindgen-project build-project create-project image-project xbuild-project /usr/local/bin/ |
| 162 | +COPY templates/ "${TEMPLATES}" |
82 | 163 |
|
| 164 | +CMD ["/usr/local/bin/build-project"] |
0 commit comments