chiark / gitweb /
src/cross-run.in: New tool to run command in multiple cross-build envs.
[mdw-cross] / Makefile
index 5c1ffc178ac9364d26b1183d5776f1ab4e208086..cc63a45554adeecd3c8a01c6a55e68000804fc53 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@ $(SETUPS): etc/%-setup.sh: $$(call setup-flavour,$$*)-setup.sh.in Makefile
        $(call v_tag,SED)sed 's/@arch@/$($*_ARCH)/g' $< >$@.new && \
                mv $@.new $@
 
-SCRIPTS                         = mdw-cross crosstool
+SCRIPTS                         = mdw-cross crosstool cross-run
 BINSCRIPTS              = $(addprefix bin/,$(SCRIPTS))
 TARGETS                        += $(BINSCRIPTS)
 $(BINSCRIPTS): bin/%: src/%.in
@@ -73,4 +73,24 @@ all:: $(TARGETS)
 CLEANFILES             += $(TARGETS)
 clean::; rm -f $(CLEANFILES)
 
+run-program = exec 8>&1 && rc=$$( exec 7>&1 && \
+       { exec 9>&1 && \
+         { ($1 9>&-; echo $$? >&7) | \
+               while IFS= read -r line; \
+               do printf >&9 "%-21s | %s\n" "$2" "$$line"; done; } 2>&1 | \
+         while IFS= read -r line; \
+         do printf >&9 "%-21s * %s\n" "$2" "$$line"; done; } | cat >&8 ) && \
+       exit $$rc
+
+run: $(addprefix run/,$(ARCHS))
+$(addprefix run/,$(ARCHS)): run/%:
+       @cd $(DIR) && \
+       $(call run-program,$(CROSSDIR)/bin/mdw-cross $* $(ARGS),$*)
+.PHONY: run $(addprefix run/,$(ARCHS))
+
+run-make: $(addprefix run-make/,$(ARCHS))
+$(addprefix run-make/,$(ARCHS)): run-make/%:
+       @+$(call run-program,$(CROSSDIR)/bin/mdw-cross $* $(MAKE) -C$(DIR) $(ARGS),$*)
+.PHONY: run-make $(addprefix run-make/,$(ARCHS))
+
 show:; : $(VAR)