diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..5ce77c4 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,26 @@ +FROM rust:1.38 +LABEL Description="Rust compile env for Linux + Windows (cross)" + +RUN apt update +RUN apt install -y build-essential mingw-w64 gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf + +RUN rustup target add x86_64-pc-windows-gnu +RUN rustup target add aarch64-unknown-linux-gnu +RUN rustup target add armv7-unknown-linux-gnueabihf + +# Append the linker to the cargo config for Windows cross compile +RUN echo "[target.x86_64-pc-windows-gnu]" >> /usr/local/cargo/config && \ + echo "linker = '/usr/bin/x86_64-w64-mingw32-gcc'" >> /usr/local/cargo/config + +RUN echo "[target.aarch64-unknown-linux-gnu]" >> /usr/local/cargo/config && \ + echo "linker = '/usr/bin/aarch64-linux-gnu-gcc'" >> /usr/local/cargo/config + +RUN echo "[target.armv7-unknown-linux-gnueabihf]" >> /usr/local/cargo/config && \ + echo "linker = '/usr/bin/arm-linux-gnueabihf-gcc-5'" >> /usr/local/cargo/config + +ENV CC_x86_64_unknown_linux_musl="gcc" +ENV CC_aarch64_unknown_linux_gnu="aarch64-linux-gnu-gcc" +ENV CC_armv7_unknown_linux_gnueabhihf="arm-linux-gnueabihf-gcc-5" + +RUN cp /usr/x86_64-w64-mingw32/lib/crt2.o /usr/local/rustup/toolchains/1.38.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/crt2.o + diff --git a/mkrelease.sh b/mkrelease.sh new file mode 100755 index 0000000..d201628 --- /dev/null +++ b/mkrelease.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# This script depends on a docker image already being built +# To build it, +# cd docker +# docker build --tag rustbuild:latest . + +POSITIONAL=() +while [[ $# -gt 0 ]] +do +key="$1" + +case $key in + -v|--version) + APP_VERSION="$2" + shift # past argument + shift # past value + ;; + *) # unknown option + POSITIONAL+=("$1") # save it in an array for later + shift # past argument + ;; +esac +done +set -- "${POSITIONAL[@]}" # restore positional parameters + +if [ -z $APP_VERSION ]; then echo "APP_VERSION is not set"; exit 1; fi + +# Clean everything first +#cargo clean + +# Compile for mac directly +#cargo build --release + +# For Windows and Linux, build via docker +docker run --rm -v $(pwd)/:/opt/zecwallet-light-cli rustbuild:latest bash -c "cd /opt/zecwallet-light-cli && cargo build --release && cargo build --release --target x86_64-pc-windows-gnu" + +# Now sign and zip the binaries +#macOS +rm -rf target/macOS-zecwallet-cli-v$APP_VERSION +mkdir -p target/macOS-zecwallet-cli-v$APP_VERSION +cp target/release/zecwallet-cli target/macOS-zecwallet-cli-v$APP_VERSION/ +gpg --batch --output target/macOS-zecwallet-cli-v$APP_VERSION/zecwallet-cli.sig --detach-sig target/macOS-zecwallet-cli-v$APP_VERSION/zecwallet-cli +cd target +cd macOS-zecwallet-cli-v$APP_VERSION +gsha256sum zecwallet-cli > sha256sum.txt +cd .. +zip -r macOS-zecwallet-cli-v$APP_VERSION.zip macOS-zecwallet-cli-v$APP_VERSION +cd .. + + +#Linux +rm -rf target/linux-zecwallet-cli-v$APP_VERSION +mkdir -p target/linux-zecwallet-cli-v$APP_VERSION +cp target/release/zecwallet-cli target/linux-zecwallet-cli-v$APP_VERSION/ +gpg --batch --output target/linux-zecwallet-cli-v$APP_VERSION/zecwallet-cli.sig --detach-sig target/linux-zecwallet-cli-v$APP_VERSION/zecwallet-cli +cd target +cd linux-zecwallet-cli-v$APP_VERSION +gsha256sum zecwallet-cli > sha256sum.txt +cd .. +zip -r linux-zecwallet-cli-v$APP_VERSION.zip linux-zecwallet-cli-v$APP_VERSION +cd .. + + +#Windows +rm -rf target/Windows-zecwallet-cli-v$APP_VERSION +mkdir -p target/Windows-zecwallet-cli-v$APP_VERSION +cp target/x86_64-pc-windows-gnu/release/zecwallet-cli.exe target/Windows-zecwallet-cli-v$APP_VERSION/ +gpg --batch --output target/Windows-zecwallet-cli-v$APP_VERSION/zecwallet-cli.sig --detach-sig target/Windows-zecwallet-cli-v$APP_VERSION/zecwallet-cli.exe +cd target +cd Windows-zecwallet-cli-v$APP_VERSION +gsha256sum zecwallet-cli.exe > sha256sum.txt +cd .. +zip -r Windows-zecwallet-cli-v$APP_VERSION.zip Windows-zecwallet-cli-v$APP_VERSION +cd .. + + +