1
1
FROM debian:buster-slim
2
2
3
- # -------------------------------------------------------------------
4
- # Toolchain Version Config
5
- # -------------------------------------------------------------------
6
-
7
- # esp-idf framework
8
- ARG IDF_VERSION="v4.0"
9
-
10
- # llvm-xtensa (xtensa_release_9.0.1)
11
- ARG LLVM_VERSION="654ba115e55638acc60a8dacf8b1b8d8468cc4f4"
12
-
13
- # rust-xtensa
14
- ARG RUSTC_VERSION="672b35ef0d38d3cd3b0d77eb15e5e58d9f4efec6"
15
-
16
3
# -------------------------------------------------------------------
17
4
# Toolchain Path Config
18
5
# -------------------------------------------------------------------
19
6
20
7
ARG TOOLCHAIN="/home/esp32-toolchain"
21
8
22
- ARG ESP_BASE="${TOOLCHAIN}/esp"
23
- ENV IDF_PATH "${ESP_BASE}/esp-idf"
24
-
25
- ARG LLVM_BASE="${TOOLCHAIN}/llvm"
26
- ARG LLVM_PATH="${LLVM_BASE}/llvm_xtensa"
27
- ARG LLVM_BUILD_PATH="${LLVM_BASE}/llvm_build"
28
- ARG LLVM_INSTALL_PATH="${LLVM_BASE}/llvm_install"
29
-
30
- ARG RUSTC_BASE="${TOOLCHAIN}/rustc"
31
- ARG RUSTC_PATH="${RUSTC_BASE}/rust_xtensa"
32
- ARG RUSTC_BUILD_PATH="${RUSTC_BASE}/rust_build"
33
9
34
10
ENV PATH "/root/.cargo/bin:${PATH}"
35
11
@@ -63,6 +39,11 @@ RUN apt-get update \
63
39
# Setup esp-idf
64
40
# -------------------------------------------------------------------
65
41
42
+ # esp-idf framework
43
+ ARG IDF_VERSION="v4.0"
44
+ ARG ESP_BASE="${TOOLCHAIN}/esp"
45
+ ENV IDF_PATH "${ESP_BASE}/esp-idf"
46
+
66
47
WORKDIR "${ESP_BASE}"
67
48
RUN git clone \
68
49
--recursive --single-branch -b "${IDF_VERSION}" \
@@ -74,6 +55,13 @@ RUN git clone \
74
55
# Build llvm-xtensa
75
56
# -------------------------------------------------------------------
76
57
58
+ # llvm-xtensa (xtensa_release_9.0.1)
59
+ ARG LLVM_VERSION="ae26b7e4eb0938601f8a8744ff50c178a3ef0847"
60
+ ARG LLVM_BASE="${TOOLCHAIN}/llvm"
61
+ ARG LLVM_PATH="${LLVM_BASE}/llvm_xtensa"
62
+ ARG LLVM_BUILD_PATH="${LLVM_BASE}/llvm_build"
63
+ ARG LLVM_INSTALL_PATH="${LLVM_BASE}/llvm_install"
64
+
77
65
WORKDIR "${LLVM_BASE}"
78
66
RUN mkdir "${LLVM_PATH}" \
79
67
&& cd "${LLVM_PATH}" \
@@ -101,6 +89,12 @@ RUN mkdir "${LLVM_PATH}" \
101
89
# Build rust-xtensa
102
90
# -------------------------------------------------------------------
103
91
92
+ # rust-xtensa
93
+ ARG RUSTC_VERSION="672b35ef0d38d3cd3b0d77eb15e5e58d9f4efec6"
94
+ ARG RUSTC_BASE="${TOOLCHAIN}/rustc"
95
+ ARG RUSTC_PATH="${RUSTC_BASE}/rust_xtensa"
96
+ ARG RUSTC_BUILD_PATH="${RUSTC_BASE}/rust_build"
97
+
104
98
WORKDIR "${RUSTC_BASE}"
105
99
RUN git clone \
106
100
--recursive --single-branch \
@@ -120,6 +114,15 @@ RUN git clone \
120
114
# Setup rustup toolchain
121
115
# -------------------------------------------------------------------
122
116
117
+ # Need to use specific version of xbuild.
118
+ # LTO was enabled in 0.5.30 and then removed in 0.5.31.
119
+ # 0.5.32 passes `-Cembed-bitcode=yes` instead of `-Clinker-plugin-lto` for sysroot.
120
+ # But, embed-bitcode isn't recognized by rustc 1.43.1.
121
+ # Details:
122
+ # https://github.com/rust-osdev/cargo-xbuild/issues/72
123
+ # https://stackoverflow.com/questions/61755610/unknown-feature-llvm-asm-when-compile-rust-src
124
+
125
+ WORKDIR "${RUSTC_BASE}"
123
126
RUN curl \
124
127
--proto '=https' \
125
128
--tlsv1.2 \
@@ -128,7 +131,8 @@ RUN curl \
128
131
| sh -s -- -y --default-toolchain stable \
129
132
&& rustup component add rustfmt \
130
133
&& rustup toolchain link xtensa "${RUSTC_BUILD_PATH}" \
131
- && cargo install cargo-xbuild bindgen
134
+ && cargo install bindgen \
135
+ && cargo install --version 0.5.29 cargo-xbuild
132
136
133
137
# -------------------------------------------------------------------
134
138
# Our Project
0 commit comments