blob: 144f62ed6f39f21d58cfea441e16ed461cd5c4a2 [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)
Roman Okhrimenko409941a2023-11-20 02:18:09 +020042 TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_3.1/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
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +030066PDL_ELFTOOL := $(TOOLCHAIN_PATH)/../cymcuelftool-1.0/bin/cymcuelftool
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020067
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 Okhrimenkodc0ca082023-06-21 20:49:51 +030075 CFLAGS_COMMON += -Wno-discarded-qualifiers -Wno-ignored-qualifiers # KILLME
76
77 ifeq ($(WARN_AS_ERR), 1)
78 CFLAGS_COMMON += -Werror
79 endif
80
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020081 ifeq ($(BUILDCFG), Debug)
Roman Okhrimenko977b3752022-03-31 14:40:48 +030082 CFLAGS_SPECIAL ?= -Og -g3
83 CFLAGS_COMMON += $(CFLAGS_SPECIAL)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020084 else ifeq ($(BUILDCFG), Release)
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +030085 ifeq ($(CFLAGS_OPTIMIZATION), )
86 # Blinky upgrade releas XIP WORKAROUND
87 CFLAGS_COMMON += -Os -g -DNDEBUG
88 endif
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020089 else
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020090$(error BUILDCFG : '$(BUILDCFG)' is not supported)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020091 endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +030092
Roman Okhrimenko977b3752022-03-31 14:40:48 +030093 CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES)
94
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020095 CC_DEPEND = -MD -MP -MF
96
Roman Okhrimenko977b3752022-03-31 14:40:48 +030097 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 Okhrimenkodc0ca082023-06-21 20:49:51 +030098
99 ifeq ($(WARN_AS_ERR), 1)
100 LDFLAGS_COMMON += -Wl,--fatal-warnings
101 endif
102
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200103 ifeq ($(BUILDCFG), Debug)
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300104 LDFLAGS_SPECIAL ?= -Og
105 LDFLAGS_COMMON += $(LDFLAGS_SPECIAL)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200106 else ifeq ($(BUILDCFG), Release)
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300107 ifeq ($(CFLAGS_OPTIMIZATION), )
108 # Blinky upgrade releas XIP WORKAROUND
109 LDFLAGS_OPTIMIZATION ?= -Os
110 endif
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200111 else
Roman Okhrimenko4bc28102021-02-01 19:31:41 +0200112$(error BUILDCFG : '$(BUILDCFG)' is not supported)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200113 endif
114 LDFLAGS_NANO := -L "$(GCC_PATH)/arm-none-eabi/lib/thumb/v6-m"
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300115 LDFLAGS := $(LDFLAGS_COMMON) $(LDFLAGS_NANO) $(LDFLAGS_PLATFORM)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200116endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300117
118###############################################################################
119# Print debug information about all settings used and/or set in this file
120ifeq ($(VERBOSE), 1)
121$(info #### toolchains.mk ####)
122$(info ARM --> $(ARM))
123$(info BUILDCFG <-- $(BUILDCFG))
124$(info CC <-> $(CC))
125$(info CFLAGS --> $(CFLAGS))
126$(info CFLAGS_COMMON <-> $(CFLAGS_COMMON))
127$(info CFLAGS_PLATFORM <-- $(CFLAGS_PLATFORM))
128$(info CFLAGS_SPECIAL <-> $(CFLAGS_SPECIAL))
129$(info COMPILER <-- $(COMPILER))
130$(info CORE_SUFFIX <-- $(CORE_SUFFIX))
131$(info GCC_ARM --> $(GCC_ARM))
132$(info GCC_PATH <-> $(GCC_PATH))
133$(info HOST_OS <-- $(HOST_OS))
134$(info IAR --> $(IAR))
135$(info INCLUDES <-- $(INCLUDES))
136$(info LD --> $(LD))
137$(info LDFLAGS --> $(LDFLAGS))
138$(info LDFLAGS_COMMON <-> $(LDFLAGS_COMMON))
139$(info LDFLAGS_NANO <-> $(LDFLAGS_NANO))
140$(info LDFLAGS_OPTIMIZATION --> $(LDFLAGS_OPTIMIZATION))
141$(info LDFLAGS_SPECIAL <-> $(LDFLAGS_SPECIAL))
142$(info MY_TOOLCHAIN_PATH <-> $(MY_TOOLCHAIN_PATH))
143$(info OBJCOPY --> $(OBJCOPY))
144$(info OBJDUMP --> $(OBJDUMP))
145$(info OTHER --> $(OTHER))
146$(info PDL_ELFTOOL --> $(PDL_ELFTOOL))
147$(info TOOLCHAIN_PATH <-> $(TOOLCHAIN_PATH))
148$(info USERNAME <-- $(USERNAME))
149endif