From c43c91816d2462b4ce5062b1dc864949273b209e Mon Sep 17 00:00:00 2001 From: yanghuatao Date: Fri, 1 Mar 2024 10:55:19 +0800 Subject: [PATCH] toolchain/ghs: add ghs link script for mps2-an500 platform Signed-off-by: yanghuatao --- arch/arm/src/armv7-m/Toolchain.defs | 15 +++ boards/arm/mps/mps2-an500/scripts/Make.defs | 14 ++- .../arm/mps/mps2-an500/scripts/ghs-flash.ld | 98 +++++++++++++++++++ 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 boards/arm/mps/mps2-an500/scripts/ghs-flash.ld diff --git a/arch/arm/src/armv7-m/Toolchain.defs b/arch/arm/src/armv7-m/Toolchain.defs index 1b33e9c9b6a98..a2378f7c1d4d5 100644 --- a/arch/arm/src/armv7-m/Toolchain.defs +++ b/arch/arm/src/armv7-m/Toolchain.defs @@ -133,6 +133,21 @@ else ifeq ($(CONFIG_ARM_TOOLCHAIN_ARMCLANG),y) LDFLAGS += --cpu=Cortex-M3 endif +else ifeq ($(CONFIG_ARM_TOOLCHAIN_GHS),y) + MKDEP = $(TOPDIR)$(DELIM)tools$(DELIM)mknulldeps.sh + + undefine PREPROCESS + define PREPROCESS + $(ECHO_BEGIN)"CPP: $1->$2 " + $(Q) $(CPP) $(CPPFLAGS) $($(strip $1)_CPPFLAGS) -filetype.cpp $1 -o $2 + $(ECHO_END) + endef + + undefine ARCHIVE + define ARCHIVE + $(AR) $2 -archive -o $1 + endef + endif ifeq ($(CONFIG_ARMV7M_STACKCHECK),y) diff --git a/boards/arm/mps/mps2-an500/scripts/Make.defs b/boards/arm/mps/mps2-an500/scripts/Make.defs index 0454233686d14..45e22c1e2be3b 100644 --- a/boards/arm/mps/mps2-an500/scripts/Make.defs +++ b/boards/arm/mps/mps2-an500/scripts/Make.defs @@ -22,7 +22,19 @@ include $(TOPDIR)/.config include $(TOPDIR)/tools/Config.mk include $(TOPDIR)/arch/arm/src/armv7-m/Toolchain.defs -LDSCRIPT = flash.ld +ifeq ($(CONFIG_ARM_TOOLCHAIN_GHS),y) + define POSTBUILD + $(GMEMFILE) nuttx -o nuttx.bin + endef + + LDSCRIPT = ghs-flash.ld +else + define POSTBUILD + $(OBJCOPY) -O binary nuttx nuttx.bin + endef + + LDSCRIPT = flash.ld +endif ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT) diff --git a/boards/arm/mps/mps2-an500/scripts/ghs-flash.ld b/boards/arm/mps/mps2-an500/scripts/ghs-flash.ld new file mode 100644 index 0000000000000..175694ce60b1f --- /dev/null +++ b/boards/arm/mps/mps2-an500/scripts/ghs-flash.ld @@ -0,0 +1,98 @@ +/**************************************************************************** + * boards/arm/mps/mps2-an500/scripts/ghs-flash.ld + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +MEMORY +{ + flash (rwx) : ORIGIN = 0x00000000, LENGTH = 4M +} + +SECTIONS +{ + .text ALIGN(4) : { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text) + "*(.text.*)" + *(.fixup) + *(.gnu.warning) + *(.rodata) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + _etext = ABSOLUTE(.); + } > flash + + .syscall : > . + + .init_section ALIGN(4) : { + _sinit = ABSOLUTE(.); + *(.init_array) + *(.ctors) + _einit = ABSOLUTE(.); + } > flash + + .ARM.extab ALIGN(4) : { + "*(.ARM.extab*)" + } > flash + + .ARM.exidx ALIGN(4) : { + __exidx_start = ABSOLUTE(.); + "*(.ARM.exidx*)" + __exidx_end = ABSOLUTE(.); + } > flash + + .tdata ALIGN(4) : { + _stdata = ABSOLUTE(.); + *(.tdata) + "*(.tdata.*)" + _etdata = ABSOLUTE(.); + } > flash + + .tbss : { + _stbss = ABSOLUTE(.); + *(.tbss) + *(.tcommon) + _etbss = ABSOLUTE(.); + } > flash + + _eronly = ENDADDR(.tbss); + + .ram_vectors : { + *(.ram_vectors) + } > flash + + .data ALIGN(4) : { + _sdata = ABSOLUTE(.); + *(.data) + "*(.data.*)" + . = ALIGN(4); + _edata = ABSOLUTE(.); + } > flash + + .bss ALIGN(4) : { + _sbss = ABSOLUTE(.); + *(.bss) + "*(.bss.*)" + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > flash +}