Wirepas SDK
makefile_common.mk
Go to the documentation of this file.
1include makefile_color.mk
2
3# Minimum binaries version required by this SDK version
4MIN_BOOTLOADER_VERSION := 7
5MIN_STACK_VERSION := 5.5.0.0
6
7# SDK itself
8SDK_PATH := .
9INCLUDES := -I$(SDK_PATH)
10
11build_directory?= build/
12board_directory?= board/
13
14# Manage verbosity
15# Command are prefixed by @(D) or @(DD)
16# By default all is silent
17D=@
18DD=@
19
20ifeq ($(V),2)
21# Explicitly print everything
22D=
23DD=
24else ifeq ($(V), 1)
25# Explicitly print level 1
26D=
27endif
28
29# General SDK folder structure
30API_PATH := api/
31UTIL_PATH := util/
32HAL_API_PATH := mcu/hal_api/
33WP_LIB_PATH := libraries/
34GLOBAL_BUILD := $(build_directory)
35BOARDS_PATH := $(board_directory)
36BOARDS_PATH_INTERNAL := board_internal/
37MCU_PATH := mcu/
38
39# General compiler flags (Define it before specific makefile in order to allow app to overwrite it)
40CFLAGS := -Wall -Werror -Wextra
41CFLAGS += -std=gnu99 -mthumb -nostartfiles -lgcc -lnosys -ggdb --specs=nano.specs
42CFLAGS += -Os -ffunction-sections -fdata-sections
43
44# Flags for linker
45LDFLAGS := -Wl,--gc-sections -Wl,-L$(MCU_PATH)common/linker
46
47# include global config file
48-include config.mk
49
50# Check that a correct version of python is installed by trying to launch check_python
51# This script has python3 shebang so try it without specifying interpreter
52PYTHON_STATUS := $(shell tools/check_python.py > /dev/null 2>&1; echo $$?)
53ifneq ($(PYTHON_STATUS),0)
54ifeq ($(python_interpreter),)
55python=python
56else
57python=$(python_interpreter)
58endif
59# It looks like python3 cannot be found or does not exist as a cmd (windows)
60# Force the launch with python cmd
61PYTHON_STATUS := $(shell $(python) tools/check_python.py > /dev/null; echo $$?)
62ifneq ($(PYTHON_STATUS),0)
63$(error Cannot find a suitable python version. You can force the python interpreter from config.mk)
64endif
65# Display a message if python version is 2.
66VERSION := $(shell $(python) tools/check_python.py)
67ifeq ($(VERSION),2)
68$(warning ***********************************************************************)
69$(warning "SDK supports python3 and python2 but uses python3 by default.)
70$(warning "It looks like python3 is not installed on your system.)
71$(warning "Using the python2 fallback for now but python2 support will be removed in a future release.)
72$(warning ***********************************************************************)
73endif
74endif
75
76#
77# Tools
78#
79# Prefix for Arm tools
80PREFIX := $(arm_toolchain)arm-none-eabi-
81
82# Toolchain programs
83CC := $(PREFIX)gcc
84AR := $(PREFIX)ar
85OBJCOPY := $(PREFIX)objcopy
86RM := rm
87MV := mv
88CP := cp
89MKDIR := mkdir -p
90CMP := cmp -s
91SCRAT_GEN := $(python) tools/genscratchpad.py
92HEX_GEN := $(python) tools/genhex.py
93HEXTOOL := $(python) tools/hextool.py
94FMW_SEL := $(python) tools/firmware_selector.py
95BOOT_CONF := $(python) tools/bootloader_config.py
96BL_UPD_CONF := $(python) tools/bl_updater_config.py
97WIZARD := $(python) tools/sdk_wizard.py
98HEX2ARRAY32 := $(python) tools/hextoarray32.py
99MAKE := make
100
101# List of available boards found under board/
102AVAILABLE_BOARDS := $(patsubst $(BOARDS_PATH)%/,%,$(sort $(dir $(wildcard $(BOARDS_PATH)*/.))))
103
104# Generic name of stack
105FIRMWARE_NAME := wpc_stack
106
107ifeq (,$(filter clean_all,$(MAKECMDGOALS)))
108ifeq (,$(filter doxygen,$(MAKECMDGOALS)))
109ifeq ($(target_board),)
110$(error No board defined, please use target_board=... on your command line. Available boards are: $(AVAILABLE_BOARDS))
111endif
112endif
113endif
114
115BOARD_FOLDER := $(BOARDS_PATH)$(target_board)
116
117ifeq (,$(wildcard $(BOARD_FOLDER)))
118$(error Board $(target_board) doesn't exist. Available boards are: $(AVAILABLE_BOARDS))
119endif
120
121# Board config file
122BOARD_CONFIG := $(BOARD_FOLDER)/config.mk
123
124# Include board specific config
125-include $(BOARD_CONFIG)
126
127# Include makefile for mcu family
128-include $(MCU_PATH)$(MCU_FAMILY)/makefile
129
130# Folder for Wirepas stack binary image
131IMAGE_PATH := image/
132
133# Folder for compressed archives of binaries
134ARCHIVE_PATH := image/
135
136# Add new flags as board and mcu are known
137CFLAGS += -DTARGET_BOARD=$(target_board)
138CFLAGS += -DMCU=$(MCU)
139CFLAGS += -DMCU_SUB=$(MCU_SUB)
140
141MCU_UPPER=$(shell echo $(MCU) | tr a-z A-Z)
142CFLAGS += -D$(MCU_UPPER)
143
144CFLAGS += -march=$(ARCH)
145
146INCLUDES += -I$(MCU_PATH)common/cmsis -I$(BOARD_FOLDER)
147
148# Folder where the application sources are located (and config file)
149# Can be in different folders, try them one by one
150APP_POSSIBLE_FOLDER := source/*/$(app_name)/ source/$(app_name)/
151APP_POSSIBLE_FOLDER += $(app_extra_folder)/$(app_name)/
152
153APP_SRCS_PATH := $(wildcard $(APP_POSSIBLE_FOLDER))
154ifeq (,$(wildcard $(APP_SRCS_PATH)))
155$(error App $(app_name) doesn't exist)
156endif
157
158# Check if an alternative config is given
159ifeq ($(app_config),)
160APP_CONFIG_FILE = config.mk
161APP_NAME := $(app_name)
162else
163$(info Using alternate app config: $(app_config))
164APP_CONFIG_FILE = $(app_config).mk
165# Modify app_name for build folder
166APP_NAME := $(app_name)_$(app_config)
167endif
168
169APP_CONFIG = $(APP_SRCS_PATH)$(APP_CONFIG_FILE)
170ifeq (,$(wildcard $(APP_CONFIG)))
171$(error Config file $(APP_CONFIG) doesn't exist)
172endif
173
174# Include app specific config
175include $(APP_CONFIG)
176
177# Build prefixes
178BUILDPREFIX := $(GLOBAL_BUILD)$(target_board)/
179BUILDPREFIX_APP := $(BUILDPREFIX)$(APP_NAME)/
180# Stack is under an app specific folder as config may depend on app
181BUILDPREFIX_STACK := $(BUILDPREFIX_APP)stack/
182# Bootloader is under an app specific folder as config may depend on app (unlocked/locked)
183BUILDPREFIX_BOOTLOADER := $(BUILDPREFIX_APP)bootloader/
184BUILDPREFIX_TEST_BOOTLOADER := $(BUILDPREFIX_APP)bootloader_test/
185# Bootloader updater is under an app specific folder as it depends on bootloader
186BUILDPREFIX_BL_UPDATER := $(BUILDPREFIX_APP)bl_updater/
187# Board-specific files in archive are extracted here for processing
188BUILDPREFIX_IMAGE := $(BUILDPREFIX_APP)image/
189
190# Where to extract binaries from archive
191EXTRACT_PATH := $(BUILDPREFIX_IMAGE)
192
193# Where to search binaries from, in order
194FIRMWARE_PATH := $(EXTRACT_PATH):$(IMAGE_PATH)
195
196BOOTLOADER_HEX := $(BUILDPREFIX_BOOTLOADER)bootloader.hex
197BOOTLOADER_TEST_HEX := $(BUILDPREFIX_APP)bootloader_test/bootloader_test.hex
198BOOTLOADER_CONFIG_INI := $(BUILDPREFIX_APP)bootloader_full_config.ini
199
200BL_UPDATER_HEX := $(BUILDPREFIX_BL_UPDATER)bl_updater.hex
201BL_UPDATER_CMD_LIST := $(APP_SRCS_PATH)bl_updater_cmd_list.conf
202BL_UPDATER_NEW_BL_DATA := $(BUILDPREFIX_BL_UPDATER)new_bootloader_data.c
203BL_UPDATER_CONFIG := $(BUILDPREFIX_BL_UPDATER)bl_updater_config.c
204BL_UPDATER_STACK_BACKUP := $(BUILDPREFIX_BL_UPDATER)stack_backup.c
205BL_UPDATER_OLD_CONFIG_INI := $(BUILDPREFIX_BL_UPDATER)old_bootloader_config.ini
206BL_UPDATER_STACK_HEX := $(BUILDPREFIX_STACK)$(FIRMWARE_NAME)_for_bl_updater.hex
207BL_UPDATER_BUILD_VARIABLES_MK := $(BUILDPREFIX_BL_UPDATER)old_bootloader_build_variables.mk
208
209STACK_HEX := $(BUILDPREFIX_STACK)$(FIRMWARE_NAME).hex
210STACK_WITH_BL_UPDATER_HEX := $(BUILDPREFIX_STACK)$(FIRMWARE_NAME)_with_bl_updater.hex
211STACK_CONF := $(BUILDPREFIX_STACK)$(FIRMWARE_NAME).conf
212
213APP_HEX := $(BUILDPREFIX_APP)$(APP_NAME).hex
214
215# Build-time make variables that depend on the selected configuration
216BUILD_VARIABLES_MK := $(BUILDPREFIX_APP)build_variables.mk
217
218# Files to track make command line parameters, to do a rebuild after any changes
219MAKE_PARAMS_FILE := $(BUILDPREFIX_APP)make_params.txt
220MAKE_PARAMS_TEMP_FILE := $(BUILDPREFIX_APP)make_params_temp.txt
221
222mac_profile?=ism_24_ghz