mirror of
https://github.com/diasurgical/DevilutionX.git
synced 2026-10-11 22:29:54 +00:00
Miyoo Mini: Update build toolchain to GCC 13
This commit is contained in:
committed by
Gleb Mazovetskiy
parent
e318b5e44c
commit
cbdfd03986
@@ -1,51 +1,138 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
TOOLCHAIN_VERSION="v0.0.3"
|
||||
GCC_VERSION="13.3.0"
|
||||
GCC_SHA512="ed5f2f4c6ed2c796fcf2c93707159e9dbd3ddb1ba063d549804dd68cdabbb6d550985ae1c8465ae9a336cfe29274a6eb0f42e21924360574ebd8e5d5c7c9a801"
|
||||
|
||||
MIYOO_TOOLCHAIN="/opt/miyoomini-toolchain"
|
||||
MIYOO_SYSROOT="${MIYOO_TOOLCHAIN}/arm-linux-gnueabihf/sysroot"
|
||||
|
||||
MODERN_TOOLCHAIN="/opt/miyoomini-gcc13"
|
||||
MODERN_BINUTILS="${MODERN_TOOLCHAIN}/binutils"
|
||||
|
||||
main() {
|
||||
install_dependencies
|
||||
install_toolchain
|
||||
}
|
||||
|
||||
install_toolchain() {
|
||||
TOOLCHAIN_VERSION=v0.0.3
|
||||
TOOLCHAIN_TAR="miyoomini-toolchain.tar.xz"
|
||||
|
||||
TOOLCHAIN_ARCH=`uname -m`
|
||||
if [ "$TOOLCHAIN_ARCH" = "aarch64" ]; then
|
||||
TOOLCHAIN_REPO=miyoomini-toolchain-buildroot-aarch64
|
||||
else
|
||||
TOOLCHAIN_REPO=miyoomini-toolchain-buildroot
|
||||
fi
|
||||
|
||||
TOOLCHAIN_URL="https://github.com/shauninman/$TOOLCHAIN_REPO/releases/download/$TOOLCHAIN_VERSION/$TOOLCHAIN_TAR"
|
||||
|
||||
cd /opt
|
||||
wget "$TOOLCHAIN_URL"
|
||||
echo "extracting remote toolchain $TOOLCHAIN_VERSION ($TOOLCHAIN_ARCH)"
|
||||
|
||||
tar xf "./$TOOLCHAIN_TAR"
|
||||
rm -rf "./$TOOLCHAIN_TAR"
|
||||
install_modern_gcc
|
||||
install_modern_binutils
|
||||
}
|
||||
|
||||
install_dependencies() {
|
||||
apt-get -y update && apt-get -y install \
|
||||
apt-get -y update
|
||||
apt-get -y install \
|
||||
bc \
|
||||
binutils-arm-linux-gnueabihf \
|
||||
bison \
|
||||
build-essential \
|
||||
bzip2 \
|
||||
bzr \
|
||||
cmake \
|
||||
cmake-curses-gui \
|
||||
cpio \
|
||||
flex \
|
||||
gettext \
|
||||
git \
|
||||
libgmp-dev \
|
||||
libmpc-dev \
|
||||
libmpfr-dev \
|
||||
libncurses5-dev \
|
||||
make \
|
||||
rsync \
|
||||
scons \
|
||||
smpq \
|
||||
smpq \
|
||||
tree \
|
||||
unzip \
|
||||
wget \
|
||||
xz-utils \
|
||||
zip
|
||||
}
|
||||
|
||||
install_toolchain() {
|
||||
TOOLCHAIN_TAR="miyoomini-toolchain.tar.xz"
|
||||
TOOLCHAIN_ARCH="$(uname -m)"
|
||||
|
||||
if [ "$TOOLCHAIN_ARCH" = "aarch64" ]; then
|
||||
TOOLCHAIN_REPO="miyoomini-toolchain-buildroot-aarch64"
|
||||
else
|
||||
TOOLCHAIN_REPO="miyoomini-toolchain-buildroot"
|
||||
fi
|
||||
|
||||
TOOLCHAIN_URL="https://github.com/shauninman/${TOOLCHAIN_REPO}/releases/download/${TOOLCHAIN_VERSION}/${TOOLCHAIN_TAR}"
|
||||
|
||||
cd /opt
|
||||
wget "$TOOLCHAIN_URL"
|
||||
|
||||
echo "extracting remote toolchain ${TOOLCHAIN_VERSION} (${TOOLCHAIN_ARCH})"
|
||||
|
||||
tar xf "./${TOOLCHAIN_TAR}"
|
||||
rm -f "./${TOOLCHAIN_TAR}"
|
||||
}
|
||||
|
||||
install_modern_gcc() {
|
||||
if [ -x "${MODERN_TOOLCHAIN}/bin/arm-linux-gnueabihf-g++" ]; then
|
||||
echo "GCC ${GCC_VERSION} Miyoo toolchain already installed"
|
||||
return
|
||||
fi
|
||||
|
||||
WORK_DIR="/tmp/miyoomini-gcc-${GCC_VERSION}"
|
||||
SOURCE_DIR="${WORK_DIR}/gcc-${GCC_VERSION}"
|
||||
BUILD_DIR="${WORK_DIR}/build"
|
||||
GCC_TAR="gcc-${GCC_VERSION}.tar.xz"
|
||||
GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/${GCC_TAR}"
|
||||
|
||||
rm -rf "$WORK_DIR"
|
||||
mkdir -p "$WORK_DIR"
|
||||
|
||||
cd "$WORK_DIR"
|
||||
|
||||
echo "downloading GCC ${GCC_VERSION}"
|
||||
wget "$GCC_URL"
|
||||
|
||||
echo "${GCC_SHA512} ${GCC_TAR}" | sha512sum -c -
|
||||
|
||||
tar xf "$GCC_TAR"
|
||||
mkdir "$BUILD_DIR"
|
||||
cd "$BUILD_DIR"
|
||||
|
||||
"${SOURCE_DIR}/configure" \
|
||||
--target=arm-linux-gnueabihf \
|
||||
--prefix="$MODERN_TOOLCHAIN" \
|
||||
--with-sysroot="$MIYOO_SYSROOT" \
|
||||
--with-build-sysroot="$MIYOO_SYSROOT" \
|
||||
--disable-bootstrap \
|
||||
--disable-multilib \
|
||||
--disable-nls \
|
||||
--enable-languages=c,c++ \
|
||||
--disable-libsanitizer \
|
||||
--disable-libquadmath \
|
||||
--disable-libgomp
|
||||
|
||||
make -j"$(getconf _NPROCESSORS_ONLN)" \
|
||||
all-gcc \
|
||||
all-target-libgcc \
|
||||
all-target-libstdc++-v3
|
||||
|
||||
make \
|
||||
install-gcc \
|
||||
install-target-libgcc \
|
||||
install-target-libstdc++-v3
|
||||
|
||||
rm -rf "$WORK_DIR"
|
||||
|
||||
echo "installed GCC ${GCC_VERSION} Miyoo toolchain"
|
||||
}
|
||||
|
||||
install_modern_binutils() {
|
||||
# GCC 13 emits architecture extensions unsupported by the old
|
||||
# Miyoo binutils 2.32. Use Ubuntu 24.04's ARM binutils instead.
|
||||
mkdir -p "$MODERN_BINUTILS"
|
||||
|
||||
ln -sf /usr/bin/arm-linux-gnueabihf-as \
|
||||
"${MODERN_BINUTILS}/as"
|
||||
|
||||
ln -sf /usr/bin/arm-linux-gnueabihf-ld \
|
||||
"${MODERN_BINUTILS}/ld"
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
@@ -1,12 +1,52 @@
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_VERSION 1)
|
||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
||||
set(CMAKE_PROGRAM_PATH "/opt/miyoomini-toolchain/bin")
|
||||
set(CMAKE_SYSROOT "/opt/miyoomini-toolchain/arm-linux-gnueabihf/sysroot")
|
||||
set(CMAKE_FIND_ROOT_PATH "/opt/miyoomini-toolchain/arm-linux-gnueabihf/sysroot")
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(ENV{PKG_CONFIG_SYSROOT_DIR} "/opt/miyoomini-toolchain/arm-linux-gnueabihf/sysroot")
|
||||
set(CMAKE_C_COMPILER "/opt/miyoomini-toolchain/bin/arm-linux-gnueabihf-gcc")
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_VERSION 1)
|
||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
||||
|
||||
set(MIYOO_SYSROOT
|
||||
"/opt/miyoomini-toolchain/arm-linux-gnueabihf/sysroot")
|
||||
|
||||
set(MIYOO_GCC_PREFIX
|
||||
"/opt/miyoomini-gcc13")
|
||||
|
||||
set(MIYOO_BINUTILS
|
||||
"${MIYOO_GCC_PREFIX}/binutils")
|
||||
|
||||
set(CMAKE_SYSROOT "${MIYOO_SYSROOT}")
|
||||
set(CMAKE_FIND_ROOT_PATH "${MIYOO_SYSROOT}")
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
set(ENV{PKG_CONFIG_SYSROOT_DIR} "${MIYOO_SYSROOT}")
|
||||
|
||||
set(CMAKE_C_COMPILER
|
||||
"${MIYOO_GCC_PREFIX}/bin/arm-linux-gnueabihf-gcc")
|
||||
|
||||
set(CMAKE_CXX_COMPILER
|
||||
"${MIYOO_GCC_PREFIX}/bin/arm-linux-gnueabihf-g++")
|
||||
|
||||
set(CMAKE_AR
|
||||
"/usr/bin/arm-linux-gnueabihf-ar")
|
||||
|
||||
set(CMAKE_RANLIB
|
||||
"/usr/bin/arm-linux-gnueabihf-ranlib")
|
||||
|
||||
set(CMAKE_STRIP
|
||||
"/usr/bin/arm-linux-gnueabihf-strip")
|
||||
|
||||
set(MIYOO_ARCH_FLAGS
|
||||
"-marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7ve")
|
||||
|
||||
# -B selects modern ARM binutils without changing the runtime/sysroot.
|
||||
set(CMAKE_C_FLAGS_INIT
|
||||
"-B${MIYOO_BINUTILS}/ ${MIYOO_ARCH_FLAGS}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_INIT
|
||||
"-B${MIYOO_BINUTILS}/ ${MIYOO_ARCH_FLAGS}")
|
||||
|
||||
# libstdc++ and libgcc were built against the Miyoo sysroot and are linked
|
||||
# statically so they do not need to be shipped with OnionOS/MiniUI.
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT
|
||||
"-B${MIYOO_BINUTILS}/ -static-libstdc++ -static-libgcc")
|
||||
|
||||
Reference in New Issue
Block a user