Makefile 1.56 KB
Newer Older
1
# umbrella mkimage-profiles makefile:
2 3
# iterate over multiple goals/arches,
# collect proceedings
4

5 6 7
# preferences
-include $(HOME)/.mkimage/profiles.mk

8
# for immediate assignment
9 10 11 12
ifndef ARCHES
ifdef ARCH
ARCHES := $(ARCH)
else
Michael Shigorin's avatar
Michael Shigorin committed
13 14
ARCHES := $(shell arch \
	| sed 's/i686/i586/; s/armv7.*/armh/; s/armv.*/arm/; s/ppc.*/ppc/')
15
endif
16
endif
17 18
export ARCHES

19 20
export PATH := $(CURDIR)/bin:$(PATH)

21 22 23
# supervise target tracing; leave stderr alone
ifdef REPORT
export REPORT_PATH := $(shell mktemp --tmpdir mkimage-profiles.report.XXXXXXX)
24
POSTPROC := | report-filter > $(REPORT_PATH)
25 26
endif

27
# recursive make considered useful for m-p
28
MAKE += -r --no-print-directory
29

30
DIRECT_TARGETS := help help/distro help/ve help/vm clean distclean check
Michael Shigorin's avatar
Michael Shigorin committed
31 32
.PHONY: $(DIRECT_TARGETS)
$(DIRECT_TARGETS):
33 34 35 36
	@$(MAKE) -f main.mk $@

export NUM_TARGETS := $(words $(MAKECMDGOALS))

37 38 39
# for pipefail
SHELL = /bin/bash

40 41 42
# don't even consider remaking a configuration file
.PHONY: $(HOME)/.mkimage/profiles.mk

43
# real targets need real work
44 45
%:
	@n=1; \
46
	set -o pipefail; \
47
	say() { echo "$$@" >&2; }; \
48 49 50 51 52
	if [ "$(NUM_TARGETS)" -gt 1 ]; then \
		n="`echo $(MAKECMDGOALS) \
		| tr '[[:space:]]' '\n' \
		| grep -nx "$@" \
		| cut -d: -f1`"; \
53
		say "** goal: $@ [$$n/$(NUM_TARGETS)]"; \
54 55
	fi; \
	for ARCH in $(ARCHES); do \
56
		if [ "$$ARCH" != "$(firstword $(ARCHES))" ]; then say; fi; \
57
		say "** ARCH: $$ARCH"; \
58 59 60 61 62
		if $(MAKE) -f main.mk ARCH=$$ARCH $@ $(POSTPROC); then \
			if [ -n "$$REPORT" ]; then \
				$(MAKE) -f reports.mk ARCH=$$ARCH; \
			fi; \
		fi; \
63
	done; \
64
	if [ "$$n" -lt "$(NUM_TARGETS)" ]; then say; fi
65 66 67

docs:
	@$(MAKE) -C doc