From 5bf39ffdf0d432c896b89399a9a8bce4758e0dbb Mon Sep 17 00:00:00 2001 From: Splendide Imaginarius <119545140+Splendide-Imaginarius@users.noreply.github.com> Date: Tue, 3 Sep 2024 06:02:04 +0000 Subject: [PATCH 1/3] Add s390x as cross-compile target Includes an OpenSSL build fix that should also help for riscv64. Doesn't fully build yet because src/util/serial-util.h errors on big-endian targets. --- .github/workflows/autobuild.yml | 7 ++++++- linux/Makefile | 2 +- linux/meson-s390x.txt | 13 +++++++++++++ linux/target-arm64.sh | 2 +- linux/target-armv6.sh | 2 +- linux/target-armv7-neon.sh | 2 +- linux/target-armv7.sh | 2 +- linux/target-power8le.sh | 2 +- linux/target-power9le.sh | 2 +- linux/target-riscv64.sh | 2 +- linux/target-s390x.sh | 28 ++++++++++++++++++++++++++++ linux/toolchain-s390x.cmake | 8 ++++++++ 12 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 linux/meson-s390x.txt create mode 100755 linux/target-s390x.sh create mode 100644 linux/toolchain-s390x.cmake diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 5a48e56f..96377707 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -174,11 +174,16 @@ jobs: arch_debian: ppc64el arch_gcc: powerpc64le-linux-gnu experimental: false + - arch_mkxpz: s390x + arch_debian: s390x + arch_gcc: s390x-linux-gnu + # src/util/serial-util.h errors on big-endian targets. + experimental: true - arch_mkxpz: riscv64 arch_debian: riscv64 arch_gcc: riscv64-linux-gnu # libjxl/highway compatibility issue, TODO check if fixed in later SDL_image. - # Also probably an OpenSSL arch name issue. + # Also probably an OpenSSL arch name issue, which might be fixed by now. experimental: true steps: - uses: benjlevesque/short-sha@v2.2 diff --git a/linux/Makefile b/linux/Makefile index bb147946..b5e6ee93 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -7,7 +7,7 @@ SDL_FLAGS := ${SDL_FLAGS} SDL2_IMAGE_FLAGS := ${SDL2_IMAGE_FLAGS} SDL2_TTF_FLAGS := ${SDL2_TTF_FLAGS} OPENAL_FLAGS := -DALSOFT_CPUEXT_NEON=no ${OPENAL_FLAGS} -OPENSSL_FLAGS := linux-$(ARCH_OPENSSL) ${OPENSSL_FLAGS} +OPENSSL_FLAGS := $(ARCH_OPENSSL) ${OPENSSL_FLAGS} RUBY_FLAGS := ${RUBY_FLAGS} BUILD_PREFIX := ${PWD}/build-$(ARCH) diff --git a/linux/meson-s390x.txt b/linux/meson-s390x.txt new file mode 100644 index 00000000..1d4d30b6 --- /dev/null +++ b/linux/meson-s390x.txt @@ -0,0 +1,13 @@ +[binaries] +c = 's390x-linux-gnu-gcc' +cpp = 's390x-linux-gnu-g++' +ar = 's390x-linux-gnu-ar' +strip = 's390x-linux-gnu-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 's390x' +cpu = 'z196' +endian = 'big' diff --git a/linux/target-arm64.sh b/linux/target-arm64.sh index 6e895579..789182a7 100755 --- a/linux/target-arm64.sh +++ b/linux/target-arm64.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=arm64 -export ARCH_OPENSSL=aarch64 +export ARCH_OPENSSL=linux-aarch64 export ARCH_CFLAGS="" export ARCH_CONFIGURE=aarch64-linux-gnu export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-armv6.sh b/linux/target-armv6.sh index 82a7649e..cf26715f 100755 --- a/linux/target-armv6.sh +++ b/linux/target-armv6.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=armv6 -export ARCH_OPENSSL=armv4 +export ARCH_OPENSSL=linux-armv4 # -march flags from: # https://raspberrypi.stackexchange.com/questions/2046/which-cpu-flags-are-suitable-for-gcc-on-raspberry-pi # https://stackoverflow.com/questions/35132319/build-for-armv6-with-gnueabihf diff --git a/linux/target-armv7-neon.sh b/linux/target-armv7-neon.sh index 1d453de6..eec39685 100755 --- a/linux/target-armv7-neon.sh +++ b/linux/target-armv7-neon.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=armv7-neon -export ARCH_OPENSSL=armv4 +export ARCH_OPENSSL=linux-armv4 export ARCH_CFLAGS="-mcpu=generic-armv7-a+neon -mtune=generic-armv7-a+neon" export ARCH_CONFIGURE=arm-linux-gnueabihf export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-armv7.sh b/linux/target-armv7.sh index ed676d07..2b8792f1 100755 --- a/linux/target-armv7.sh +++ b/linux/target-armv7.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=armv7 -export ARCH_OPENSSL=armv4 +export ARCH_OPENSSL=linux-armv4 export ARCH_CFLAGS="-mcpu=generic-armv7-a+vfpv3-d16 -mtune=generic-armv7-a+vfpv3-d16" export ARCH_CONFIGURE=arm-linux-gnueabihf export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-power8le.sh b/linux/target-power8le.sh index ee44fa33..f3e3b99a 100755 --- a/linux/target-power8le.sh +++ b/linux/target-power8le.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=power8le -export ARCH_OPENSSL=ppc64le +export ARCH_OPENSSL=linux-ppc64le export ARCH_CFLAGS="-mcpu=power8 -mtune=power8" export ARCH_CONFIGURE=powerpc64le-linux-gnu export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-power9le.sh b/linux/target-power9le.sh index 7c37f0bd..762b62f2 100755 --- a/linux/target-power9le.sh +++ b/linux/target-power9le.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=power9le -export ARCH_OPENSSL=ppc64le +export ARCH_OPENSSL=linux-ppc64le export ARCH_CFLAGS="-mcpu=power9 -mtune=power9" export ARCH_CONFIGURE=powerpc64le-linux-gnu export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-riscv64.sh b/linux/target-riscv64.sh index 513783c5..d0c5e6ef 100755 --- a/linux/target-riscv64.sh +++ b/linux/target-riscv64.sh @@ -20,7 +20,7 @@ # cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ export ARCH=riscv64 -export ARCH_OPENSSL=riscv64 +export ARCH_OPENSSL=linux64-riscv64 export ARCH_CFLAGS="" export ARCH_CONFIGURE=riscv64-linux-gnu export CC="$ARCH_CONFIGURE-gcc" diff --git a/linux/target-s390x.sh b/linux/target-s390x.sh new file mode 100755 index 00000000..2487acc1 --- /dev/null +++ b/linux/target-s390x.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture s390x +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:s390x libfontenc-dev:s390x libfs-dev:s390x libice-dev:s390x libsm-dev:s390x libx11-dev:s390x libxau-dev:s390x libxaw7-dev:s390x libxcomposite-dev:s390x libxcursor-dev:s390x libxdamage-dev:s390x libxdmcp-dev:s390x libxext-dev:s390x libxfixes-dev:s390x libxfont-dev:s390x libxft-dev:s390x libxi-dev:s390x libxinerama-dev:s390x libxkbfile-dev:s390x libxmu-dev:s390x libxmuu-dev:s390x libxpm-dev:s390x libxrandr-dev:s390x libxrender-dev:s390x libxres-dev:s390x libxss-dev:s390x libxt-dev:s390x libxtst-dev:s390x libxv-dev:s390x libxvmc-dev:s390x libxxf86dga-dev:s390x libxxf86vm-dev:s390x x11proto-dev:s390x xserver-xorg-dev:s390x xtrans-dev:s390x +# sudo apt install gcc-s390x-linux-gnu g++-s390x-linux-gnu zlib1g-dev:s390x libbz2-dev:s390x libgl1-mesa-dev:s390x libasound2-dev:s390x libpulse-dev:s390x + +# Build instructions +# cd linux +# source target-whatever.sh +# make +# source vars.sh +# cd ../ +# meson setup --cross-file ./linux/$ARCH_MESON_TOOLCHAIN build +# cd build +# ninja +# meson configure --bindir=. --prefix=$PWD/local +# ninja install +# cp "$MKXPZ_PREFIX/lib/$("$ARCH_CONFIGURE-objdump" -p local/mkxp-z* | grep -i NEEDED | grep -Eo 'libruby.so.[0-9\.]+')" local/lib64/ +# cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib64/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib64/ + +export ARCH=s390x +export ARCH_OPENSSL=linux64-s390x +export ARCH_CFLAGS="" +export ARCH_CONFIGURE=s390x-linux-gnu +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-s390x.cmake +export ARCH_MESON_TOOLCHAIN=meson-s390x.txt diff --git a/linux/toolchain-s390x.cmake b/linux/toolchain-s390x.cmake new file mode 100644 index 00000000..143fda16 --- /dev/null +++ b/linux/toolchain-s390x.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR s390x) +set(CMAKE_C_COMPILER ${tools}/bin/s390x-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/s390x-linux-gnu-g++) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) From a6d1c22c8194917d963a1f8d3efca6b3e8d17205 Mon Sep 17 00:00:00 2001 From: Splendide Imaginarius <119545140+Splendide-Imaginarius@users.noreply.github.com> Date: Tue, 3 Sep 2024 06:04:30 +0000 Subject: [PATCH 2/3] armv6 and armv7 are no longer experimental --- .github/workflows/autobuild.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 96377707..275f7bfa 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -151,13 +151,11 @@ jobs: - arch_mkxpz: armv6 arch_debian: armhf arch_gcc: arm-linux-gnueabihf - # GCC doesn't like the -mcpu flags, TODO investigate. - experimental: true + experimental: false - arch_mkxpz: armv7 arch_debian: armhf arch_gcc: arm-linux-gnueabihf - # GCC doesn't like the -mcpu flags, TODO investigate. - experimental: true + experimental: false - arch_mkxpz: armv7-neon arch_debian: armhf arch_gcc: arm-linux-gnueabihf From 304132979d4326457b3c164de6d8afe8cc83d64f Mon Sep 17 00:00:00 2001 From: Splendide Imaginarius <119545140+Splendide-Imaginarius@users.noreply.github.com> Date: Tue, 3 Sep 2024 06:15:35 +0000 Subject: [PATCH 3/3] Fix default ARCH_OPENSSL in Linux Makefile It was broken when introducing s390x support. --- linux/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/Makefile b/linux/Makefile index b5e6ee93..3ee14767 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -1,5 +1,5 @@ ARCH ?= $(shell uname -m) -ARCH_OPENSSL ?= $(ARCH) +ARCH_OPENSSL ?= linux-$(ARCH) ARCH_CFLAGS ?= ARCH_CONFIGURE ?= $(shell gcc -dumpmachine)