X-Git-Url: https://git.distorted.org.uk/~mdw/mdw-cross/blobdiff_plain/1a141be66cf963955d914b9403b8ebe9fb1c8d73..f96afdc7a1599a53e59b22059b0d9e9edda4e950:/Makefile diff --git a/Makefile b/Makefile index 268ff6d..4505f83 100644 --- a/Makefile +++ b/Makefile @@ -3,34 +3,94 @@ .SECONDEXPANSION: #sorry all:: -FLAVOURS += linux -linux_ARCHS = armel armhf arm64 -linux/armel_ARCH = arm-linux-gnueabi -linux/armhf_ARCH = arm-linux-gnueabihf -linux/arm64_ARCH = aarch64-linux-gnu - -FLAVOURS += android -android_ARCHS = arm arm64 x86 x86_64 -android/arm_ARCH = arm-linux-androideabi -android/arm64_ARCH = aarch64-linux-android -android/x86_ARCH = i686-linux-android -android/x86_64_ARCH = x86_64-linux-android +CROSSDIR := $(shell pwd) + +FLAVOURS += linux-cross +linux-cross_ARCHS = linux-armel linux-armhf linux-arm64 +linux-armel_ARCH = arm-linux-gnueabi +linux-armhf_ARCH = arm-linux-gnueabihf +linux-arm64_ARCH = aarch64-linux-gnu + +FLAVOURS += linux-native +linux-native_ARCHS = linux-i386 linux-amd64 +linux-i386_ARCH = i686-linux-gnu +linux-amd64_ARCH = x86_64-linux-gnu + +FLAVOURS += android-cross +android-cross_ARCHS = android-arm android-arm64 android-x86 android-x86_64 +android-arm_ARCH = arm-linux-androideabi +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 +$2_FLAVOUR = $1 +endef +$(foreach f,$(FLAVOURS), \ + $(foreach a,$($f_ARCHS), \ + $(eval $(call define-setup,$f,$a)))) -SETUPS = \ - $(foreach f,$(FLAVOURS),\ - $(foreach a,$($f_ARCHS),etc/$f-$a-setup.sh)) TARGETS += $(SETUPS) -setup-flavour = $(word 1,$(subst -, ,$1)) -setup-arch = $(word 2,$(subst -, ,$1)) +setup-flavour = $($1_FLAVOUR) + +$(SETUPS): etc/%-setup.sh: $$(call setup-flavour,$$*)-setup.sh.in Makefile + $(V_AT)mkdir -p $(dir $@) + $(call v_tag,SED)sed 's/@arch@/$($*_ARCH)/g' $< >$@.new && \ + mv $@.new $@ -$(SETUPS): etc/%-setup.sh: $$(call setup-flavour,$$*)-cross-setup.sh.in Makefile - $(call v_tag,GEN)sed 's/@arch@/$($(call setup-flavour,$*)/$(call setup-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@crossdir@$(CROSSDIR)' $< >$@.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)