3 .SECONDEXPANSION
: #sorry
6 CROSSDIR
:= $(shell pwd
)
8 FLAVOURS
+= linux-cross
9 linux-cross_ARCHS
= linux-armel linux-armhf linux-arm64
10 linux-armel_ARCH
= arm-linux-gnueabi
11 linux-armhf_ARCH
= arm-linux-gnueabihf
12 linux-arm64_ARCH
= aarch64-linux-gnu
14 FLAVOURS
+= linux-native
15 linux-native_ARCHS
= linux-i386 linux-amd64
16 linux-i386_ARCH
= i686-linux-gnu
17 linux-amd64_ARCH
= x86_64-linux-gnu
19 FLAVOURS
+= android-cross
20 android-cross_ARCHS
= android-arm android-arm64 android-x86 android-x86_64
21 android-arm_ARCH
= arm-linux-androideabi
22 android-arm64_ARCH
= aarch64-linux-android
23 android-x86_ARCH
= i686-linux-android
24 android-x86_64_ARCH
= x86_64-linux-android
26 CONFIG_VARS
+= FLAVOURS
27 CONFIG_VARS
+= $(foreach f
,$(FLAVOURS
), $f_ARCHS)
30 v_tag
= $(call v_tag_
$V,$1)
31 v_tag_0
= @printf
" %-8s %s\n" "$1" "$@";
36 SETUPS
+= etc
/$2-setup.sh
39 $(foreach f
,$(FLAVOURS
), \
40 $(foreach a
,$($f_ARCHS), \
41 $(eval
$(call define-setup
,$f,$a))))
44 setup-flavour
= $($1_FLAVOUR)
46 $(SETUPS
): etc
/%-setup.sh
: $$(call setup-flavour
,$$*)-setup.sh.in Makefile
47 $(V_AT
)mkdir
-p
$(dir $@
)
48 $(call v_tag
,SED
)sed
's/@arch@/$($*_ARCH)/g' $< >$@.new
&& \
51 SCRIPTS
= cross crosstool cross-run
52 BINSCRIPTS
= $(addprefix bin
/,$(SCRIPTS
))
53 TARGETS
+= $(BINSCRIPTS
)
54 $(BINSCRIPTS
): bin
/%: src
/%.in
55 $(V_AT
)mkdir
-p
$(dir $@
)
56 $(call v_tag
,SED
)sed
's\a@crossdir@\a$(CROSSDIR)\a' $< >$@.new
&& \
57 chmod
+x
$@.new
&& mv
$@.new
$@
60 quote
= '$(subst ','\'',$1)'#'
62 TARGETS
+= etc
/config.sh
63 etc
/config.sh
: Makefile
64 $(V_AT
)mkdir
-p
$(dir $@
)
66 echo
'### -*-sh-*- GENERATED by CROSS/Makefile'; \
67 $(foreach v
,$(CONFIG_VARS
), \
68 echo
$(call fix
,$v)=$(call quote
,$(call quote
,$($v)));) \
69 } >$@.new
&& mv
$@.new
$@
73 CLEANFILES
+= $(TARGETS
)
74 clean::; rm -f
$(CLEANFILES
)
76 run-program
= exec
8>&1 && rc
=$$( exec
7>&1 && \
78 { ($1 9>&-; echo
$$?
>&7) | \
79 while IFS
= read
-r line
; \
80 do printf
>&9 "%-21s | %s\n" "$2" "$$line"; done
; } 2>&1 | \
81 while IFS
= read
-r line
; \
82 do printf
>&9 "%-21s * %s\n" "$2" "$$line"; done
; } | cat
>&8 ) && \
85 run
: $(addprefix run
/,$(ARCHS
))
86 $(addprefix run
/,$(ARCHS
)): run
/%:
88 $(call run-program
,$(CROSSDIR
)/bin
/cross
$* $(ARGS
),$*)
89 .PHONY
: run
$(addprefix run
/,$(ARCHS
))
91 run-make
: $(addprefix run-make
/,$(ARCHS
))
92 $(addprefix run-make
/,$(ARCHS
)): run-make
/%:
93 @
+$(call run-program
,$(CROSSDIR
)/bin
/cross
$* $(MAKE
) -C
$(DIR
) $(ARGS
),$*)
94 .PHONY
: run-make
$(addprefix run-make
/,$(ARCHS
))