diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b9099ac..a4e64b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,9 +34,15 @@ jobs: - name: Build release linux x86_64 binary run: rustup target install x86_64-unknown-linux-gnu && - make release-linux && + make release-linux-x86_64 && mv target/x86_64-unknown-linux-gnu/release/rqbit target/release/rqbit-linux-static-x86_64 + - name: Build release linux aarch64 binary + run: + rustup target install aarch64-unknown-linux-gnu && + make release-linux-aarch64 && + mv target/aarch64-unknown-linux-gnu/release/rqbit target/release/rqbit-linux-static-aarch64 + - name: Build release OSX universal binary run: rustup target install aarch64-apple-darwin && diff --git a/Makefile b/Makefile index d1f17e2..c3ccc2f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,11 @@ +OPENSSL_VERSION=3.0.3 + all: sign-release sign-debug +@PHONY: clean +clean: + rm -rf target + @PHONY: sign-debug sign-debug: codesign -f --entitlements resources/debugging.entitlements -s - target/debug/rqbit @@ -34,31 +40,55 @@ release-windows: # brew install mingw-w64 cargo build --target x86_64-pc-windows-gnu --release -target/openssl-linux/lib/libssl.a: - export OPENSSL_ROOT=$(PWD)/target/openssl-linux/ && \ - mkdir -p "$${OPENSSL_ROOT}"/src && \ - cd "$${OPENSSL_ROOT}"/src/ && \ - curl -LO https://www.openssl.org/source/openssl-3.0.0.tar.gz && \ - tar xf openssl-3.0.0.tar.gz && \ - cd openssl-3.0.0 && \ +target/openssl-linux/openssl-$(OPENSSL_VERSION).tar.gz: + mkdir -p target/openssl-linux + curl -L https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -o $@ + +target/openssl-linux/x86_64/lib/libssl.a: target/openssl-linux/openssl-$(OPENSSL_VERSION).tar.gz + export OPENSSL_ROOT=$(PWD)/target/openssl-linux/x86_64/ && \ + mkdir -p $${OPENSSL_ROOT}/src && \ + cd $${OPENSSL_ROOT}/src/ && \ + tar xf ../../openssl-$(OPENSSL_VERSION).tar.gz && \ + cd openssl-$(OPENSSL_VERSION) && \ ./Configure linux-generic64 --prefix="$${OPENSSL_ROOT}" --openssldir="$${OPENSSL_ROOT}" no-shared --cross-compile-prefix=x86_64-unknown-linux-gnu- && \ make -j && \ make install_sw +target/openssl-linux/aarch64/lib/libssl.a: target/openssl-linux/openssl-$(OPENSSL_VERSION).tar.gz + export OPENSSL_ROOT=$(PWD)/target/openssl-linux/aarch64/ && \ + mkdir -p $${OPENSSL_ROOT}/src && \ + cd $${OPENSSL_ROOT}/src/ && \ + tar xf ../../openssl-$(OPENSSL_VERSION).tar.gz && \ + cd openssl-$(OPENSSL_VERSION) && \ + ./Configure linux-aarch64 --prefix="$${OPENSSL_ROOT}" --openssldir="$${OPENSSL_ROOT}" no-shared --cross-compile-prefix=aarch64-unknown-linux-gnu- && \ + make -j && \ + make install_sw + @PHONY: release-linux -release-linux: target/openssl-linux/lib/libssl.a - # prereqs: - # brew tap messense/macos-cross-toolchains - # brew install x86_64-unknown-linux-gnu - # cross-compile openssl with "no-shared", e.g. - # ./Configure linux-generic64 --prefix=$(PWD)/target/openssl-linux/ --openssldir=$(PWD)/target/openssl-linux/ --cross-compile-prefix=x86_64-unknown-linux-gnu- no-shared +release-linux: release-linux-x86_64 release-linux-aarch64 + +@PHONY: release-linux-x86_64 +release-linux-x86_64: target/openssl-linux/x86_64/lib/libssl.a + # prereqs: + # brew tap messense/macos-cross-toolchains + # brew install x86_64-unknown-linux-gnu armv7-unknown-linux-gnueabihf aarch64-unknown-linux-gnu + # cross-compile openssl with "no-shared", see above CC_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-gcc \ CXX_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-g++ \ AR_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-ar \ CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-unknown-linux-gnu-gcc \ - OPENSSL_DIR=$(PWD)/target/openssl-linux/ \ + OPENSSL_DIR=$(PWD)/target/openssl-linux/x86_64/ \ cargo build --release --target=x86_64-unknown-linux-gnu +@PHONY: release-linux-aarch64 +release-linux-aarch64: target/openssl-linux/aarch64/lib/libssl.a + CC_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-gcc \ + CXX_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-g++ \ + AR_aarch64_unknown_linux_gnu=aarch64-unknown-linux-gnu-ar \ + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-unknown-linux-gnu-gcc \ + OPENSSL_DIR=$(PWD)/target/openssl-linux/aarch64/ \ + cargo build --release --target=aarch64-unknown-linux-gnu + @PHONY: release-all release-all: release-windows release-linux release-macos-universal @@ -67,5 +97,4 @@ release-all: release-windows release-linux release-macos-universal cp ./target/x86_64-pc-windows-gnu/release/rqbit.exe /tmp/rqbit-release cp ./target/x86_64-apple-darwin/release/rqbit-osx-universal /tmp/rqbit-release cp ./target/x86_64-unknown-linux-gnu/release/rqbit /tmp/rqbit-release/rqbit-linux-x86_64 - echo "The release was built in /tmp/rqbit-release" \ No newline at end of file