From cd378b721d7e9c3dc1ff330bfc6c4eec96cc1cc0 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Tue, 24 Dec 2024 10:01:14 -0500 Subject: [PATCH] build: Support and test cross-compiling for linux-aarch64. --- ' | 38 +++++++++++++++++++++++++++++++++++++ .gitea/workflows/build.yaml | 2 +- GNUmakefile | 32 +++++++++++++++++++++++++++---- tools/ssl-local | 11 +++++++---- 4 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 ' diff --git a/' b/' new file mode 100644 index 00000000..36da6d39 --- /dev/null +++ b/' @@ -0,0 +1,38 @@ +name: Build Tilde Friends +run-name: ${{ gitea.actor }} running 🚀 +on: [push] + +jobs: + Build-All: + runs-on: ubuntu-latest + container: + valid_volumes: ['/opt/keys'] + volumes: + - /opt/keys:/opt/keys + steps: + - name: check out code + uses: actions/checkout@v4 + with: + submodules: true + - run: ln -s /opt/keys .keys + - name: Setup JDK + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + with: + packages: 'tools platform-tools build-tools;34.0.0 platforms;android-34 ndk;26.3.11579264' + - run: sudo apt update && sudo apt install -y doxygen graphviz mingw-w64 libgpgme11 gcc-aarch64-linux-gnu + - run: ANDROID_SDK=$HOME/.android/sdk make -j`nproc` all docs + - run: docker build . + - uses: actions/upload-artifact@v3 + with: + path: out/TildeFriends-release.fdroid.apk + - uses: actions/upload-artifact@v3 + with: + path: out/winrelease/tildefriends.exe + - uses: actions/upload-artifact@v3 + with: + path: out/tildefriends-x86_64.AppImage diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 58bacf3c..36da6d39 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -24,7 +24,7 @@ jobs: uses: android-actions/setup-android@v3 with: packages: 'tools platform-tools build-tools;34.0.0 platforms;android-34 ndk;26.3.11579264' - - run: sudo apt update && sudo apt install -y doxygen graphviz mingw-w64 libgpgme11 + - run: sudo apt update && sudo apt install -y doxygen graphviz mingw-w64 libgpgme11 gcc-aarch64-linux-gnu - run: ANDROID_SDK=$HOME/.android/sdk make -j`nproc` all docs - run: docker build . - uses: actions/upload-artifact@v3 diff --git a/GNUmakefile b/GNUmakefile index 5493fd72..93713267 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -34,6 +34,7 @@ ANDROID_SDK ?= ~/Android/Sdk BUNDLETOOL = out/bundletool.jar HAVE_WIN := 0 +HAVE_CROSS_AARCH64 := 0 export SOURCE_DATE_EPOCH=1 export TZ=UTC @@ -45,6 +46,9 @@ BUILD_TYPES := debug release HAVE_ANDROID = $(if $(shell which $(ANDROID_SDK)/platform-tools/adb),1,0) HAVE_LINUX_IOS = $(if $(shell which deps/ios_toolchain/target/bin deps/ios_toolchain/target/bin/arm-apple-darwin11-clang),1,0) HAVE_WIN = $(if $(shell which x86_64-w64-mingw32-gcc-win32),1,0) +ifneq ($(UNAME_M),aarch64) +HAVE_CROSS_AARCH64 = $(if $(shell which aarch64-linux-gnu-gcc),1,0) +endif else ifeq ($(UNAME_S),Haiku) BUILD_TYPES := debug release CFLAGS += -Dstatic_assert=_Static_assert @@ -125,6 +129,13 @@ ifeq ($(HAVE_WIN),1) BUILD_TYPES += windebug winrelease endif +AARCH64_TARGETS := \ + out/armdebug/tildefriends \ + out/armrelease/tildefriends +ifeq ($(HAVE_CROSS_AARCH64),1) +BUILD_TYPES += armdebug armrelease +endif + LINUX_TARGETS := \ out/debug/tildefriends \ out/release/tildefriends @@ -159,7 +170,8 @@ DEBUG_TARGETS := \ out/androiddebug/tildefriends \ out/androiddebug-armv7a/tildefriends \ out/androiddebug-x86_64/tildefriends \ - out/androiddebug-x86/tildefriends + out/androiddebug-x86/tildefriends \ + out/armdebug/tildefriends RELEASE_TARGETS := \ out/release/tildefriends \ out/winrelease/tildefriends.exe \ @@ -169,7 +181,8 @@ RELEASE_TARGETS := \ out/androidrelease/tildefriends \ out/androidrelease-armv7a/tildefriends \ out/androidrelease-x86_64/tildefriends \ - out/androidrelease-x86/tildefriends + out/androidrelease-x86/tildefriends \ + out/armrelease/tildefriends ALL_TARGETS = $(DEBUG_TARGETS) $(RELEASE_TARGETS) ANDROID_RELEASE_TARGETS := $(filter-out $(DEBUG_TARGETS),$(ANDROID_TARGETS)) NONANDROID_RELEASE_TARGETS := $(filter-out $(ANDROID_ARM64_TARGETS),$(RELEASE_TARGETS)) @@ -208,6 +221,10 @@ $(WINDOWS_TARGETS): LDFLAGS += \ -static \ -lm \ -Ldeps/openssl/mingw64/usr/local/lib +$(AARCH64_TARGETS): CC = aarch64-linux-gnu-gcc +$(AARCH64_TARGETS): AS = $(CC) +$(AARCH64_TARGETS): CFLAGS += -Ideps/openssl/Linux/aarch64/usr/local/include +$(AARCH64_TARGETS): LDFLAGS += -Ldeps/openssl/Linux/aarch64/usr/local/lib ifeq ($(UNAME_S),Darwin) $(MACOS_TARGETS): CC = xcrun clang $(IOS_TARGETS): IOS_SYSROOT := $(shell xcrun --sdk iphoneos --show-sdk-path) @@ -262,7 +279,7 @@ endif get_objs = \ $(foreach build_type,$(BUILD_TYPES),$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)))))) \ - $(foreach build_type,debug release,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_unix))))) \ + $(foreach build_type,debug release armdebug armrelease,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_unix))))) \ $(foreach build_type,windebug winrelease,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_win))))) \ $(foreach build_type,androiddebug androidrelease androiddebug-x86 androidrelease-x86 androiddebug-x86_64 androidrelease-x86_64 androiddebug-armv7a androiddebug-armv7a,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_android))))) \ $(foreach build_type,androiddebug androidrelease androiddebug-x86 androidrelease-x86 androiddebug-x86_64 androidrelease-x86_64 androiddebug-armv7a androidrelease-armv7a,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_unix))))) \ @@ -727,7 +744,7 @@ $(MINIUNZIP_OBJS): CFLAGS += \ LDFLAGS += \ -pthread \ -lm -$(LINUX_TARGETS) $(MACOS_TARGETS) $(IOS_TARGETS) $(IOSSIM_TARGETS): LDFLAGS += \ +$(LINUX_TARGETS) $(MACOS_TARGETS) $(IOS_TARGETS) $(IOSSIM_TARGETS) $(AARCH64_TARGETS): LDFLAGS += \ -lssl \ -lcrypto ifneq ($(UNAME_S),Haiku) @@ -1113,6 +1130,13 @@ LOCAL_DEPS := deps/openssl/$(UNAME_S)/$(UNAME_M)/usr/local/lib/libssl.a $(LOCAL_DEPS): +@tools/ssl-local $(filter $(BUILD_DIR)/debug/%,$(APP_OBJS)) $(filter $(BUILD_DIR)/release/%,$(APP_OBJS)): | $(LOCAL_DEPS) + +ifeq ($(HAVE_CROSS_AARCH64),1) +LOCAL_DEPS := deps/openssl/$(UNAME_S)/aarch64/usr/local/lib/libssl.a +$(LOCAL_DEPS): + +@OPTIONS=--cross-compile-prefix=aarch64-linux-gnu- BUILD_TARGET=aarch64 tools/ssl-local +$(filter $(BUILD_DIR)/armdebug/%,$(APP_OBJS)) $(filter $(BUILD_DIR)/armrelease/%,$(APP_OBJS)): | $(LOCAL_DEPS) +endif endif ifeq ($(UNAME_S),Darwin) diff --git a/tools/ssl-local b/tools/ssl-local index 698f8475..1365d741 100755 --- a/tools/ssl-local +++ b/tools/ssl-local @@ -1,11 +1,14 @@ #!/bin/bash -BUILD_DIR=out/openssl_local_build - BUILD_PLATFORM=$(uname -s) -BUILD_TARGET=$(uname -m) +if [[ -z $BUILD_TARGET ]]; then + BUILD_TARGET=$(uname -m) + WORK_DIR=out/openssl-local +else + WORK_DIR=out/openssl-$BUILD_TARGET + SSL_TARGET=linux-$BUILD_TARGET +fi -WORK_DIR=out/openssl-local rm -rf $WORK_DIR cp -aRf deps/openssl_src/ $WORK_DIR