55a9172bc2
PR #1450 broke the Cygwin build. Refer to Issue #1672.
The use of of logic like:
EXTRA_LIBPATHS += -L "${dir ${shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcc.a}}"
fails when the Toolchain $(CC) is a native Windows toolchain. That is because the returned path is a Windows-style patch which cannot be handled by the make 'dir' command. Commit 4910d43ab0
reorganized a lot of definitions and replaced the correct code with the use of the limit make 'dir' command. The original code used the Bash dirname command which does not suffer from this limitation; it can handle both POSIX and Windows paths.
This was verified using the stm32f4discover:nsh toolchain with the Windows native ARM Embedded toolchain. That toolchain returns:
arm-none-eabi-gcc --print-file-name=libgcc.a
c:/program files (x86)/gnu tools arm embedded/9 2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/libgcc.a
107 lines
3.3 KiB
Plaintext
107 lines
3.3 KiB
Plaintext
############################################################################
|
|
# arch/arm/src/armv6-m/Toolchain.defs
|
|
#
|
|
# 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.
|
|
#
|
|
############################################################################
|
|
|
|
# Setup for the selected toolchain
|
|
|
|
#
|
|
# Handle old-style chip-specific toolchain names in the absence of
|
|
# a new-style toolchain specification, force the selection of a single
|
|
# toolchain and allow the selected toolchain to be overridden by a
|
|
# command-line selection.
|
|
#
|
|
|
|
ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_BUILDROOT)),y)
|
|
CONFIG_ARMV6M_TOOLCHAIN ?= BUILDROOT
|
|
endif
|
|
|
|
ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_GNU_EABIL)),y)
|
|
CONFIG_ARMV6M_TOOLCHAIN ?= GNU_EABI
|
|
endif
|
|
|
|
ifeq ($(filter y, $(CONFIG_ARMV6M_TOOLCHAIN_GNU_EABIW)),y)
|
|
CONFIG_ARMV6M_TOOLCHAIN ?= GNU_EABI
|
|
endif
|
|
|
|
#
|
|
# Supported toolchains
|
|
#
|
|
# TODO - It's likely that all of these toolchains now support the
|
|
# CortexM0. Since they are all GCC-based, we could almost
|
|
# certainly simplify this further.
|
|
#
|
|
# Each toolchain definition should set:
|
|
#
|
|
# CROSSDEV The GNU toolchain triple (command prefix)
|
|
# ARCHCPUFLAGS CPU-specific flags selecting the instruction set
|
|
# options, etc.
|
|
# MAXOPTIMIZATION The maximum optimization level that results in
|
|
# reliable code generation.
|
|
#
|
|
|
|
ifeq ($(CONFIG_DEBUG_CUSTOMOPT),y)
|
|
MAXOPTIMIZATION := $(CONFIG_DEBUG_OPTLEVEL)
|
|
endif
|
|
|
|
# NuttX buildroot under Linux or Cygwin
|
|
|
|
ifeq ($(CONFIG_ARMV6M_TOOLCHAIN),BUILDROOT)
|
|
CROSSDEV ?= arm-nuttx-eabi-
|
|
ARCHCPUFLAGS = -mcpu=cortex-m0 -mthumb -mfloat-abi=soft
|
|
endif
|
|
|
|
# Generic GNU EABI toolchain
|
|
|
|
ifeq ($(CONFIG_ARMV6M_TOOLCHAIN),GNU_EABI)
|
|
CROSSDEV ?= arm-none-eabi-
|
|
ARCHCPUFLAGS = -mcpu=cortex-m0 -mthumb -mfloat-abi=soft
|
|
endif
|
|
|
|
# Individual tools may limit the optimizatin level but, by default, the
|
|
# optimization level will be set to -Os
|
|
|
|
MAXOPTIMIZATION ?= -Os
|
|
|
|
# Default toolchain
|
|
|
|
CC = $(CROSSDEV)gcc
|
|
CXX = $(CROSSDEV)g++
|
|
CPP = $(CROSSDEV)gcc -E -P -x c
|
|
LD = $(CROSSDEV)ld
|
|
STRIP = $(CROSSDEV)strip --strip-unneeded
|
|
AR = $(CROSSDEV)ar rcs
|
|
NM = $(CROSSDEV)nm
|
|
OBJCOPY = $(CROSSDEV)objcopy
|
|
OBJDUMP = $(CROSSDEV)objdump
|
|
|
|
# Add the builtin library
|
|
|
|
EXTRA_LIBS += -lgcc
|
|
EXTRA_LIBPATHS += -L "${shell dirname "`$(CC) $(ARCHCPUFLAGS) --print-libgcc-file-name`"}"
|
|
|
|
ifneq ($(CONFIG_LIBM),y)
|
|
EXTRA_LIBS += -lm
|
|
EXTRA_LIBPATHS += -L "${shell dirname "`$(CC) $(ARCHCPUFLAGS) --print-file-name=libm.a`"}"
|
|
endif
|
|
|
|
ifeq ($(CONFIG_CXX_LIBSUPCXX),y)
|
|
EXTRA_LIBS += -lsupc++
|
|
EXTRA_LIBPATHS += -L "${shell dirname "`$(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a`"}"
|
|
endif
|