Cross compile in the direct way #3518
Xuanwo
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Background
Databend used
cross
for cross-compilation for some time. But we have met many problems:cross
itself is lack of maintenance, and will be transferred out of rust embedded team: RFC for moving cross to its own organisation rust-embedded/wg#590Is it really that hard to cross-compile? You know, this is a problem that has existed since the beginning of the C language.
So I did some research. Finally, I found out that: This problem would be particularly simple if we only needed to support specific architectures. For example, let's say we only support Debian architectures that support cross-compilation.
Setup
Let me show you how I support cross build
aarch64-unknown-linux-gnu
onx86_64
:We can use docker to prevent installing too many dependencies on our host machine:
Let me explain them one by one.
FROM rust:latest
Use the rust upstream image, so that we don't need to set the basic rust environment.
RUN dpkg...
Install cross compile required deps, as explained in #3371
ENV PKG_CONFIG_ALLOW_CROSS=1
Make
pkg-config
allow cross-build (Yes, we have set up the dependencies)COPY cargo-config /usr/local/cargo/config
We need to use the correct linker, the config content is:
Showtime
So we can build databend now:
--network=host
use the host network so my HTTP proxy will works correctly.--rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp
borrowed from rust upstream image.How do you feel?
Next step
cross
?cross
?Beta Was this translation helpful? Give feedback.
All reactions