
sample: examples\aliyun_iotkit_csdk_mqtt project: board\TencentOS_tiny_EVB_MX_Plus\KEIL\aliyun_iotkit_csdk_mqtt
260 lines
7.5 KiB
Makefile
260 lines
7.5 KiB
Makefile
define Append_Conditional
|
|
$(if $(strip $(foreach V,$(4),$(filter -D$(V),$(CFLAGS)))),, \
|
|
$(if \
|
|
$(if $(strip $(3)),,x)$(findstring $(foreach U,$(3),-D$(U)),$(foreach U,$(3),$(filter -D$(U),$(CFLAGS)))), \
|
|
$(eval $(strip $(1)) += $(2)) \
|
|
) \
|
|
)
|
|
endef
|
|
|
|
define Dump_Var
|
|
NUM=`echo "$(strip $($(1)))"|awk '{ print NF }'`; \
|
|
if (( $${NUM} \> 1 )); then \
|
|
printf -- "-----------------------------------------------------------------\n"; \
|
|
printf "%-24s| %s\n" ". $(1)" `echo "$(strip $($(1)))"|cut -d' ' -f1|$(SED) 's/^ *//'`; \
|
|
for i in `echo "$(strip $($(1)))"|cut -d' ' -f2-`; do \
|
|
printf "%-24s| %s\n" "" "$${i}"; \
|
|
done; \
|
|
printf -- "-----------------------------------------------------------------\n"; \
|
|
else \
|
|
printf "%-24s| %s\n" ". $(1)" "$(strip $($(1)))"; \
|
|
fi;
|
|
endef
|
|
|
|
ifneq (,$(Q))
|
|
define Inspect_Env
|
|
endef
|
|
else
|
|
define Inspect_Env
|
|
@printf -- "-----------------------------------------------------------------\n"
|
|
@printf "%-20s| %s\n" ". BUILDING_TARGET" "$@"
|
|
@printf -- "-----------------------------------------------------------------\n"
|
|
@printf "%-20s| %s\n" ". BUILDING_DEPEND" "$(filter-out FORCE,$^)"
|
|
@printf -- "-----------------------------------------------------------------\n"
|
|
@$(foreach var,$(1),$(call Dump_Var,$(var)))
|
|
@printf -- "-----------------------------------------------------------------\n"
|
|
endef
|
|
endif
|
|
|
|
# 31, red. 32, green. 33, yellow. 34, blue. 35, magenta. 36, cyan. 37, white.
|
|
define Brief_Log
|
|
( \
|
|
if [ "$1" = "CC" ]; then \
|
|
if echo "$@"|grep -q "\.so$$"; then \
|
|
COLOR_MARK="\033[1;32m"; \
|
|
elif echo "$@"|grep -q "\.ko$$"; then \
|
|
COLOR_MARK="\033[1;35m"; \
|
|
else \
|
|
COLOR_MARK="\033[1;36m"; \
|
|
fi \
|
|
elif [ "$1" = "AR" ]; then \
|
|
COLOR_MARK="\033[1;33m"; \
|
|
elif [ "$1" = "LD" ]; then \
|
|
COLOR_MARK="\033[1;31m"; \
|
|
elif [ "$1" = "ST" ]; then \
|
|
COLOR_MARK="\033[0;33m"; \
|
|
fi; \
|
|
if [ "$(PLAIN_LOG)" != "1" ]; then \
|
|
echo -ne "$${COLOR_MARK}"; \
|
|
fi; \
|
|
if [ "$2" = "" ]; then \
|
|
FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \
|
|
SPACE_BAR=" "; \
|
|
if [ "$${FIRST_DEP}" != "" ]; then \
|
|
FIRST_DEP="$$(basename $${FIRST_DEP})"; \
|
|
fi; \
|
|
printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$$(basename $@)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
|
else \
|
|
printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$(2)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \
|
|
fi; \
|
|
if [ "$3" != "..." ]; then \
|
|
for i in $(wordlist 2,150,$(filter-out FORCE,$?)); do \
|
|
if [ "$$(echo $${i}|cut -c1)" != "/" ]; then \
|
|
printf "%-40s%s$(3)\n" "" " $$(basename $${i})"; \
|
|
fi \
|
|
done; \
|
|
fi; \
|
|
if [ "$(PLAIN_LOG)" != "1" ]; then \
|
|
echo -ne "\033[0m"; \
|
|
fi; \
|
|
)
|
|
endef
|
|
|
|
define Copy_Headers
|
|
$(Q) \
|
|
if [ "$(strip $(1))" != "" ]; then \
|
|
mkdir -p $(2)/$(3); \
|
|
for hdr in $(1); do \
|
|
if [ ! -f $(2)/$(3)/$${hdr} ] || [ $${PWD}/$${hdr} -nt $(2)/$(3)/$${hdr} ]; then \
|
|
mkdir -p $(2)/$(3); \
|
|
cp -f $(TOP_DIR)/$(MODULE_NAME)/$${hdr} $(2)/$(3)/$$(basename $${hdr}); \
|
|
fi; \
|
|
done \
|
|
fi
|
|
endef
|
|
|
|
define Update_Extra_Srcs
|
|
( \
|
|
for ELEM in $(strip $(1)); do \
|
|
DST=$(OUTPUT_DIR)/$(2)/$$(basename $${ELEM}); \
|
|
if [ $${ELEM} -nt $${DST} ]; then \
|
|
cp -Lf $${ELEM} $${DST}; \
|
|
fi; \
|
|
done \
|
|
)
|
|
endef
|
|
|
|
define Require_Build
|
|
( \
|
|
SW=$$(grep -m 1 "^PKG_SWITCH_$(1) =" $(STAMP_BLD_VAR)|awk '{ print $$NF }'); \
|
|
[ "$${SW}" != "y" ] && \
|
|
echo "FALSE" && exit; set +x; \
|
|
\
|
|
[ "$(LIBA_TARGET_$(1))" != "" ] && \
|
|
$(foreach L,$(LIBA_TARGET_$(1)),[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(L) ] && ) \
|
|
echo "FALSE" && exit; \
|
|
\
|
|
[ "$(LIBSO_TARGET_$(1))" != "" ] && \
|
|
[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET_$(1)) ] && \
|
|
echo "FALSE" && exit; \
|
|
\
|
|
echo "TRUE"; \
|
|
)
|
|
endef
|
|
|
|
define Build_Depends
|
|
( \
|
|
set -o pipefail && \
|
|
for i in $(DEPENDS_$(1)); do \
|
|
STAMP=$(STAMP_DIR)/$$(echo $${i}|$(SED) 's:/:~:g').build.done; \
|
|
if [ -f $${STAMP} ]; then \
|
|
continue; \
|
|
fi; \
|
|
$(MAKE) --no-print-directory $${i} \
|
|
$(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG)) \
|
|
$(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)); \
|
|
RETVAL=$$?; \
|
|
if [ $${RETVAL} != 0 ]; then \
|
|
exit $${RETVAL}; \
|
|
fi; \
|
|
done \
|
|
\
|
|
)
|
|
endef
|
|
|
|
#
|
|
# ($(foreach d,$(COMP_LIB_COMPONENTS), \
|
|
#
|
|
# $(RECURSIVE_MAKE) pre-build target-$(d) && \
|
|
# $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(LIBA_TARGET_$(d)) \
|
|
# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(d)/$(COMPILE_LOG)) \
|
|
# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)) \
|
|
# ; \
|
|
#
|
|
# if [ $$? != 0 ]; then \
|
|
#
|
|
# KEEP SEPA-LIBS:
|
|
#
|
|
# rm -f $(SYSROOT_LIB)/$(firstword $(LIBA_TARGET_$(d))) $(SYSROOT_LIB)/$(firstword $(LIBSO_TARGET_$(d))) 2>/dev/null; \
|
|
#
|
|
|
|
ifdef COMP_LIB
|
|
define Build_CompLib
|
|
( \
|
|
if [ "$(strip $(1))" = "FORCE" ] || \
|
|
[ "$$(echo $(LDFLAGS_$(strip $(1)))|grep -wo -- '-l$(COMP_LIB_NAME)')" != "" ]; then \
|
|
( \
|
|
$(foreach d,$(COMP_LIB_COMPONENTS), \
|
|
[ -f $(STAMP_DIR)/$(subst /,~,$(d)).build.done ] || \
|
|
set -o pipefail && \
|
|
$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(firstword $(LIBA_TARGET_$(d))) $(firstword $(LIBSO_TARGET_$(d))) && set +x; \
|
|
RETVAL=$$?; \
|
|
if [ $${RETVAL} != 0 ]; then \
|
|
exit $${RETVAL}; \
|
|
fi; \
|
|
) \
|
|
); \
|
|
if [ ! -f $(SYSROOT_LIB)/$(COMP_LIB) ]; then \
|
|
$(call Info_CompLib,$(COMP_LIB_NAME),$(COMP_LIB_OBJS)); \
|
|
fi; \
|
|
$(call Finalize_CompLib,$(COMP_LIB_OBJS),$(SYSROOT_LIB),$(COMP_LIB_NAME)); \
|
|
fi \
|
|
)
|
|
endef
|
|
else
|
|
define Build_CompLib
|
|
true
|
|
endef
|
|
endif
|
|
|
|
define Relative_TcPath
|
|
( \
|
|
case $(1) in \
|
|
xtensa-lx106-elf-gcc ) \
|
|
echo "gcc-xtensa-lx106-linux/main/bin" ;; \
|
|
arm-none-eabi-gcc ) \
|
|
echo "gcc-arm-none-eabi-linux/main/bin" ;; \
|
|
esac \
|
|
)
|
|
endef
|
|
|
|
define Gitrepo_TcPath
|
|
( \
|
|
case $(1) in \
|
|
xtensa-lx106-elf-gcc ) \
|
|
echo "gcc-xtensa-lx106-linux" ;; \
|
|
arm-none-eabi-gcc ) \
|
|
echo "gcc-arm-none-eabi-linux" ;; \
|
|
esac \
|
|
)
|
|
endef
|
|
|
|
define CompLib_Map
|
|
$(eval \
|
|
COMP_LIB_COMPONENTS += \
|
|
$(if \
|
|
$(filter y,$($(strip $(1)))),$(foreach M,$(strip $(2)),$(if $(filter $(strip $(M)),$(COMP_LIB_COMPONENTS)),,$(strip $(M)))) \
|
|
) \
|
|
)
|
|
endef
|
|
|
|
OMIT_GOALS := distclean clean env help config reconfig menuconfig
|
|
|
|
ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
|
|
define Conflict_Relation
|
|
$(if $(filter y,$($(strip $(1)))), \
|
|
$(if $(filter y,$($(strip $(2)))), \
|
|
$(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
|
|
), \
|
|
)
|
|
endef
|
|
|
|
define Present1_Relation
|
|
$(if $(filter n,$($(strip $(1)))), \
|
|
$(if $(filter n,$($(strip $(2)))), \
|
|
$(error INVALID CONFIG: '$(strip $(1)) = $($(strip $(1)))' conflicts with '$(strip $(2)) = $($(strip $(2)))' at same time!), \
|
|
), \
|
|
)
|
|
endef
|
|
|
|
define Requires_Relation
|
|
$(if $(filter y,$($(strip $(1)))), \
|
|
$(if $(filter y,$($(strip $(2)))),, \
|
|
$(error INVALID CONFIG: '$(strip $(2)) = $($(strip $(2)))' breaks dependency since '$(strip $(1)) = $($(strip $(1)))'!), \
|
|
), \
|
|
)
|
|
endef
|
|
|
|
else # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
|
|
|
|
define Conflict_Relation
|
|
endef
|
|
|
|
define Present1_Relation
|
|
endef
|
|
|
|
define Requires_Relation
|
|
endef
|
|
|
|
endif # ifeq (,$(filter $(OMIT_GOALS),$(MAKECMDGOALS)))
|