From b13c4fe13669b78dc3a4c1bb700c0b72f293f6c6 Mon Sep 17 00:00:00 2001 From: Splendide Imaginarius <119545140+Splendide-Imaginarius@users.noreply.github.com> Date: Thu, 18 Jan 2024 05:15:46 +0000 Subject: [PATCH] Add cross-compile support for Linux/ARM and Linux/POWER targets --- .github/workflows/autobuild.yml | 113 ++++++++++++++++++++++++++++++-- README.md | 2 +- linux/Makefile | 22 +++++-- linux/meson-arm64.txt | 13 ++++ linux/meson-armv6.txt | 13 ++++ linux/meson-armv7-neon.txt | 13 ++++ linux/meson-armv7.txt | 13 ++++ linux/meson-power8le.txt | 13 ++++ linux/meson-power9le.txt | 13 ++++ linux/meson-riscv64.txt | 13 ++++ linux/target-arm64.sh | 28 ++++++++ linux/target-armv6.sh | 28 ++++++++ linux/target-armv7-neon.sh | 28 ++++++++ linux/target-armv7.sh | 28 ++++++++ linux/target-power8le.sh | 28 ++++++++ linux/target-power9le.sh | 28 ++++++++ linux/target-riscv64.sh | 28 ++++++++ linux/toolchain-arm32.cmake | 8 +++ linux/toolchain-arm64.cmake | 8 +++ linux/toolchain-ppc64le.cmake | 8 +++ linux/toolchain-riscv64.cmake | 8 +++ linux/vars.sh | 16 ++++- 22 files changed, 458 insertions(+), 14 deletions(-) create mode 100644 linux/meson-arm64.txt create mode 100644 linux/meson-armv6.txt create mode 100644 linux/meson-armv7-neon.txt create mode 100644 linux/meson-armv7.txt create mode 100644 linux/meson-power8le.txt create mode 100644 linux/meson-power9le.txt create mode 100644 linux/meson-riscv64.txt create mode 100755 linux/target-arm64.sh create mode 100755 linux/target-armv6.sh create mode 100755 linux/target-armv7-neon.sh create mode 100755 linux/target-armv7.sh create mode 100755 linux/target-power8le.sh create mode 100755 linux/target-power9le.sh create mode 100755 linux/target-riscv64.sh create mode 100644 linux/toolchain-arm32.cmake create mode 100644 linux/toolchain-arm64.cmake create mode 100644 linux/toolchain-ppc64le.cmake create mode 100644 linux/toolchain-riscv64.cmake diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index 1ca3d13..4b94abe 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -83,8 +83,8 @@ jobs: build/artifact/scripts/ build/artifact/stdlib/ - build-linux: - name: Ubuntu 22.04 + build-linux-native: + name: Ubuntu 22.04 x86_64 runs-on: ubuntu-22.04 steps: - uses: benjlevesque/short-sha@v2.2 @@ -100,7 +100,7 @@ jobs: path: | linux/build-x86_64 linux/downloads - key: lin-${{ hashFiles('linux/Makefile') }} + key: lin-x86_64-${{ hashFiles('linux/Makefile') }} - name: Install apt dependencies run: | @@ -133,7 +133,112 @@ jobs: - uses: actions/upload-artifact@v3 with: - name: mkxp-z.linux.${{github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name}}-${{steps.short-sha.outputs.sha}} + name: mkxp-z.linux.x86_64.${{github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name}}-${{steps.short-sha.outputs.sha}} + path: build/local.zip + + build-linux-cross: + name: Ubuntu 22.04 ${{matrix.arch_mkxpz}} + runs-on: ubuntu-22.04 + continue-on-error: ${{ matrix.experimental }} + strategy: + fail-fast: false + matrix: + include: + - arch_mkxpz: armv6 + arch_debian: armhf + arch_gcc: arm-linux-gnueabihf + # GCC doesn't like the -mcpu flags, TODO investigate. + experimental: true + - arch_mkxpz: armv7 + arch_debian: armhf + arch_gcc: arm-linux-gnueabihf + # GCC doesn't like the -mcpu flags, TODO investigate. + experimental: true + - arch_mkxpz: armv7-neon + arch_debian: armhf + arch_gcc: arm-linux-gnueabihf + experimental: false + - arch_mkxpz: arm64 + arch_debian: arm64 + arch_gcc: aarch64-linux-gnu + experimental: false + - arch_mkxpz: power8le + arch_debian: ppc64el + arch_gcc: powerpc64le-linux-gnu + experimental: false + - arch_mkxpz: power9le + arch_debian: ppc64el + arch_gcc: powerpc64le-linux-gnu + experimental: false + - 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. + experimental: true + steps: + - uses: benjlevesque/short-sha@v2.2 + id: short-sha + with: + length: 7 + + - name: Checkout repository + uses: actions/checkout@v3 + + - uses: actions/cache@v3 + with: + path: | + linux/build-${{matrix.arch_mkxpz}} + linux/downloads + key: lin-${{matrix.arch_mkxpz}}-${{ hashFiles('linux/Makefile', 'linux/target*', 'linux/toolchain*') }} + + - name: Install apt dependencies + run: | + sudo sed -i "s/deb /deb [arch=amd64] /g" /etc/apt/sources.list + sudo dpkg --add-architecture ${{matrix.arch_debian}} + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy main restricted" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy-updates main restricted" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy-updates universe" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy multiverse" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy-updates multiverse" | sudo tee -a /etc/apt/sources.list + echo "deb [arch=${{matrix.arch_debian}}] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list + sudo apt update + sudo apt install git build-essential cmake meson autoconf automake libtool pkg-config ruby bison -y + sudo apt install libdmx-dev:${{matrix.arch_debian}} libfontenc-dev:${{matrix.arch_debian}} libfs-dev:${{matrix.arch_debian}} libice-dev:${{matrix.arch_debian}} libsm-dev:${{matrix.arch_debian}} libx11-dev:${{matrix.arch_debian}} libxau-dev:${{matrix.arch_debian}} libxaw7-dev:${{matrix.arch_debian}} libxcomposite-dev:${{matrix.arch_debian}} libxcursor-dev:${{matrix.arch_debian}} libxdamage-dev:${{matrix.arch_debian}} libxdmcp-dev:${{matrix.arch_debian}} libxext-dev:${{matrix.arch_debian}} libxfixes-dev:${{matrix.arch_debian}} libxfont-dev:${{matrix.arch_debian}} libxft-dev:${{matrix.arch_debian}} libxi-dev:${{matrix.arch_debian}} libxinerama-dev:${{matrix.arch_debian}} libxkbfile-dev:${{matrix.arch_debian}} libxmu-dev:${{matrix.arch_debian}} libxmuu-dev:${{matrix.arch_debian}} libxpm-dev:${{matrix.arch_debian}} libxrandr-dev:${{matrix.arch_debian}} libxrender-dev:${{matrix.arch_debian}} libxres-dev:${{matrix.arch_debian}} libxss-dev:${{matrix.arch_debian}} libxt-dev:${{matrix.arch_debian}} libxtst-dev:${{matrix.arch_debian}} libxv-dev:${{matrix.arch_debian}} libxvmc-dev:${{matrix.arch_debian}} libxxf86dga-dev:${{matrix.arch_debian}} libxxf86vm-dev:${{matrix.arch_debian}} x11proto-dev:${{matrix.arch_debian}} xserver-xorg-dev:${{matrix.arch_debian}} xtrans-dev:${{matrix.arch_debian}} -y + sudo apt install gcc-${{matrix.arch_gcc}} g++-${{matrix.arch_gcc}} zlib1g-dev:${{matrix.arch_debian}} libbz2-dev:${{matrix.arch_debian}} libgl1-mesa-dev:${{matrix.arch_debian}} libasound2-dev:${{matrix.arch_debian}} libpulse-dev:${{matrix.arch_debian}} -y + + - name: Build everything else + run: | + cd linux + source target-${{matrix.arch_mkxpz}}.sh + make + + - name: Build executable + run: | + source linux/target-${{matrix.arch_mkxpz}}.sh + source linux/vars.sh + meson setup --cross-file linux/$ARCH_MESON_TOOLCHAIN build --bindir=. --prefix=$GITHUB_WORKSPACE/build/local + cd build + ninja + ninja install + cp "$MKXPZ_PREFIX/lib/$("$ARCH_CONFIGURE-objdump" -p local/mkxp-z* | grep -i NEEDED | grep -Eo 'libruby.so.[0-9\.]+')" local/lib*/ + cp "/usr/lib/$ARCH_CONFIGURE/$("$ARCH_CONFIGURE-objdump" -p local/lib*/libruby.so* | grep -i NEEDED | grep -Eo 'libcrypt.so.[0-9\.]+')" local/lib*/ + + - name: Prepare archive + run: | + cd build/local + cp -r ../../linux/build-${{matrix.arch_mkxpz}}/lib/ruby/3.1.0 . + mv ./3.1.0 ./stdlib + cp ../../mkxp.json . + cp -r ../../scripts . + cp ../../assets/LICENSE.mkxp-z-with-https.txt . + cd .. + zip -r local.zip local + + - uses: actions/upload-artifact@v3 + with: + name: mkxp-z.linux.${{matrix.arch_mkxpz}}.${{github.event_name == 'pull_request' && format('PR{0}', github.event.number) || github.ref_name}}-${{steps.short-sha.outputs.sha}} path: build/local.zip build-macos: diff --git a/README.md b/README.md index 64257c9..48dcdc8 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This is a fork of mkxp intended to be a little more than just a barebones recrea Despite the fact that it was made with Essentials games in mind, there is nothing connected to it contained in this repository, and it should still be compatible with anything that runs in the upstream version of MKXP. You can think of it as MKXP but a bit supercharged -- it should be able to run all but the most demanding of RGSS projects, given a bit of porting work. -It supports Windows, Linux and both Intel and Apple Silicon versions of macOS. +It supports Windows, Linux (x86, ARM, and POWER), and both Intel and Apple Silicon versions of macOS. mkxp-z is licensed under the GNU General Public License v2+. However, if you build mkxp-z with the `enable-https` option turned on (which is the default), you will also need to comply with OpenSSL's Apache v2 license, which in practice means that the resulting binaries are licensed under GPLv3. diff --git a/linux/Makefile b/linux/Makefile index 366f89b..bb14794 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -1,10 +1,13 @@ -ARCH := $(shell uname -m) +ARCH ?= $(shell uname -m) +ARCH_OPENSSL ?= $(ARCH) +ARCH_CFLAGS ?= +ARCH_CONFIGURE ?= $(shell gcc -dumpmachine) 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_FLAGS} +OPENSSL_FLAGS := linux-$(ARCH_OPENSSL) ${OPENSSL_FLAGS} RUBY_FLAGS := ${RUBY_FLAGS} BUILD_PREFIX := ${PWD}/build-$(ARCH) @@ -12,9 +15,9 @@ LIBDIR := $(BUILD_PREFIX)/lib INCLUDEDIR := $(BUILD_PREFIX)/include DOWNLOADS := ${PWD}/downloads/$(ARCH) NPROC := $(shell nproc) -CFLAGS := -I$(INCLUDEDIR) -flax-vector-conversions -O3 +CFLAGS := -I$(INCLUDEDIR) -flax-vector-conversions -O3 $(ARCH_CFLAGS) LDFLAGS := -L$(LIBDIR) -CC := gcc +CC ?= gcc PKG_CONFIG_LIBDIR := $(BUILD_PREFIX)/lib/pkgconfig GIT := git CLONE := $(GIT) clone -q @@ -24,14 +27,19 @@ CONFIGURE_ENV := \ PKG_CONFIG_LIBDIR=$(PKG_CONFIG_LIBDIR) \ CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" -CONFIGURE_ARGS := --prefix="$(BUILD_PREFIX)" +CONFIGURE_ARGS := --prefix="$(BUILD_PREFIX)" --host="$(ARCH_CONFIGURE)" +ifdef ARCH_CMAKE_TOOLCHAIN + ARCH_CMAKE_ARGS := -DCMAKE_TOOLCHAIN_FILE="${PWD}/$(ARCH_CMAKE_TOOLCHAIN)" +endif CMAKE_ARGS := \ -DCMAKE_INSTALL_PREFIX="$(BUILD_PREFIX)" \ -DCMAKE_PREFIX_PATH="$(BUILD_PREFIX)" \ -DCMAKE_C_FLAGS="$(CFLAGS)" \ - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=Release \ + $(ARCH_CMAKE_ARGS) +# TODO: Check if we can disable rubygems, remove prefixes. RUBY_CONFIGURE_ARGS := \ --enable-install-static-library \ --enable-shared \ @@ -316,7 +324,7 @@ ruby: init_dirs openssl $(LIBDIR)/libruby.so.3.1 $(LIBDIR)/libruby.so.3.1: $(DOWNLOADS)/ruby/Makefile cd $(DOWNLOADS)/ruby; \ - make -j$(NPROC); make install + make -j$(NPROC); make install DESTDIR="$(BUILD_PREFIX)" $(DOWNLOADS)/ruby/Makefile: $(DOWNLOADS)/ruby/configure cd $(DOWNLOADS)/ruby; \ diff --git a/linux/meson-arm64.txt b/linux/meson-arm64.txt new file mode 100644 index 0000000..3c01aee --- /dev/null +++ b/linux/meson-arm64.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'aarch64-linux-gnu-gcc' +cpp = 'aarch64-linux-gnu-g++' +ar = 'aarch64-linux-gnu-ar' +strip = 'aarch64-linux-gnu-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'aarch64' +cpu = 'generic-armv8-a' +endian = 'little' diff --git a/linux/meson-armv6.txt b/linux/meson-armv6.txt new file mode 100644 index 0000000..cd561ba --- /dev/null +++ b/linux/meson-armv6.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'arm-linux-gnueabihf-gcc' +cpp = 'arm-linux-gnueabihf-g++' +ar = 'arm-linux-gnueabihf-ar' +strip = 'arm-linux-gnueabihf-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'arm' +cpu = 'generic-armv6+fp' +endian = 'little' diff --git a/linux/meson-armv7-neon.txt b/linux/meson-armv7-neon.txt new file mode 100644 index 0000000..fa6e76e --- /dev/null +++ b/linux/meson-armv7-neon.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'arm-linux-gnueabihf-gcc' +cpp = 'arm-linux-gnueabihf-g++' +ar = 'arm-linux-gnueabihf-ar' +strip = 'arm-linux-gnueabihf-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'arm' +cpu = 'generic-armv7-a+neon' +endian = 'little' diff --git a/linux/meson-armv7.txt b/linux/meson-armv7.txt new file mode 100644 index 0000000..e32324c --- /dev/null +++ b/linux/meson-armv7.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'arm-linux-gnueabihf-gcc' +cpp = 'arm-linux-gnueabihf-g++' +ar = 'arm-linux-gnueabihf-ar' +strip = 'arm-linux-gnueabihf-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'arm' +cpu = 'generic-armv7-a+fp' +endian = 'little' diff --git a/linux/meson-power8le.txt b/linux/meson-power8le.txt new file mode 100644 index 0000000..eab4109 --- /dev/null +++ b/linux/meson-power8le.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'powerpc64le-linux-gnu-gcc' +cpp = 'powerpc64le-linux-gnu-g++' +ar = 'powerpc64le-linux-gnu-ar' +strip = 'powerpc64le-linux-gnu-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'ppc64' +cpu = 'power8' +endian = 'little' diff --git a/linux/meson-power9le.txt b/linux/meson-power9le.txt new file mode 100644 index 0000000..49faf13 --- /dev/null +++ b/linux/meson-power9le.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'powerpc64le-linux-gnu-gcc' +cpp = 'powerpc64le-linux-gnu-g++' +ar = 'powerpc64le-linux-gnu-ar' +strip = 'powerpc64le-linux-gnu-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'ppc64' +cpu = 'power9' +endian = 'little' diff --git a/linux/meson-riscv64.txt b/linux/meson-riscv64.txt new file mode 100644 index 0000000..dcd2d1d --- /dev/null +++ b/linux/meson-riscv64.txt @@ -0,0 +1,13 @@ +[binaries] +c = 'riscv64-linux-gnu-gcc' +cpp = 'riscv64-linux-gnu-g++' +ar = 'riscv64-linux-gnu-ar' +strip = 'riscv64-linux-gnu-strip' +pkgconfig = 'pkg-config' +cmake = 'cmake' + +[host_machine] +system = 'linux' +cpu_family = 'riscv64' +cpu = 'rv64gc' +endian = 'little' diff --git a/linux/target-arm64.sh b/linux/target-arm64.sh new file mode 100755 index 0000000..6e89557 --- /dev/null +++ b/linux/target-arm64.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture arm64 +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:arm64 libfontenc-dev:arm64 libfs-dev:arm64 libice-dev:arm64 libsm-dev:arm64 libx11-dev:arm64 libxau-dev:arm64 libxaw7-dev:arm64 libxcomposite-dev:arm64 libxcursor-dev:arm64 libxdamage-dev:arm64 libxdmcp-dev:arm64 libxext-dev:arm64 libxfixes-dev:arm64 libxfont-dev:arm64 libxft-dev:arm64 libxi-dev:arm64 libxinerama-dev:arm64 libxkbfile-dev:arm64 libxmu-dev:arm64 libxmuu-dev:arm64 libxpm-dev:arm64 libxrandr-dev:arm64 libxrender-dev:arm64 libxres-dev:arm64 libxss-dev:arm64 libxt-dev:arm64 libxtst-dev:arm64 libxv-dev:arm64 libxvmc-dev:arm64 libxxf86dga-dev:arm64 libxxf86vm-dev:arm64 x11proto-dev:arm64 xserver-xorg-dev:arm64 xtrans-dev:arm64 +# sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu zlib1g-dev:arm64 libbz2-dev:arm64 libgl1-mesa-dev:arm64 libasound2-dev:arm64 libpulse-dev:arm64 + +# 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=arm64 +export ARCH_OPENSSL=aarch64 +export ARCH_CFLAGS="" +export ARCH_CONFIGURE=aarch64-linux-gnu +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-arm64.cmake +export ARCH_MESON_TOOLCHAIN=meson-arm64.txt diff --git a/linux/target-armv6.sh b/linux/target-armv6.sh new file mode 100755 index 0000000..772e802 --- /dev/null +++ b/linux/target-armv6.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture armhf +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:armhf libfontenc-dev:armhf libfs-dev:armhf libice-dev:armhf libsm-dev:armhf libx11-dev:armhf libxau-dev:armhf libxaw7-dev:armhf libxcomposite-dev:armhf libxcursor-dev:armhf libxdamage-dev:armhf libxdmcp-dev:armhf libxext-dev:armhf libxfixes-dev:armhf libxfont-dev:armhf libxft-dev:armhf libxi-dev:armhf libxinerama-dev:armhf libxkbfile-dev:armhf libxmu-dev:armhf libxmuu-dev:armhf libxpm-dev:armhf libxrandr-dev:armhf libxrender-dev:armhf libxres-dev:armhf libxss-dev:armhf libxt-dev:armhf libxtst-dev:armhf libxv-dev:armhf libxvmc-dev:armhf libxxf86dga-dev:armhf libxxf86vm-dev:armhf x11proto-dev:armhf xserver-xorg-dev:armhf xtrans-dev:armhf +# sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf zlib1g-dev:armhf libbz2-dev:armhf libgl1-mesa-dev:armhf libasound2-dev:armhf libpulse-dev:armhf + +# 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=armv6 +export ARCH_OPENSSL=armv4 +export ARCH_CFLAGS="-mcpu=generic-armv6+fp -mtune=generic-armv6+fp" +export ARCH_CONFIGURE=arm-linux-gnueabihf +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-arm32.cmake +export ARCH_MESON_TOOLCHAIN=meson-armv6.txt diff --git a/linux/target-armv7-neon.sh b/linux/target-armv7-neon.sh new file mode 100755 index 0000000..1d453de --- /dev/null +++ b/linux/target-armv7-neon.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture armhf +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:armhf libfontenc-dev:armhf libfs-dev:armhf libice-dev:armhf libsm-dev:armhf libx11-dev:armhf libxau-dev:armhf libxaw7-dev:armhf libxcomposite-dev:armhf libxcursor-dev:armhf libxdamage-dev:armhf libxdmcp-dev:armhf libxext-dev:armhf libxfixes-dev:armhf libxfont-dev:armhf libxft-dev:armhf libxi-dev:armhf libxinerama-dev:armhf libxkbfile-dev:armhf libxmu-dev:armhf libxmuu-dev:armhf libxpm-dev:armhf libxrandr-dev:armhf libxrender-dev:armhf libxres-dev:armhf libxss-dev:armhf libxt-dev:armhf libxtst-dev:armhf libxv-dev:armhf libxvmc-dev:armhf libxxf86dga-dev:armhf libxxf86vm-dev:armhf x11proto-dev:armhf xserver-xorg-dev:armhf xtrans-dev:armhf +# sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf zlib1g-dev:armhf libbz2-dev:armhf libgl1-mesa-dev:armhf libasound2-dev:armhf libpulse-dev:armhf + +# 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=armv7-neon +export ARCH_OPENSSL=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" +export ARCH_CMAKE_TOOLCHAIN=toolchain-arm32.cmake +export ARCH_MESON_TOOLCHAIN=meson-armv7-neon.txt diff --git a/linux/target-armv7.sh b/linux/target-armv7.sh new file mode 100755 index 0000000..5159fcd --- /dev/null +++ b/linux/target-armv7.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture armhf +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:armhf libfontenc-dev:armhf libfs-dev:armhf libice-dev:armhf libsm-dev:armhf libx11-dev:armhf libxau-dev:armhf libxaw7-dev:armhf libxcomposite-dev:armhf libxcursor-dev:armhf libxdamage-dev:armhf libxdmcp-dev:armhf libxext-dev:armhf libxfixes-dev:armhf libxfont-dev:armhf libxft-dev:armhf libxi-dev:armhf libxinerama-dev:armhf libxkbfile-dev:armhf libxmu-dev:armhf libxmuu-dev:armhf libxpm-dev:armhf libxrandr-dev:armhf libxrender-dev:armhf libxres-dev:armhf libxss-dev:armhf libxt-dev:armhf libxtst-dev:armhf libxv-dev:armhf libxvmc-dev:armhf libxxf86dga-dev:armhf libxxf86vm-dev:armhf x11proto-dev:armhf xserver-xorg-dev:armhf xtrans-dev:armhf +# sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf zlib1g-dev:armhf libbz2-dev:armhf libgl1-mesa-dev:armhf libasound2-dev:armhf libpulse-dev:armhf + +# 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=armv7 +export ARCH_OPENSSL=armv4 +export ARCH_CFLAGS="-mcpu=generic-armv7-a+fp -mtune=generic-armv7-a+fp" +export ARCH_CONFIGURE=arm-linux-gnueabihf +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-arm32.cmake +export ARCH_MESON_TOOLCHAIN=meson-armv7.txt diff --git a/linux/target-power8le.sh b/linux/target-power8le.sh new file mode 100755 index 0000000..ee44fa3 --- /dev/null +++ b/linux/target-power8le.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture ppc64el +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:ppc64el libfontenc-dev:ppc64el libfs-dev:ppc64el libice-dev:ppc64el libsm-dev:ppc64el libx11-dev:ppc64el libxau-dev:ppc64el libxaw7-dev:ppc64el libxcomposite-dev:ppc64el libxcursor-dev:ppc64el libxdamage-dev:ppc64el libxdmcp-dev:ppc64el libxext-dev:ppc64el libxfixes-dev:ppc64el libxfont-dev:ppc64el libxft-dev:ppc64el libxi-dev:ppc64el libxinerama-dev:ppc64el libxkbfile-dev:ppc64el libxmu-dev:ppc64el libxmuu-dev:ppc64el libxpm-dev:ppc64el libxrandr-dev:ppc64el libxrender-dev:ppc64el libxres-dev:ppc64el libxss-dev:ppc64el libxt-dev:ppc64el libxtst-dev:ppc64el libxv-dev:ppc64el libxvmc-dev:ppc64el libxxf86dga-dev:ppc64el libxxf86vm-dev:ppc64el x11proto-dev:ppc64el xserver-xorg-dev:ppc64el xtrans-dev:ppc64el +# sudo apt install gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu zlib1g-dev:ppc64el libbz2-dev:ppc64el libgl1-mesa-dev:ppc64el libasound2-dev:ppc64el libpulse-dev:ppc64el + +# 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=power8le +export ARCH_OPENSSL=ppc64le +export ARCH_CFLAGS="-mcpu=power8 -mtune=power8" +export ARCH_CONFIGURE=powerpc64le-linux-gnu +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-ppc64le.cmake +export ARCH_MESON_TOOLCHAIN=meson-power8le.txt diff --git a/linux/target-power9le.sh b/linux/target-power9le.sh new file mode 100755 index 0000000..7c37f0b --- /dev/null +++ b/linux/target-power9le.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture ppc64el +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:ppc64el libfontenc-dev:ppc64el libfs-dev:ppc64el libice-dev:ppc64el libsm-dev:ppc64el libx11-dev:ppc64el libxau-dev:ppc64el libxaw7-dev:ppc64el libxcomposite-dev:ppc64el libxcursor-dev:ppc64el libxdamage-dev:ppc64el libxdmcp-dev:ppc64el libxext-dev:ppc64el libxfixes-dev:ppc64el libxfont-dev:ppc64el libxft-dev:ppc64el libxi-dev:ppc64el libxinerama-dev:ppc64el libxkbfile-dev:ppc64el libxmu-dev:ppc64el libxmuu-dev:ppc64el libxpm-dev:ppc64el libxrandr-dev:ppc64el libxrender-dev:ppc64el libxres-dev:ppc64el libxss-dev:ppc64el libxt-dev:ppc64el libxtst-dev:ppc64el libxv-dev:ppc64el libxvmc-dev:ppc64el libxxf86dga-dev:ppc64el libxxf86vm-dev:ppc64el x11proto-dev:ppc64el xserver-xorg-dev:ppc64el xtrans-dev:ppc64el +# sudo apt install gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu zlib1g-dev:ppc64el libbz2-dev:ppc64el libgl1-mesa-dev:ppc64el libasound2-dev:ppc64el libpulse-dev:ppc64el + +# 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=power9le +export ARCH_OPENSSL=ppc64le +export ARCH_CFLAGS="-mcpu=power9 -mtune=power9" +export ARCH_CONFIGURE=powerpc64le-linux-gnu +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-ppc64le.cmake +export ARCH_MESON_TOOLCHAIN=meson-power9le.txt diff --git a/linux/target-riscv64.sh b/linux/target-riscv64.sh new file mode 100755 index 0000000..513783c --- /dev/null +++ b/linux/target-riscv64.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Deps instructions: +# sudo dpkg --add-architecture riscv64 +# (Target versions of xorg-dev; removes native versions of: libxfont-dev xorg-dev xserver-xorg-dev) sudo apt install libdmx-dev:riscv64 libfontenc-dev:riscv64 libfs-dev:riscv64 libice-dev:riscv64 libsm-dev:riscv64 libx11-dev:riscv64 libxau-dev:riscv64 libxaw7-dev:riscv64 libxcomposite-dev:riscv64 libxcursor-dev:riscv64 libxdamage-dev:riscv64 libxdmcp-dev:riscv64 libxext-dev:riscv64 libxfixes-dev:riscv64 libxfont-dev:riscv64 libxft-dev:riscv64 libxi-dev:riscv64 libxinerama-dev:riscv64 libxkbfile-dev:riscv64 libxmu-dev:riscv64 libxmuu-dev:riscv64 libxpm-dev:riscv64 libxrandr-dev:riscv64 libxrender-dev:riscv64 libxres-dev:riscv64 libxss-dev:riscv64 libxt-dev:riscv64 libxtst-dev:riscv64 libxv-dev:riscv64 libxvmc-dev:riscv64 libxxf86dga-dev:riscv64 libxxf86vm-dev:riscv64 x11proto-dev:riscv64 xserver-xorg-dev:riscv64 xtrans-dev:riscv64 +# sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu zlib1g-dev:riscv64 libbz2-dev:riscv64 libgl1-mesa-dev:riscv64 libasound2-dev:riscv64 libpulse-dev:riscv64 + +# 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=riscv64 +export ARCH_OPENSSL=riscv64 +export ARCH_CFLAGS="" +export ARCH_CONFIGURE=riscv64-linux-gnu +export CC="$ARCH_CONFIGURE-gcc" +export ARCH_CMAKE_TOOLCHAIN=toolchain-riscv64.cmake +export ARCH_MESON_TOOLCHAIN=meson-riscv64.txt diff --git a/linux/toolchain-arm32.cmake b/linux/toolchain-arm32.cmake new file mode 100644 index 0000000..4d76f33 --- /dev/null +++ b/linux/toolchain-arm32.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) +set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-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) diff --git a/linux/toolchain-arm64.cmake b/linux/toolchain-arm64.cmake new file mode 100644 index 0000000..2ac1687 --- /dev/null +++ b/linux/toolchain-arm64.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER ${tools}/bin/aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-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) diff --git a/linux/toolchain-ppc64le.cmake b/linux/toolchain-ppc64le.cmake new file mode 100644 index 0000000..d14e61b --- /dev/null +++ b/linux/toolchain-ppc64le.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR ppc64le) +set(CMAKE_C_COMPILER ${tools}/bin/powerpc64le-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/powerpc64le-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) diff --git a/linux/toolchain-riscv64.cmake b/linux/toolchain-riscv64.cmake new file mode 100644 index 0000000..a7b93be --- /dev/null +++ b/linux/toolchain-riscv64.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) +set(CMAKE_C_COMPILER ${tools}/bin/riscv64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER ${tools}/bin/riscv64-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) diff --git a/linux/vars.sh b/linux/vars.sh index f342a02..956ee11 100755 --- a/linux/vars.sh +++ b/linux/vars.sh @@ -1,12 +1,24 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -MKXPZ_PREFIX=$(uname -m) +MKXPZ_PREFIX="$ARCH" +if [ "$MKXPZ_PREFIX" = "" ] +then + MKXPZ_PREFIX=$(uname -m) +fi export LDFLAGS="-L$DIR/build-${MKXPZ_PREFIX}/lib" export CFLAGS="-I$DIR/build-${MKXPZ_PREFIX}/include" MKXPZ_OLD_PC=$(pkg-config --variable pc_path pkg-config) +if [ "$ARCH_CONFIGURE" != "" ] +then + MKXPZ_OLD_PC="/usr/lib/$ARCH_CONFIGURE/pkgconfig" +fi # Try to load the stuff we built first export PKG_CONFIG_LIBDIR="$DIR/build-${MKXPZ_PREFIX}/lib/pkgconfig:$DIR/build-${MKXPZ_PREFIX}/lib64/pkgconfig:${MKXPZ_OLD_PC}" export PATH="$DIR/build-${MKXPZ_PREFIX}/bin:$PATH" export LD_LIBRARY_PATH="$DIR/build-${MKXPZ_PREFIX}/lib:${LD_LIBRARY_PATH}" -export MKXPZ_PREFIX="$DIR/build-${MKXPZ_PREFIX}" \ No newline at end of file +export MKXPZ_PREFIX="$DIR/build-${MKXPZ_PREFIX}" + +# Horrifying Ruby cross-compile bug workaround +MKXPZ_RUBY_PREFIX="$MKXPZ_PREFIX/$MKXPZ_PREFIX" +cp -a "$MKXPZ_RUBY_PREFIX"/* "$MKXPZ_PREFIX/"