mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2026-10-06 06:59:08 +08:00
* ports: add Cortex-M52 (Armv8.1-M) port support Add ThreadX port for Cortex-M52, supporting three toolchains: - GNU (GCC) - AC6 (Arm Compiler 6) - IAR Cortex-M52 is an Armv8.1-M Mainline processor sharing the same architecture profile as Cortex-M55 and Cortex-M85. The port is functionally identical to the existing Cortex-M85 port. * ports: update cortex_m52 port copy script,using it update content -Add cortex_m52 in threadx/scriprts/copy_armv8m.sh -Using updated copy_armv8m.sh to generate new cortex_m52 port content * Regenerated the Cortex-M52 port against dev and wired it into the checks The port was generated from ports_arch/ARMv8-M as it stood on master, which has since moved on. Rebasing onto dev and running scripts/copy_armv8_m.sh again brings the twelve stale files into line, which is the point of generating them: the core picks up every ARMv8-M fix made since without anyone porting it by hand. Among what it picks up: "MOV r0, 0" becomes "MOV r0, #0" in the schedule and system-return paths, the non-canonical immediate form that GNU as tolerates and LLVM's assembler rejects; and gnu/src/tx_initialize_low_level.S goes away, since the shared source no longer has it. Two integration points exist only on dev, so the original change could not have included them. cmake/cortex_m52.cmake, so the port can be selected the documented way. Every other Cortex-M core has one. It uses the hard float ABI, as Cortex-M55 and Cortex-M85 do. An entry in scripts/check_clang.sh, likewise with -mfloat-abi=hard. That flag is not decoration: -mcpu=cortex-m52 implies Helium, and building it soft-float ends in "multilib configuration error: No library available for MVE with soft-float ABI" on every file, which reads as a broken port rather than a missing flag. Verified after regenerating: scripts/copy_armv8_m.sh is a no-op, so the tree matches its source; all 14 assembly sources and 188 C sources compile for cortex-m52 with Arm Toolchain for Embedded 22.1.0. Note for anyone building with GNU tools: arm-none-eabi-gcc 13.2.1 rejects -mcpu=cortex-m52 outright. Support arrives in GCC 14. --------- Co-authored-by: Frédéric Desbiens <frederic.desbiens@eclipse-foundation.org> Assisted-by: Claude Code (Opus 5) <noreply@anthropic.com>
41 lines
1.6 KiB
CMake
41 lines
1.6 KiB
CMake
# Copyright (c) 2026 Eclipse ThreadX contributors
|
|
# SPDX-License-Identifier: MIT
|
|
# Some portions generated by Claude Code (Opus 5).
|
|
#
|
|
# Toolchain file for Arm Cortex-M52 using GNU tools.
|
|
#
|
|
# The FPU and the MVE unit come with the core, so the hard float ABI
|
|
# is selected here rather than left to the caller. scripts/check_clang.sh
|
|
# builds this core the same way.
|
|
|
|
# Name of the target
|
|
set(CMAKE_SYSTEM_NAME Generic)
|
|
set(CMAKE_SYSTEM_PROCESSOR cortex-m52)
|
|
|
|
set(THREADX_ARCH "cortex_m52")
|
|
set(THREADX_TOOLCHAIN "gnu")
|
|
|
|
# The hard float ABI is not optional here: -mcpu=cortex-m52 implies Helium, and
|
|
# the soft-float variant has no matching library.
|
|
set(MCPU_FLAGS "-mthumb -mcpu=cortex-m52")
|
|
set(VFP_FLAGS "-mfloat-abi=hard")
|
|
set(SPEC_FLAGS "--specs=nosys.specs")
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/arm-none-eabi.cmake)
|
|
|
|
# Pin the reference cross toolchain, as cmake/cortex_r52.cmake does. This core
|
|
# needs it rather than merely preferring it: arm-none-eabi-gcc only learned
|
|
# -mcpu=cortex-m52 in GCC 14, so a distribution compiler on PATH is likely to
|
|
# reject the port outright. Override with -DARM_TOOLCHAIN_PATH=<dir containing
|
|
# arm-none-eabi-gcc> to build with a different compiler. The check leaves PATH
|
|
# alone when the pinned directory is absent.
|
|
if(NOT DEFINED ARM_TOOLCHAIN_PATH)
|
|
set(ARM_TOOLCHAIN_PATH
|
|
"$ENV{HOME}/toolchains/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi/bin")
|
|
endif()
|
|
if(EXISTS "${ARM_TOOLCHAIN_PATH}/arm-none-eabi-gcc")
|
|
set(CMAKE_C_COMPILER "${ARM_TOOLCHAIN_PATH}/arm-none-eabi-gcc")
|
|
set(CMAKE_CXX_COMPILER "${ARM_TOOLCHAIN_PATH}/arm-none-eabi-g++")
|
|
set(CMAKE_ASM_COMPILER "${ARM_TOOLCHAIN_PATH}/arm-none-eabi-gcc")
|
|
endif()
|