@@ -445,3 +445,30 @@ atomic = $(eval $1: $(call sentinel,$1) ; @:) \
print-%:
@echo '$*=$($*)'
+
+# base-arch
+# Usage: $(call base-arch, target)
+#
+# @target: the target architecture.
+#
+# This macro will return the base architecture for a target.
+#
+# As example, $(call base-arch, aarch64) returns 'arm'.
+base-arch = $(strip \
+ $(if $(call startwith,mips,$1),mips,\
+ $(if $(call startwith,ppc,$1),ppc,\
+ $(if $(call startwith,sparc,$1),sparc,\
+ $(if $(call startwith,risc,$1),risc,\
+ $(if $(call startwith,aarch64,$1),arm,\
+ $(if $(call startwith,x86_64,$1),i386,\
+ $1\
+ )\
+ )\
+ )\
+ )\
+ )\
+ )\
+ )
+
+print-base-arch-%:
+ @echo '$*=$(call base-arch, $*)'
Add a rule to return the base architecture for a QEMU target. The current list of TARGET_BASE_ARCH is: $ git grep TARGET_BASE_ARCH configure configure:7785:TARGET_BASE_ARCH="" configure:7795: TARGET_BASE_ARCH=i386 configure:7813: TARGET_BASE_ARCH=arm configure:7846: TARGET_BASE_ARCH=mips configure:7854: TARGET_BASE_ARCH=mips configure:7864: TARGET_BASE_ARCH=openrisc configure:7871: TARGET_BASE_ARCH=ppc configure:7879: TARGET_BASE_ARCH=ppc configure:7887: TARGET_BASE_ARCH=ppc configure:7894: TARGET_BASE_ARCH=riscv configure:7900: TARGET_BASE_ARCH=riscv configure:7920: TARGET_BASE_ARCH=sparc configure:7925: TARGET_BASE_ARCH=sparc The rule can be tested calling 'print-base-arch-$TARGET': $ make \ print-base-arch-openrisc \ print-base-arch-aarch64 \ print-base-arch-x86_64 \ print-base-arch-mips64el \ print-base-arch-ppc64 openrisc=openrisc aarch64=arm x86_64=i386 mips64el=mips ppc64=ppc Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- v4: - use startwith() - fix openrisc (rth) --- rules.mak | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)