You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.2 KiB

#######################################################################################################################
# Overridable defaults
ifndef _INCLUDE_DEFAULTS
include $(patsubst %/,%,$(dir $(CURRENT_MAKEFILE)))/defaults.mk
endif
#######################################################################################################################
# Standard macros
echo_if_silent = VERBOSE=1
$(VERBOSE)echo_if_silent = echo $1
$(VERBOSE)SILENT := @
filter_out_command ?= $(filter $1,$(foreach CMD,$1,$(shell command -v $(CMD) 2>&1 1>/dev/null || echo $(CMD))))
md5sum = { \
if [ -n "$2" ]; then \
sed -e 's@%MD5%@$2@g' -e 's@%FILE%@$1@g' $(SCRIPTDIR)/resources/md5sum.txt.template > $1.md5; \
md5sum -c $1.md5; \
else \
echo 'warning:$1: no md5 skipping verification' 1>&2; \
fi; \
}
$(SKIP_FETCH)curl = $(call echo_if_silent,curl -fSL $(CURLFLAGS) -o $1 $2) \
&& curl -fSL $(CURLFLAGS) -o $1 $2 \
&& $(call md5sum,$1,$3)
curl ?= echo 'warning:$1: download skipped (SKIP_FETCH=$(SKIP_FETCH))'
check_rule = \
check-$1: build-$1;
clean_rule = \
clean-$1: ; \
$$(SILENT)-$$(call clean,$1)
clean = rm -rf $(OUTDIR)/$1
discover_cc_rule = \
discover-cc-$1: $$(OUTDIR)/$1/$$(BUILDTYPE)/include_dirs.txt; \
$$(SILENT)$$(call discover_cc,$1)
discover_cc = cat $<
#######################################################################################################################
# Standard rule target configuration
OUTDIRS += $(OUTDIR)
OUTDIRS := $(sort $(OUTDIRS))
TARGETS := $(sort $(TARGETS))
TASKS := $(words $(if $(TARGETS),$(TARGETS),_))
DISBALE_OSYNC ?= $(filter 1,$(TASKS))
$(DISBALE_OSYNC)GNUMAKEFLAGS += --output-sync
_NPROC = $(NPROC)
ifeq ($(strip $(_NPROC)),)
_NPROC = $(shell nproc)
endif
_PARALLELMFLAGS := $(addprefix -j,$(shell echo "$$(($(_NPROC)/$(TASKS)))"))
#######################################################################################################################
# Makefile dependencies
MAKEFILE_DEPS += cp
MAKEFILE_DEPS += rm
MAKEFILE_DEPS += mkdir
MAKEFILE_DEPS += echo
MAKEFILE_DEPS := $(sort $(MAKEFILE_DEPS))
UNSATISFIED_MAKEFILE_DEPS := $(call filter_out_command,$(MAKEFILE_DEPS))
RULE_TARGETS_DEPS := $(filter-out $(RULE_TARGETS) $(addprefix $(PROJECTDIR),$(RULE_TARGETS)),$(MAKEFILE_LIST))
#######################################################################################################################
# Standard rules
ifneq ($(MAKECMDGOALS),distclean)
-include $(RULE_TARGETS)
endif
.PHONY: all build-%
all: $(BUILD_TARGETS);
.PHONY: check check-%
check: $(CHECK_TARGETS);
.PHONY: memcheck memcheck-%
memcheck: $(MEMCHECK_TARGETS);
.PHONY: lint lint-%
lint: $(LINT_TARGETS);
.PHONY: run run-%
run: $(RUN_TARGETS);
.PHONY: clean clean-%
clean: $(CLEAN_TARGETS);
.PHONY: get-deps get-deps-%
get-deps: $(EXTRACT_TARGETS);
.PHONY: discover-cc discover-cc-%
discover-cc: $(DISCOVER_CC_TARGETS);
.PHONY: distclean
distclean:
$(SILENT)-rm -rf $(OUTDIRS)
.PHONY: debug-print-%
debug-print-%:
@printf '%s\n' '$*:' $($*)
$(RULE_TARGETS): $(RULE_TARGETS_DEPS) | $(UNSATISFIED_MAKEFILE_DEPS) $(OUTDIRS)
$(OUTDIRS):
$(SILENT)mkdir -p $@
$(UNSATISFIED_MAKEFILE_DEPS):
$(error 'required commands $(UNSATISFIED_MAKEFILE_DEPS) not found; install appropriate packages e.g. docker-ce, busybox and curl')