blob: 71a83481b5818f124fc20474f2bcd5118ecd23d4 [file] [log] [blame]
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +02001################################################################################
2# \file toolchains.mk
3# \version 1.0
4#
5# \brief
6# Makefile to describe supported toolchains for Cypress MCUBoot based applications.
7#
8################################################################################
9# \copyright
10# Copyright 2018-2019 Cypress Semiconductor Corporation
11# SPDX-License-Identifier: Apache-2.0
12#
13# Licensed under the Apache License, Version 2.0 (the "License");
14# you may not use this file except in compliance with the License.
15# You may obtain a copy of the License at
16#
17# http://www.apache.org/licenses/LICENSE-2.0
18#
19# Unless required by applicable law or agreed to in writing, software
20# distributed under the License is distributed on an "AS IS" BASIS,
21# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22# See the License for the specific language governing permissions and
23# limitations under the License.
24################################################################################
25
Roman Okhrimenko977b3752022-03-31 14:40:48 +030026include host.mk
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020027
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020028# Compilers
29GCC_ARM := 1
30IAR := 2
31ARM := 3
32OTHER := 4
33
Roman Okhrimenko977b3752022-03-31 14:40:48 +030034ifeq ($(VERBOSE), 1)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020035$(info $(COMPILER))
36endif
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020037
38# Path to the compiler installation
39# NOTE: Absolute pathes for now for the sake of development
40ifeq ($(HOST_OS), win)
41 ifeq ($(COMPILER), GCC_ARM)
Dovhal Artem (CSUKR CSS ICW SW FW 1)f7a3d1b2022-04-01 15:07:37 +000042 TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_2.4/gcc
Roman Okhrimenko977b3752022-03-31 14:40:48 +030043 MY_TOOLCHAIN_PATH := $(call get_os_path, $(TOOLCHAIN_PATH))
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020044 TOOLCHAIN_PATH := $(MY_TOOLCHAIN_PATH)
45 GCC_PATH := $(TOOLCHAIN_PATH)
46 # executables
47 CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
48 LD := $(CC)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020049 endif
50
51else ifeq ($(HOST_OS), osx)
52 TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
53 GCC_PATH := $(TOOLCHAIN_PATH)
54
55 CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
56 LD := $(CC)
57
58else ifeq ($(HOST_OS), linux)
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020059 TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020060 GCC_PATH := $(TOOLCHAIN_PATH)
61 # executables
62 CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc"
63 LD := $(CC)
64endif
65
66PDL_ELFTOOL := "hal/tools/$(HOST_OS)/elf/cymcuelftool"
67
68OBJDUMP := "$(GCC_PATH)/bin/arm-none-eabi-objdump"
69OBJCOPY := "$(GCC_PATH)/bin/arm-none-eabi-objcopy"
70
71# Set flags for toolchain executables
72ifeq ($(COMPILER), GCC_ARM)
73 # set build-in compiler flags
Roman Okhrimenko977b3752022-03-31 14:40:48 +030074 CFLAGS_COMMON := -mthumb -ffunction-sections -fdata-sections -g -Wall -Wextra
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020075 ifeq ($(BUILDCFG), Debug)
Roman Okhrimenko977b3752022-03-31 14:40:48 +030076 CFLAGS_SPECIAL ?= -Og -g3
77 CFLAGS_COMMON += $(CFLAGS_SPECIAL)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020078 else ifeq ($(BUILDCFG), Release)
Roman Okhrimenko977b3752022-03-31 14:40:48 +030079 CFLAGS_COMMON += -Os -g -DNDEBUG
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020080 else
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020081$(error BUILDCFG : '$(BUILDCFG)' is not supported)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020082 endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +030083
84 # ifeq ($(CORE), CM33)
85 # CFLAGS_PLATFORM := -c -mcpu=cortex-m33+nodsp --specs=nano.specs
86 # else
87 # CFLAGS_PLATFORM := -mcpu=cortex-$(CORE_SUFFIX) -mfloat-abi=soft -fno-stack-protector -fstrict-aliasing
88 # endif
89
90 # $CFLAGS_PLATFORM is defined in plaform specific mk file
91 CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)
92
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020093 CC_DEPEND = -MD -MP -MF
94
Roman Okhrimenko977b3752022-03-31 14:40:48 +030095 LDFLAGS_COMMON := -mcpu=cortex-$(CORE_SUFFIX) -mthumb -specs=nano.specs -ffunction-sections -fdata-sections -Wl,--gc-sections -ffat-lto-objects -g --enable-objc-gc
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020096 ifeq ($(BUILDCFG), Debug)
Roman Okhrimenko977b3752022-03-31 14:40:48 +030097 LDFLAGS_SPECIAL ?= -Og
98 LDFLAGS_COMMON += $(LDFLAGS_SPECIAL)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020099 else ifeq ($(BUILDCFG), Release)
Roman Okhrimenko13f79ed2021-03-11 19:05:41 +0200100 LDFLAGS_OPTIMIZATION ?= -Os
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200101 else
Roman Okhrimenko4bc28102021-02-01 19:31:41 +0200102$(error BUILDCFG : '$(BUILDCFG)' is not supported)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200103 endif
104 LDFLAGS_NANO := -L "$(GCC_PATH)/arm-none-eabi/lib/thumb/v6-m"
105 LDFLAGS := $(LDFLAGS_COMMON) $(LDFLAGS_NANO)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200106endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300107
108###############################################################################
109# Print debug information about all settings used and/or set in this file
110ifeq ($(VERBOSE), 1)
111$(info #### toolchains.mk ####)
112$(info ARM --> $(ARM))
113$(info BUILDCFG <-- $(BUILDCFG))
114$(info CC <-> $(CC))
115$(info CFLAGS --> $(CFLAGS))
116$(info CFLAGS_COMMON <-> $(CFLAGS_COMMON))
117$(info CFLAGS_PLATFORM <-- $(CFLAGS_PLATFORM))
118$(info CFLAGS_SPECIAL <-> $(CFLAGS_SPECIAL))
119$(info COMPILER <-- $(COMPILER))
120$(info CORE_SUFFIX <-- $(CORE_SUFFIX))
121$(info GCC_ARM --> $(GCC_ARM))
122$(info GCC_PATH <-> $(GCC_PATH))
123$(info HOST_OS <-- $(HOST_OS))
124$(info IAR --> $(IAR))
125$(info INCLUDES <-- $(INCLUDES))
126$(info LD --> $(LD))
127$(info LDFLAGS --> $(LDFLAGS))
128$(info LDFLAGS_COMMON <-> $(LDFLAGS_COMMON))
129$(info LDFLAGS_NANO <-> $(LDFLAGS_NANO))
130$(info LDFLAGS_OPTIMIZATION --> $(LDFLAGS_OPTIMIZATION))
131$(info LDFLAGS_SPECIAL <-> $(LDFLAGS_SPECIAL))
132$(info MY_TOOLCHAIN_PATH <-> $(MY_TOOLCHAIN_PATH))
133$(info OBJCOPY --> $(OBJCOPY))
134$(info OBJDUMP --> $(OBJDUMP))
135$(info OTHER --> $(OTHER))
136$(info PDL_ELFTOOL --> $(PDL_ELFTOOL))
137$(info TOOLCHAIN_PATH <-> $(TOOLCHAIN_PATH))
138$(info USERNAME <-- $(USERNAME))
139endif