1 # Copyright 2015-2018 Espressif Systems (Shanghai) PTE LTD
3 # Functionality common to both top-level project makefile (project.mk)
4 # and component makefiles (component_wrapper.mk)
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
18 # Include project config makefile, if it exists.
20 # (Note that we only rebuild this makefile automatically for some
21 # targets, see project_config.mk for details.)
22 SDKCONFIG_MAKEFILE ?
= $(abspath
$(BUILD_DIR_BASE
)/include/config
/auto.conf
)
23 -include $(SDKCONFIG_MAKEFILE
)
24 export SDKCONFIG_MAKEFILE
# sub-makes (like bootloader) will reuse this path
26 # BATCH_BUILD flag disables interactive terminal features, defaults to verbose build
31 #Handling of V=1/VERBOSE=1 flag
33 # if V=1, $(summary) does nothing and $(details) will echo extra details
34 # if V is unset or not 1, $(summary) echoes a summary and $(details) does nothing
44 # disable echoing of commands, directory names
48 ifdef CONFIG_MAKE_WARN_UNDEFINED_VARIABLES
49 MAKEFLAGS
+= --warn-undefined-variables
52 # General make utilities
54 # convenience variable for printing an 80 asterisk wide separator line
55 SEPARATOR
:="*******************************************************************************"
57 # macro to remove quotes from an argument, ie $(call dequote,$(CONFIG_BLAH))
61 # " comment kept here to keep syntax highlighting happy
64 # macro to keep an absolute path as-is, but resolve a relative path
65 # against a particular parent directory
67 # $(1) path to resolve
68 # $(2) directory to resolve non-absolute path against
70 # Path and directory don't have to exist (definition of a "relative
71 # path" is one that doesn't start with /)
73 # $(2) can contain a trailing forward slash or not, result will not
74 # double any path slashes.
76 # example $(call resolvepath,$(CONFIG_PATH),$(CONFIG_DIR))
78 $(foreach dir,$(1),$(if
$(filter /%,$(dir)),$(dir),$(subst //,/,$(2)/$(dir))))
82 # macro to include a target only if it's on the list of targets that make
85 # This allows you to have something like an "order-only phony prerequisite",
86 # ie a prerequisite that determines an order phony targets have to run in.
88 # Because normal order-only prerequisites don't work with phony targets.
90 # example $(call prereq_if_explicit,erase_flash)
91 define prereq_if_explicit
92 $(filter $(1),$(MAKECMDGOALS
))
95 # macro to kill duplicate items in a list without messing up the sort order of the list.
96 # Will only keep the unique items; if there are non-unique items in the list, it will remove
97 # the later recurring ones so only the first one remains.
98 # Copied from http://stackoverflow.com/questions/16144115/makefile-remove-duplicate-words-without-sorting
100 $(if
$1,$(firstword $1) $(call uniq
,$(filter-out $(firstword $1),$1)))