| 1 | # SPDX-License-Identifier: GPL-2.0 |
| 2 | HOSTARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \ |
| 3 | -e s/sun4u/sparc/ -e s/sparc64/sparc/ \ |
| 4 | -e /arm64/!s/arm.*/arm/ -e s/sa110/arm/ \ |
| 5 | -e s/s390x/s390/ -e s/parisc64/parisc/ \ |
| 6 | -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ |
| 7 | -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \ |
| 8 | -e s/riscv.*/riscv/ -e s/loongarch.*/loongarch/) |
| 9 | |
| 10 | ifeq ($(strip $(ARCH)),) |
| 11 | override ARCH := $(HOSTARCH) |
| 12 | endif |
| 13 | |
| 14 | SRCARCH := $(ARCH) |
| 15 | |
| 16 | # Additional ARCH settings for x86 |
| 17 | ifeq ($(ARCH),i386) |
| 18 | SRCARCH := x86 |
| 19 | endif |
| 20 | ifeq ($(ARCH),x86_64) |
| 21 | SRCARCH := x86 |
| 22 | endif |
| 23 | |
| 24 | # Additional ARCH settings for sparc |
| 25 | ifeq ($(ARCH),sparc32) |
| 26 | SRCARCH := sparc |
| 27 | endif |
| 28 | ifeq ($(ARCH),sparc64) |
| 29 | SRCARCH := sparc |
| 30 | endif |
| 31 | |
| 32 | # Additional ARCH settings for loongarch |
| 33 | ifeq ($(ARCH),loongarch32) |
| 34 | SRCARCH := loongarch |
| 35 | endif |
| 36 | |
| 37 | ifeq ($(ARCH),loongarch64) |
| 38 | SRCARCH := loongarch |
| 39 | endif |
| 40 | |
| 41 | # Probe for __LP64__ only when the compiler is installed: this runs at |
| 42 | # parse time for every target, including ones that never compile, e.g. |
| 43 | # install-build-deps, and would otherwise spew "gcc: not found" when the |
| 44 | # compiler is not yet installed. Only the first word of CC is consulted, |
| 45 | # as CC may carry arguments, e.g. 'ccache gcc'. When the guard fails it |
| 46 | # prints nothing, leaving LP64 unset, as if the probe had failed. |
| 47 | LP64 := $(shell if command -v $(firstword ${CC}) >/dev/null 2>&1; then echo __LP64__ | ${CC} ${CFLAGS} -E -x c -; fi | tail -n 1) |
| 48 | ifeq ($(LP64), 1) |
| 49 | IS_64_BIT := 1 |
| 50 | else |
| 51 | IS_64_BIT := 0 |
| 52 | endif |