mdw/cross.in, Makefile: Rename to simply `cross'.
[mdw-cross] / Makefile
index b1c4d9f..4505f83 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,8 @@
 .SECONDEXPANSION: #sorry
 all::
 
+CROSSDIR               := $(shell pwd)
+
 FLAVOURS               += linux-cross
 linux-cross_ARCHS       = linux-armel linux-armhf linux-arm64
 linux-armel_ARCH        = arm-linux-gnueabi
@@ -21,9 +23,14 @@ android-arm64_ARCH    = aarch64-linux-android
 android-x86_ARCH        = i686-linux-android
 android-x86_64_ARCH     = x86_64-linux-android
 
+CONFIG_VARS            += FLAVOURS
+CONFIG_VARS            += $(foreach f,$(FLAVOURS), $f_ARCHS)
+
 V                       = 0
 v_tag                   = $(call v_tag_$V,$1)
 v_tag_0                         = @printf "  %-8s %s\n" "$1" "$@";
+V_AT                    = $(V_AT_$V)
+V_AT_0                  = @
 
 define define-setup
 SETUPS                 += etc/$2-setup.sh
@@ -37,11 +44,53 @@ TARGETS                     += $(SETUPS)
 setup-flavour           = $($1_FLAVOUR)
 
 $(SETUPS): etc/%-setup.sh: $$(call setup-flavour,$$*)-setup.sh.in Makefile
-       $(call v_tag,GEN)sed 's/@arch@/$($*_ARCH)/g' $< >$@.new && mv $@.new $@
+       $(V_AT)mkdir -p $(dir $@)
+       $(call v_tag,SED)sed 's/@arch@/$($*_ARCH)/g' $< >$@.new && \
+               mv $@.new $@
+
+SCRIPTS                         = cross crosstool cross-run
+BINSCRIPTS              = $(addprefix bin/,$(SCRIPTS))
+TARGETS                        += $(BINSCRIPTS)
+$(BINSCRIPTS): bin/%: src/%.in
+       $(V_AT)mkdir -p $(dir $@)
+       $(call v_tag,SED)sed 's\a@crossdir@\a$(CROSSDIR)\a' $< >$@.new && \
+               chmod +x $@.new && mv $@.new $@
+
+fix                     = $(subst -,_,$1)
+quote                   = '$(subst ','\'',$1)'#'
+
+TARGETS                        += etc/config.sh
+etc/config.sh: Makefile
+       $(V_AT)mkdir -p $(dir $@)
+       $(call v_tag,GEN){ \
+               echo '### -*-sh-*- GENERATED by CROSS/Makefile'; \
+               $(foreach v,$(CONFIG_VARS), \
+                       echo $(call fix,$v)=$(call quote,$(call quote,$($v)));) \
+       } >$@.new && mv $@.new $@
 
 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/cross $* $(ARGS),$*)
+.PHONY: run $(addprefix run/,$(ARCHS))
+
+run-make: $(addprefix run-make/,$(ARCHS))
+$(addprefix run-make/,$(ARCHS)): run-make/%:
+       @+$(call run-program,$(CROSSDIR)/bin/cross $* $(MAKE) -C$(DIR) $(ARGS),$*)
+.PHONY: run-make $(addprefix run-make/,$(ARCHS))
+
 show:; : $(VAR)