From db21c7a858e1c5ed71710b280ac224d5d98cbfa6 Mon Sep 17 00:00:00 2001 From: Austen Adler Date: Thu, 13 May 2021 21:21:06 -0400 Subject: [PATCH] Cross compile --- .cargo/config | 8 ++++++++ .earthignore | 1 + Cargo.toml | 22 ---------------------- build.earth | 49 +++++++++++++++++++++++++++++++------------------ 4 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 .cargo/config diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 0000000..d068de8 --- /dev/null +++ b/.cargo/config @@ -0,0 +1,8 @@ +[target.aarch64-unknown-linux-musl] +linker = "aarch64-linux-gnu-gcc" + +[target.armv7-unknown-linux-musleabi] +linker = "arm-linux-gnueabi-gcc" + +[target.arm-unknown-linux-musleabi] +linker = "arm-linux-gnueabi-gcc" diff --git a/.earthignore b/.earthignore index 081efbc..1915b01 100644 --- a/.earthignore +++ b/.earthignore @@ -1,3 +1,4 @@ * !/src !/Cargo.* +!/.cargo diff --git a/Cargo.toml b/Cargo.toml index 8c24899..4a84715 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,25 +14,3 @@ tui = "0.14" termion = "1.5" serde = {version = "1.0", features = ["derive"]} confy = "0.4.0" - -#[target.arm-linux-linux-muxl] -#linker = "arm-linux-unknown-gcc" - -[target.aarch64-linux-musl] -linker = "aarch64-linux-gnu-gcc" - -[target.aarch64-unknown-linux-musl] -linker = "aarch64-linux-gnu-gcc" - -[target.aarch64-unknown-linux-gcc] -linker = "aarch64-linux-gnu-gcc" - -# TODO: cross compilation -# [target.arm-unknown-linux-gnueabihf] -# linker = "arm-linux-gnueabihf-gcc" - -# [target.armv7-unknown-linux-musleabi] -# linker = "armv7-unknown-linux-musleabi-gcc" - -# [target.aarch64-unknown-linux-musl] -# linker = "aarch64-unknown-linux-musl-gcc" diff --git a/build.earth b/build.earth index 65139eb..2dcdd5a 100644 --- a/build.earth +++ b/build.earth @@ -1,34 +1,47 @@ FROM rust:latest ENV CARGO_HOME=/deps +ARG APP_NAME=rpn_rs WORKDIR /work -RUN apt-get update -RUN apt-get install -y gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu gdb-mingw-w64 gcc-mingw-w64-x86-64 deps: COPY ./Cargo.toml ./Cargo.lock . + # This is a binary program, expose a main.rs file RUN mkdir src && touch src/main.rs RUN cargo fetch SAVE ARTIFACT /deps -build: - ARG TOOLCHAIN - RUN rustup target add $TOOLCHAIN - SAVE IMAGE docker-wg:5000/rust-builder:$TOOLCHAIN +rust-builder: + RUN rustup target add x86_64-unknown-linux-musl + RUN rustup target add x86_64-pc-windows-gnu + RUN rustup target add i686-unknown-linux-musl + RUN rustup target add aarch64-unknown-linux-musl + RUN rustup target add arm-unknown-linux-musleabi + RUN rustup target add armv7-unknown-linux-musleabi + RUN apt-get update + RUN DEBIAN_FRONTEND=noninteractive apt-get install -y gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu gdb-mingw-w64 gcc-mingw-w64-x86-64 + + SAVE IMAGE docker-wg:5000/rust-builder + +build: + FROM +rust-builder + COPY . . COPY +deps/deps /deps - COPY ./Cargo.toml ./Cargo.lock . - COPY ./src/ ./src/ + + ARG TOOLCHAIN + RUN cargo build --release --target "$TOOLCHAIN" - RUN strip "target/$TOOLCHAIN/release/rpn_rs" - RUN xz --keep "target/$TOOLCHAIN/release/rpn_rs" - SAVE ARTIFACT target/$TOOLCHAIN/release/rpn_rs AS LOCAL target/$TOOLCHAIN/release/rpn_rs-$TOOLCHAIN - SAVE ARTIFACT target/$TOOLCHAIN/release/rpn_rs.xz AS LOCAL target/$TOOLCHAIN/release/rpn_rs-$TOOLCHAIN.xz + ARG STRIP_CMD + RUN "$STRIP_CMD" "target/$TOOLCHAIN/release/$APP_NAME" + RUN xz --keep "target/$TOOLCHAIN/release/$APP_NAME" + SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME AS LOCAL target/$TOOLCHAIN/release/$APP_NAME-$TOOLCHAIN + SAVE ARTIFACT target/$TOOLCHAIN/release/$APP_NAME.xz AS LOCAL target/$TOOLCHAIN/release/$APP_NAME-$TOOLCHAIN.xz all: - BUILD --build-arg TOOLCHAIN=x86_64-unknown-linux-musl +build - BUILD --build-arg TOOLCHAIN=i686-unknown-linux-musl +build + BUILD --build-arg TOOLCHAIN=x86_64-unknown-linux-musl --build-arg STRIP_CMD=x86_64-linux-gnu-strip +build + BUILD --build-arg TOOLCHAIN=i686-unknown-linux-musl --build-arg STRIP_CMD=x86_64-linux-gnu-strip +build + BUILD --build-arg TOOLCHAIN=aarch64-unknown-linux-musl --build-arg STRIP_CMD=aarch64-linux-gnu-strip +build + BUILD --build-arg TOOLCHAIN=arm-unknown-linux-musleabi --build-arg STRIP_CMD=arm-linux-gnueabi-strip +build + BUILD --build-arg TOOLCHAIN=armv7-unknown-linux-musleabi --build-arg STRIP_CMD=arm-linux-gnueabi-strip +build + # TODO: Cross compile to windows # BUILD --build-arg TOOLCHAIN=x86_64-pc-windows-gnu +build - # TODO: Cross compile - # BUILD --build-arg TOOLCHAIN=aarch64-unknown-linux-musl +build - # BUILD --build-arg TOOLCHAIN=arm-unknown-linux-musleabi +build - # BUILD --build-arg TOOLCHAIN=armv7-unknown-linux-musleabi +build