Skip to content

Commit dd77902

Browse files
authored
ci: fix remote cross compilation (#4)
1 parent 1c1f1a1 commit dd77902

4 files changed

Lines changed: 83 additions & 1 deletion

File tree

.github/workflows/docker.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ jobs:
2727
contents: read
2828
steps:
2929
- uses: actions/checkout@v4
30+
- name: Install build dependencies
31+
run: |
32+
sudo apt-get update
33+
sudo apt-get install -y \
34+
build-essential \
35+
pkg-config \
36+
libssl-dev \
37+
libclang-dev \
38+
clang \
39+
llvm-dev \
40+
gcc-multilib \
41+
g++-multilib
3042
- uses: dtolnay/rust-toolchain@stable
3143
- uses: Swatinem/rust-cache@v2
3244
with:
@@ -40,4 +52,14 @@ jobs:
4052
docker run --privileged --rm tonistiigi/binfmt --install arm64,amd64
4153
docker buildx create --use --name cross-builder
4254
- name: Build and push image
43-
run: make docker-build-push
55+
run: |
56+
export LIBCLANG_PATH=/usr/lib/llvm-18/lib
57+
export BINDGEN_EXTRA_CLANG_ARGS="-I/usr/include"
58+
export CC_x86_64_unknown_linux_gnu=x86_64-linux-gnu-gcc
59+
export CXX_x86_64_unknown_linux_gnu=x86_64-linux-gnu-g++
60+
export AR_x86_64_unknown_linux_gnu=x86_64-linux-gnu-ar
61+
export CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
62+
export CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
63+
export AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar
64+
export PKG_CONFIG_ALLOW_CROSS=1
65+
make docker-build-push

Cross.toml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[build]
2+
# Custom Docker images with proper build environment for native dependencies
3+
4+
[target.x86_64-unknown-linux-gnu]
5+
dockerfile = "Dockerfile.cross-x86_64"
6+
7+
[target.aarch64-unknown-linux-gnu]
8+
dockerfile = "Dockerfile.cross-aarch64"
9+
10+
[build.env]
11+
passthrough = [
12+
"RUST_LOG",
13+
"CARGO_TERM_COLOR",
14+
]

Dockerfile.cross-aarch64

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
FROM ghcr.io/cross-rs/cross:main
2+
3+
# Install ARM64 cross-compilation toolchain
4+
RUN apt-get update && \
5+
apt-get install -y \
6+
gcc-aarch64-linux-gnu \
7+
g++-aarch64-linux-gnu \
8+
libc6-dev-arm64-cross \
9+
pkg-config-aarch64-linux-gnu \
10+
build-essential \
11+
clang \
12+
libclang-dev && \
13+
rm -rf /var/lib/apt/lists/*
14+
15+
# Set up environment variables for ARM64 cross-compilation
16+
# Keep host compiler for build scripts, only set target-specific variables
17+
ENV CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
18+
ENV CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
19+
ENV AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar
20+
ENV STRIP_aarch64_unknown_linux_gnu=aarch64-linux-gnu-strip
21+
ENV PKG_CONFIG_aarch64_unknown_linux_gnu=aarch64-linux-gnu-pkg-config
22+
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
23+
ENV BINDGEN_EXTRA_CLANG_ARGS="-I/usr/aarch64-linux-gnu/include -I/usr/include"
24+
ENV CFLAGS_aarch64_unknown_linux_gnu="-I/usr/aarch64-linux-gnu/include -I/usr/include"
25+
ENV CPPFLAGS_aarch64_unknown_linux_gnu="-I/usr/aarch64-linux-gnu/include -I/usr/include"
26+
ENV JEMALLOC_SYS_WITH_LG_PAGE=16
27+
ENV PKG_CONFIG_ALLOW_CROSS=1

Dockerfile.cross-x86_64

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM ghcr.io/cross-rs/cross:main
2+
3+
# Install additional build tools and headers
4+
RUN apt-get update && \
5+
apt-get install -y \
6+
build-essential \
7+
pkg-config \
8+
libclang-dev \
9+
clang && \
10+
rm -rf /var/lib/apt/lists/*
11+
12+
# Set up environment variables for x86_64 cross-compilation
13+
ENV CC_x86_64_unknown_linux_gnu=x86_64-linux-gnu-gcc
14+
ENV CXX_x86_64_unknown_linux_gnu=x86_64-linux-gnu-g++
15+
ENV AR_x86_64_unknown_linux_gnu=x86_64-linux-gnu-ar
16+
ENV STRIP_x86_64_unknown_linux_gnu=x86_64-linux-gnu-strip
17+
ENV BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_gnu="-I/usr/include -I/usr/include/x86_64-linux-gnu"
18+
ENV CFLAGS_x86_64_unknown_linux_gnu="-I/usr/include -I/usr/include/x86_64-linux-gnu"
19+
ENV CPPFLAGS_x86_64_unknown_linux_gnu="-I/usr/include -I/usr/include/x86_64-linux-gnu"

0 commit comments

Comments
 (0)