Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 1 | ################################################################################ |
| 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 Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 26 | include host.mk |
Roman Okhrimenko | 4bc2810 | 2021-02-01 19:31:41 +0200 | [diff] [blame] | 27 | |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 28 | # Compilers |
| 29 | GCC_ARM := 1 |
| 30 | IAR := 2 |
| 31 | ARM := 3 |
| 32 | OTHER := 4 |
| 33 | |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 34 | ifeq ($(VERBOSE), 1) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 35 | $(info $(COMPILER)) |
| 36 | endif |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 37 | |
| 38 | # Path to the compiler installation |
| 39 | # NOTE: Absolute pathes for now for the sake of development |
| 40 | ifeq ($(HOST_OS), win) |
| 41 | ifeq ($(COMPILER), GCC_ARM) |
Roman Okhrimenko | 409941a | 2023-11-20 02:18:09 +0200 | [diff] [blame] | 42 | TOOLCHAIN_PATH ?= c:/Users/$(USERNAME)/ModusToolbox/tools_3.1/gcc |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 43 | MY_TOOLCHAIN_PATH := $(call get_os_path, $(TOOLCHAIN_PATH)) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 44 | 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 Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 49 | endif |
| 50 | |
| 51 | else 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 | |
| 58 | else ifeq ($(HOST_OS), linux) |
Roman Okhrimenko | 4bc2810 | 2021-02-01 19:31:41 +0200 | [diff] [blame] | 59 | TOOLCHAIN_PATH ?= /opt/gcc-arm-none-eabi |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 60 | GCC_PATH := $(TOOLCHAIN_PATH) |
| 61 | # executables |
| 62 | CC := "$(GCC_PATH)/bin/arm-none-eabi-gcc" |
| 63 | LD := $(CC) |
| 64 | endif |
| 65 | |
Roman Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 66 | PDL_ELFTOOL := $(TOOLCHAIN_PATH)/../cymcuelftool-1.0/bin/cymcuelftool |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 67 | |
| 68 | OBJDUMP := "$(GCC_PATH)/bin/arm-none-eabi-objdump" |
| 69 | OBJCOPY := "$(GCC_PATH)/bin/arm-none-eabi-objcopy" |
| 70 | |
| 71 | # Set flags for toolchain executables |
| 72 | ifeq ($(COMPILER), GCC_ARM) |
| 73 | # set build-in compiler flags |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 74 | CFLAGS_COMMON := -mthumb -ffunction-sections -fdata-sections -g -Wall -Wextra |
Roman Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 75 | CFLAGS_COMMON += -Wno-discarded-qualifiers -Wno-ignored-qualifiers # KILLME |
| 76 | |
| 77 | ifeq ($(WARN_AS_ERR), 1) |
| 78 | CFLAGS_COMMON += -Werror |
| 79 | endif |
| 80 | |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 81 | ifeq ($(BUILDCFG), Debug) |
Roman Okhrimenko | 883cb5b | 2024-03-28 17:22:33 +0200 | [diff] [blame^] | 82 | CFLAGS_SPECIAL ?= -Og -g3 -ffile-prefix-map=$(CURDIR)=. |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 83 | CFLAGS_COMMON += $(CFLAGS_SPECIAL) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 84 | else ifeq ($(BUILDCFG), Release) |
Roman Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 85 | ifeq ($(CFLAGS_OPTIMIZATION), ) |
| 86 | # Blinky upgrade releas XIP WORKAROUND |
| 87 | CFLAGS_COMMON += -Os -g -DNDEBUG |
| 88 | endif |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 89 | else |
Roman Okhrimenko | 4bc2810 | 2021-02-01 19:31:41 +0200 | [diff] [blame] | 90 | $(error BUILDCFG : '$(BUILDCFG)' is not supported) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 91 | endif |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 92 | |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 93 | CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_PLATFORM) $(INCLUDES) |
| 94 | |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 95 | CC_DEPEND = -MD -MP -MF |
| 96 | |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 97 | 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 Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 98 | |
| 99 | ifeq ($(WARN_AS_ERR), 1) |
| 100 | LDFLAGS_COMMON += -Wl,--fatal-warnings |
| 101 | endif |
| 102 | |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 103 | ifeq ($(BUILDCFG), Debug) |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 104 | LDFLAGS_SPECIAL ?= -Og |
| 105 | LDFLAGS_COMMON += $(LDFLAGS_SPECIAL) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 106 | else ifeq ($(BUILDCFG), Release) |
Roman Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 107 | ifeq ($(CFLAGS_OPTIMIZATION), ) |
| 108 | # Blinky upgrade releas XIP WORKAROUND |
| 109 | LDFLAGS_OPTIMIZATION ?= -Os |
| 110 | endif |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 111 | else |
Roman Okhrimenko | 4bc2810 | 2021-02-01 19:31:41 +0200 | [diff] [blame] | 112 | $(error BUILDCFG : '$(BUILDCFG)' is not supported) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 113 | endif |
| 114 | LDFLAGS_NANO := -L "$(GCC_PATH)/arm-none-eabi/lib/thumb/v6-m" |
Roman Okhrimenko | dc0ca08 | 2023-06-21 20:49:51 +0300 | [diff] [blame] | 115 | LDFLAGS := $(LDFLAGS_COMMON) $(LDFLAGS_NANO) $(LDFLAGS_PLATFORM) |
Roman Okhrimenko | 89ecdac | 2020-02-28 17:05:55 +0200 | [diff] [blame] | 116 | endif |
Roman Okhrimenko | 977b375 | 2022-03-31 14:40:48 +0300 | [diff] [blame] | 117 | |
| 118 | ############################################################################### |
| 119 | # Print debug information about all settings used and/or set in this file |
| 120 | ifeq ($(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)) |
| 149 | endif |