|
1 | | -# syntax=docker/dockerfile:1 |
2 | | - |
3 | | -FROM ubuntu:24.04 |
4 | | - |
5 | | -ARG DEBIAN_FRONTEND=noninteractive |
6 | | - |
7 | | -# ============================================================ |
8 | | -# Versions |
9 | | -# ============================================================ |
10 | | - |
11 | | -ARG ANDROID_NDK_VERSION=r27c |
12 | | - |
13 | | -# ============================================================ |
14 | | -# Environment |
15 | | -# ============================================================ |
16 | | - |
17 | | -ENV CARGO_HOME=/root/.cargo \ |
18 | | - RUSTUP_HOME=/root/.rustup \ |
19 | | - ANDROID_HOME=/opt/android-sdk \ |
20 | | - ANDROID_SDK_ROOT=/opt/android-sdk \ |
21 | | - ANDROID_NDK_ROOT=/opt/android-ndk \ |
22 | | - ANDROID_NDK_HOME=/opt/android-ndk \ |
23 | | - JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 |
24 | | - |
25 | | -ENV PATH="/root/.cargo/bin:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/35.0.0:${ANDROID_NDK_ROOT}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" |
26 | | - |
27 | | -# ============================================================ |
28 | | -# System dependencies |
29 | | -# ============================================================ |
30 | | - |
31 | | -RUN apt-get update \ |
32 | | - && apt-get install -y --no-install-recommends \ |
33 | | - ca-certificates \ |
34 | | - curl \ |
35 | | - wget \ |
36 | | - git \ |
37 | | - unzip \ |
38 | | - zip \ |
39 | | - xz-utils \ |
40 | | - file \ |
41 | | - pkg-config \ |
42 | | - build-essential \ |
43 | | - cmake \ |
44 | | - ninja-build \ |
45 | | - clang \ |
46 | | - lld \ |
47 | | - llvm \ |
48 | | - python3 \ |
49 | | - python3-pip \ |
50 | | - openjdk-17-jdk \ |
| 1 | +FROM rust:1.89-bookworm |
| 2 | + |
| 3 | +ENV DEBIAN_FRONTEND=noninteractive |
| 4 | + |
| 5 | +RUN apt-get update && apt-get install -y \ |
| 6 | + clang \ |
| 7 | + lld \ |
| 8 | + llvm \ |
| 9 | + python3 \ |
| 10 | + make \ |
| 11 | + git \ |
| 12 | + curl \ |
| 13 | + unzip \ |
| 14 | + openjdk-17-jdk \ |
51 | 15 | && rm -rf /var/lib/apt/lists/* |
52 | 16 |
|
53 | | -# ============================================================ |
54 | | -# Android SDK Command Line Tools |
55 | | -# ============================================================ |
56 | | - |
57 | | -ARG ANDROID_CMDLINE_TOOLS=13114758 |
58 | | - |
59 | | -RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \ |
60 | | - && wget -q \ |
61 | | - "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" \ |
62 | | - -O /tmp/cmdline-tools.zip \ |
63 | | - && unzip -q \ |
64 | | - /tmp/cmdline-tools.zip \ |
65 | | - -d "${ANDROID_SDK_ROOT}/cmdline-tools" \ |
66 | | - && mv \ |
67 | | - "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" \ |
68 | | - "${ANDROID_SDK_ROOT}/cmdline-tools/latest" \ |
69 | | - && rm -f /tmp/cmdline-tools.zip |
70 | | - |
71 | | -# ============================================================ |
72 | | -# Android SDK |
73 | | -# ============================================================ |
74 | | - |
75 | | -RUN yes | sdkmanager --licenses >/dev/null 2>&1 || true |
76 | | - |
77 | | -RUN sdkmanager \ |
78 | | - "platform-tools" \ |
79 | | - "platforms;android-35" \ |
80 | | - "build-tools;35.0.0" |
81 | | - |
82 | | -# ============================================================ |
83 | | -# Android NDK |
84 | | -# ============================================================ |
85 | | - |
86 | | -RUN wget -q \ |
87 | | - "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" \ |
88 | | - -O /tmp/android-ndk.zip \ |
89 | | - && unzip -q \ |
90 | | - /tmp/android-ndk.zip \ |
91 | | - -d /opt \ |
92 | | - && mv \ |
93 | | - "/opt/android-ndk-${ANDROID_NDK_VERSION}" \ |
94 | | - "${ANDROID_NDK_ROOT}" \ |
95 | | - && rm -f /tmp/android-ndk.zip |
96 | | - |
97 | | -# ============================================================ |
98 | | -# Verify Android NDK |
99 | | -# ============================================================ |
100 | | - |
101 | | -RUN test -f "${ANDROID_NDK_ROOT}/source.properties" \ |
102 | | - && test -f "${ANDROID_NDK_ROOT}/ndk-build" |
103 | | - |
104 | | -# ============================================================ |
105 | | -# Rust |
106 | | -# ============================================================ |
107 | | - |
108 | | -RUN curl \ |
109 | | - --proto '=https' \ |
110 | | - --tlsv1.2 \ |
111 | | - -sSf \ |
112 | | - https://sh.rustup.rs \ |
113 | | - | sh -s -- \ |
114 | | - -y \ |
115 | | - --profile minimal |
116 | | - |
117 | | -# ============================================================ |
118 | | -# Rust targets |
119 | | -# ============================================================ |
120 | | - |
121 | | -RUN rustup target add \ |
122 | | - x86_64-unknown-linux-gnu \ |
123 | | - i686-unknown-linux-gnu \ |
124 | | - aarch64-unknown-linux-gnu \ |
125 | | - armv7-unknown-linux-gnueabihf \ |
126 | | - x86_64-pc-windows-gnu \ |
127 | | - i686-pc-windows-gnu \ |
128 | | - aarch64-linux-android \ |
129 | | - armv7-linux-androideabi \ |
130 | | - x86_64-linux-android \ |
131 | | - i686-linux-android |
132 | | - |
133 | | -# ============================================================ |
134 | | -# Cargo Android linker configuration |
135 | | -# ============================================================ |
136 | | - |
137 | | -RUN mkdir -p "${CARGO_HOME}" \ |
138 | | - && cat > "${CARGO_HOME}/config.toml" <<'EOF' |
139 | | - |
140 | | -[target.aarch64-linux-android] |
141 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" |
142 | | - |
143 | | -[target.armv7-linux-androideabi] |
144 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" |
145 | | - |
146 | | -[target.x86_64-linux-android] |
147 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang" |
148 | | - |
149 | | -[target.i686-linux-android] |
150 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang" |
151 | | - |
152 | | -EOF |
153 | | - |
154 | | -# ============================================================ |
155 | | -# Node.js |
156 | | -# ============================================================ |
157 | | - |
158 | | -RUN curl -fsSL \ |
159 | | - https://deb.nodesource.com/setup_22.x \ |
160 | | - | bash - \ |
161 | | - && apt-get update \ |
162 | | - && apt-get install -y --no-install-recommends nodejs \ |
163 | | - && npm install -g corepack \ |
164 | | - && corepack enable \ |
165 | | - && rm -rf /var/lib/apt/lists/* |
166 | | - |
167 | | -# ============================================================ |
168 | | -# Verification |
169 | | -# ============================================================ |
170 | | - |
171 | | -RUN echo "========================================" \ |
172 | | - && echo "System" \ |
173 | | - && echo "========================================" \ |
174 | | - && uname -a \ |
175 | | - && echo \ |
176 | | - && echo "========================================" \ |
177 | | - && echo "Java" \ |
178 | | - && echo "========================================" \ |
179 | | - && java -version \ |
180 | | - && echo \ |
181 | | - && echo "========================================" \ |
182 | | - && echo "Rust" \ |
183 | | - && echo "========================================" \ |
184 | | - && rustc --version \ |
185 | | - && cargo --version \ |
186 | | - && rustup --version \ |
187 | | - && echo \ |
188 | | - && echo "========================================" \ |
189 | | - && echo "Node.js" \ |
190 | | - && echo "========================================" \ |
191 | | - && node --version \ |
192 | | - && npm --version \ |
193 | | - && echo \ |
194 | | - && echo "========================================" \ |
195 | | - && echo "C/C++ Toolchain" \ |
196 | | - && echo "========================================" \ |
197 | | - && gcc --version \ |
198 | | - && clang --version \ |
199 | | - && cmake --version \ |
200 | | - && ninja --version \ |
201 | | - && echo \ |
202 | | - && echo "========================================" \ |
203 | | - && echo "Android SDK" \ |
204 | | - && echo "========================================" \ |
205 | | - && sdkmanager --version \ |
206 | | - && adb --version \ |
207 | | - && echo \ |
208 | | - && echo "========================================" \ |
209 | | - && echo "Android NDK" \ |
210 | | - && echo "========================================" \ |
211 | | - && "${ANDROID_NDK_ROOT}/ndk-build" --version \ |
212 | | - && echo \ |
213 | | - && echo "========================================" \ |
214 | | - && echo "Rust Targets" \ |
215 | | - && echo "========================================" \ |
216 | | - && rustup target list --installed \ |
217 | | - && echo \ |
218 | | - && echo "========================================" \ |
219 | | - && echo "Android Linkers" \ |
220 | | - && echo "========================================" \ |
221 | | - && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" \ |
222 | | - && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" \ |
223 | | - && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang" \ |
224 | | - && test -x "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang" \ |
225 | | - && echo "Android linkers: OK" |
226 | | - |
227 | | -# ============================================================ |
228 | | -# Project |
229 | | -# ============================================================ |
230 | | - |
231 | | -WORKDIR /workspace |
232 | | - |
233 | | -CMD ["bash"] lld \ |
234 | | - llvm \ |
235 | | - python3 \ |
236 | | - python3-pip \ |
237 | | - openjdk-17-jdk \ |
238 | | - && rm -rf /var/lib/apt/lists/* |
239 | | - |
240 | | -# ============================================================ |
241 | 17 | # Android SDK command-line tools |
242 | | -# ============================================================ |
243 | | - |
244 | | -ARG ANDROID_CMDLINE_TOOLS=13114758 |
245 | | - |
246 | | -RUN mkdir -p /opt/android-sdk/cmdline-tools \ |
247 | | - && wget -q \ |
248 | | - "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS}_latest.zip" \ |
249 | | - -O /tmp/cmdline-tools.zip \ |
250 | | - && unzip -q /tmp/cmdline-tools.zip \ |
251 | | - -d /opt/android-sdk/cmdline-tools \ |
252 | | - && mv \ |
253 | | - /opt/android-sdk/cmdline-tools/cmdline-tools \ |
254 | | - /opt/android-sdk/cmdline-tools/latest \ |
255 | | - && rm -f /tmp/cmdline-tools.zip |
256 | | - |
257 | | -# ============================================================ |
258 | | -# Android SDK |
259 | | -# ============================================================ |
260 | | - |
261 | | -RUN yes | sdkmanager --licenses >/dev/null 2>&1 || true |
| 18 | +ENV ANDROID_SDK_ROOT=/opt/android-sdk |
| 19 | +ENV ANDROID_HOME=/opt/android-sdk |
262 | 20 |
|
263 | | -RUN sdkmanager \ |
264 | | - "platform-tools" \ |
265 | | - "platforms;android-35" \ |
266 | | - "build-tools;35.0.0" |
| 21 | +RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ |
| 22 | + curl -L -o /tmp/cmdline-tools.zip \ |
| 23 | + https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip && \ |
| 24 | + unzip -q /tmp/cmdline-tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ |
| 25 | + mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools \ |
| 26 | + ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \ |
| 27 | + rm /tmp/cmdline-tools.zip |
267 | 28 |
|
268 | | -# ============================================================ |
269 | | -# Android NDK |
270 | | -# ============================================================ |
| 29 | +ENV PATH=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${PATH} |
271 | 30 |
|
272 | | -RUN wget -q \ |
273 | | - "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" \ |
274 | | - -O /tmp/android-ndk.zip \ |
275 | | - && unzip -q /tmp/android-ndk.zip -d /opt \ |
276 | | - && mv \ |
277 | | - "/opt/android-ndk-${ANDROID_NDK_VERSION}" \ |
278 | | - "${ANDROID_NDK_ROOT}" \ |
279 | | - && rm -f /tmp/android-ndk.zip |
| 31 | +RUN yes | sdkmanager --licenses >/dev/null || true && \ |
| 32 | + sdkmanager \ |
| 33 | + "platform-tools" \ |
| 34 | + "platforms;android-35" \ |
| 35 | + "build-tools;35.0.0" \ |
| 36 | + "ndk;27.2.12479018" |
280 | 37 |
|
281 | | -# ============================================================ |
282 | | -# Rust |
283 | | -# ============================================================ |
| 38 | +ENV ANDROID_NDK_HOME=${ANDROID_SDK_ROOT}/ndk/27.2.12479018 |
284 | 39 |
|
285 | | -RUN curl --proto '=https' \ |
286 | | - --tlsv1.2 \ |
287 | | - -sSf https://sh.rustup.rs \ |
288 | | - | sh -s -- -y --profile minimal |
| 40 | +# Rust Android ARMv7 target |
| 41 | +RUN rustup target add armv7-linux-androideabi |
289 | 42 |
|
290 | | -# ============================================================ |
291 | | -# Rust Android targets |
292 | | -# ============================================================ |
| 43 | +WORKDIR /src |
293 | 44 |
|
294 | | -RUN rustup target add \ |
295 | | - aarch64-linux-android \ |
296 | | - armv7-linux-androideabi \ |
297 | | - x86_64-linux-android \ |
298 | | - i686-linux-android |
| 45 | +RUN git clone --depth 1 https://github.com/parcel-bundler/lightningcss.git . |
299 | 46 |
|
300 | | -# ============================================================ |
301 | | -# Cargo Android linker configuration |
302 | | -# ============================================================ |
| 47 | +# Android ARMv7 linker |
| 48 | +ENV AR_armv7_linux_androideabi=\ |
| 49 | +/opt/android-sdk/ndk/27.2.12479018/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar |
303 | 50 |
|
304 | | -RUN mkdir -p /root/.cargo \ |
305 | | - && cat > /root/.cargo/config.toml <<'EOF' |
306 | | -[target.aarch64-linux-android] |
307 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang" |
308 | | - |
309 | | -[target.armv7-linux-androideabi] |
310 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" |
311 | | - |
312 | | -[target.x86_64-linux-android] |
313 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang" |
314 | | - |
315 | | -[target.i686-linux-android] |
316 | | -linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang" |
317 | | -EOF |
318 | | - |
319 | | -# ============================================================ |
320 | | -# Node.js |
321 | | -# ============================================================ |
322 | | - |
323 | | -RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ |
324 | | - && apt-get update \ |
325 | | - && apt-get install -y --no-install-recommends nodejs \ |
326 | | - && npm install -g corepack \ |
327 | | - && corepack enable \ |
328 | | - && rm -rf /var/lib/apt/lists/* |
| 51 | +ENV CC_armv7_linux_androideabi=\ |
| 52 | +/opt/android-sdk/ndk/27.2.12479018/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang |
329 | 53 |
|
330 | | -# ============================================================ |
331 | | -# Verification |
332 | | -# ============================================================ |
| 54 | +ENV CXX_armv7_linux_androideabi=\ |
| 55 | +/opt/android-sdk/ndk/27.2.12479018/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++ |
333 | 56 |
|
334 | | -RUN rustc --version \ |
335 | | - && cargo --version \ |
336 | | - && node --version \ |
337 | | - && npm --version \ |
338 | | - && clang --version \ |
339 | | - && cmake --version \ |
340 | | - && java -version \ |
341 | | - && sdkmanager --version \ |
342 | | - && ndk-build --version |
| 57 | +ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=\ |
| 58 | +/opt/android-sdk/ndk/27.2.12479018/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang |
343 | 59 |
|
344 | | -WORKDIR /workspace |
| 60 | +RUN cargo build --release \ |
| 61 | + --target armv7-linux-androideabi |
345 | 62 |
|
346 | 63 | CMD ["bash"] |
0 commit comments