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.
This commit is contained in:
Splendide Imaginarius 2024-09-03 06:02:04 +00:00
parent ae04a71b9f
commit 5bf39ffdf0
12 changed files with 63 additions and 9 deletions

View file

@ -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

View file

@ -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)

13
linux/meson-s390x.txt Normal file
View file

@ -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'

View file

@ -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"

View file

@ -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

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

28
linux/target-s390x.sh Executable file
View file

@ -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

View file

@ -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)