From cc50788acdb47bec2ae77c73229717e0579d8d96 Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Fri, 7 Aug 2026 09:13:18 +0300 Subject: [PATCH] Update target architecture and FPU settings for ARM toolchain --- README.md | 6 +++--- build-libraries.sh | 4 ++-- build-toolchain.sh | 17 +++++++++++++---- config/config-uClibc-ng-1.0.34 | 4 ++-- scripts/env.sh | 8 ++++---- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index dec1a12..2c5c641 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,10 @@ ## Характеристики целевой платформы -- **Архитектура:** ARM 32-bit (ARMv7-m) +- **Архитектура:** ARM 32-bit (ARMv7E-M, Cortex-M7 / i.MX RT1050) - **Набор инструкций:** Thumb - **ABI:** EABI с поддержкой FDPIC -- **Плавающая точка:** программная (soft float) +- **Плавающая точка:** аппаратная (FPU VFPv5, `fpv5-d16`, `-mfloat-abi=hard`) - **Потоки:** отключены - **TLS:** отключён @@ -105,7 +105,7 @@ source ./env.sh | Переменная | Значение | Назначение | |------------|----------|------------| | `CFLAGS` | `-O2` | Базовые флаги оптимизации | -| `CFLAGS_FOR_TARGET` | `-Os -mthumb` | Оптимизация по размеру, Thumb для target | +| `CFLAGS_FOR_TARGET` | `-Os -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard` | Оптимизация по размеру, Thumb, аппаратный FPU для target | | `LDFLAGS` | `-Wl,--fdpic` | Линковка с поддержкой FDPIC (при полной настройке toolchain) | ## Структура каталогов diff --git a/build-libraries.sh b/build-libraries.sh index d6dba1b..7b8923b 100755 --- a/build-libraries.sh +++ b/build-libraries.sh @@ -13,7 +13,7 @@ TARGET="arm-uclinuxfdpiceabi" TOOLCHAIN="${TARGET}" TOOLCHAIN_PATH="${INSTALL_DIR}/bin" CFLAGS_TOOLSET='-O2' -CFLAGS_TARGET='-Os -mthumb' +CFLAGS_TARGET='-Os -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard' _ORIG_PATH="$PATH" export SYSROOT="${SYSROOT_DIR}" @@ -38,7 +38,7 @@ export LDFLAGS="" export CFLAGS_FOR_TARGET="${CFLAGS_TARGET}" export CXXFLAGS_FOR_TARGET="${CFLAGS_TARGET}" export LDFLAGS_FOR_TARGET='-Wl,--fdpic' -export SUBARCH=armv7-m +export SUBARCH=armv7e-m export SUBMODE=thumb export PATH="${TOOLCHAIN_PATH}:${_ORIG_PATH}" diff --git a/build-toolchain.sh b/build-toolchain.sh index 2b3b1ed..64487ea 100755 --- a/build-toolchain.sh +++ b/build-toolchain.sh @@ -18,9 +18,14 @@ source "$(dirname "$0")/versions.sh" # Основные параметры тулчейна # ================================================================== TARGET="arm-uclinuxfdpiceabi" -SUBARCH="armv7-m" +SUBARCH="armv7e-m" SUBMODE="thumb" +# Cortex-M7 (i.MX RT1050) с аппаратным FPU (VFPv5, двойная точность) +TARGET_CPU="cortex-m7" +TARGET_FPU="fpv5-d16" +TARGET_FLOAT_ABI="hard" + TOP="$(pwd)" CONFIGS_DIR="${TOP}/config" @@ -36,7 +41,7 @@ KERNEL_SYSROOT_USR_DIR="${KERNEL_SYSROOT_DIR}/usr" KERNEL_SYSROOT_USR_INCLUDES_DIR="${KERNEL_SYSROOT_USR_DIR}/include" CFLAGS_TOOLSET='-O2' -CFLAGS_TARGET='-Os -mthumb' +CFLAGS_TARGET="-Os -mthumb -mcpu=${TARGET_CPU} -mfpu=${TARGET_FPU} -mfloat-abi=${TARGET_FLOAT_ABI}" export CFLAGS=$CFLAGS_TOOLSET export CFLAGS_FOR_TARGET=$CFLAGS_TARGET @@ -109,7 +114,9 @@ mkdir -p "${BUILD_DIR}/gcc1" && cd "${BUILD_DIR}/gcc1" "${SRC_GCC}/configure" \ --target="${TARGET}" \ --prefix="${INSTALL_DIR}" \ - --with-arch="${SUBARCH}" \ + --with-cpu="${TARGET_CPU}" \ + --with-fpu="${TARGET_FPU}" \ + --with-float="${TARGET_FLOAT_ABI}" \ --with-mode="${SUBMODE}" \ --without-headers \ --with-newlib \ @@ -186,7 +193,9 @@ mkdir -p "${BUILD_DIR}/gcc2" && cd "${BUILD_DIR}/gcc2" --target="${TARGET}" \ --prefix="${INSTALL_DIR}" \ --with-sysroot="${KERNEL_SYSROOT_DIR}" \ - --with-arch="${SUBARCH}" \ + --with-cpu="${TARGET_CPU}" \ + --with-fpu="${TARGET_FPU}" \ + --with-float="${TARGET_FLOAT_ABI}" \ --with-mode="${SUBMODE}" \ --enable-languages=c,c++ \ --disable-threads \ diff --git a/config/config-uClibc-ng-1.0.34 b/config/config-uClibc-ng-1.0.34 index 5cbc947..e129caa 100644 --- a/config/config-uClibc-ng-1.0.34 +++ b/config/config-uClibc-ng-1.0.34 @@ -52,8 +52,8 @@ ARCH_WANTS_LITTLE_ENDIAN=y ARCH_HAS_MMU=y # ARCH_USE_MMU is not set UCLIBC_HAS_FLOATS=y -# UCLIBC_HAS_FPU is not set -UCLIBC_HAS_SOFT_FLOAT=y +UCLIBC_HAS_FPU=y +# UCLIBC_HAS_SOFT_FLOAT is not set DO_C99_MATH=y DO_XSI_MATH=y UCLIBC_HAS_LONG_DOUBLE_MATH=y diff --git a/scripts/env.sh b/scripts/env.sh index 12951db..1f0f36c 100755 --- a/scripts/env.sh +++ b/scripts/env.sh @@ -1,10 +1,10 @@ TOP=`pwd` TARGET=arm-uclinuxfdpiceabi -CFLAGS_TOOLSET='-O2' -CFLAGS_TARGET='-Os -mthumb' +CFLAGS_TOOLSET='-O2' +CFLAGS_TARGET='-Os -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard' CFLAGS=$CFLAGS_TOOLSET CFLAGS_FOR_TARGET=$CFLAGS_TARGET CXXFLAGS_FOR_TARGET=$CFLAGS_TARGET -SUBARCH=armv7-m -SUBMODE=thumb +SUBARCH=armv7e-m +SUBMODE=thumb PATH=${TOP}/${TARGET}/bin:${PATH}