Miyoo Mini: Update build toolchain to GCC 13

This commit is contained in:
Christoph Gernert
2026-09-28 05:55:31 +01:00
committed by Gleb Mazovetskiy
parent e318b5e44c
commit cbdfd03986
2 changed files with 162 additions and 35 deletions
+110 -23
View File
@@ -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
+52 -12
View File
@@ -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")