aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen J. Kiernan <stevek@FreeBSD.org>2024-04-03 23:25:19 +0000
committerStephen J. Kiernan <stevek@FreeBSD.org>2026-05-03 02:21:56 +0000
commit01674e15dedb15f8ce498af0680c50bb075c5482 (patch)
treea3fb7ad76f60e560b6ecd004f3309d2bb06617e3
parent821976facf746ef241e1524b44bb1de0af98fdc0 (diff)
bsd.endian.mk: Optimize the handling of big/little endian determination.
Add variables to contain lists of MACHINE_ARCH values to use to determine little or big endian. Only error out about not being able to determine endianess if TARGET_ENDIANNESS is empty and not cross-compiling. Reviewed by: sjg Obtained from: Hewlett Packard Enterprise Development LP Differential Revision: https://reviews.freebsd.org/D44629
-rw-r--r--share/mk/bsd.endian.mk39
1 files changed, 29 insertions, 10 deletions
diff --git a/share/mk/bsd.endian.mk b/share/mk/bsd.endian.mk
index 0c5ebb7aeba2..2a617a1d2794 100644
--- a/share/mk/bsd.endian.mk
+++ b/share/mk/bsd.endian.mk
@@ -1,20 +1,35 @@
-.if ${MACHINE_CPUARCH} == "aarch64" || \
- ${MACHINE_CPUARCH} == "arm" || \
- ${MACHINE_ARCH} == "amd64" || \
- ${MACHINE_ARCH} == "i386" || \
- ${MACHINE_ARCH} == "powerpc64le" || \
- ${MACHINE_CPUARCH} == "riscv"
+MACHINE_ARCH_LIST.little = \
+ aarch64 \
+ amd64 \
+ armv7 \
+ i386 \
+ powerpc64le \
+ riscv*
+
+MACHINE_ARCH_LIST.big = \
+ powerpc \
+ powerpc64
+
+.for e in big little
+N_$e:= ${MACHINE_ARCH_LIST.$e:${M_ListToSkip}}
+.endfor
+
+# For the host, we need to look at the host architecture
+.if ${MACHINE:Nhost*} == ""
+_ENDIAN_ARCH=${_HOST_ARCH}
+.else
+_ENDIAN_ARCH=${MACHINE_ARCH}
+.endif
+
+.if ${_ENDIAN_ARCH:${N_little}} == ""
TARGET_ENDIANNESS= 1234
CAP_MKDB_ENDIAN= -l
LOCALEDEF_ENDIAN= -l
-.elif ${MACHINE_ARCH} == "powerpc" || \
- ${MACHINE_ARCH} == "powerpc64"
+.elif ${_ENDIAN_ARCH:${N_big}} == ""
TARGET_ENDIANNESS= 4321
CAP_MKDB_ENDIAN= -b
LOCALEDEF_ENDIAN= -b
-.elif ${.MAKE.OS} == "FreeBSD"
-.error Don't know the endian of this architecture
.else
#
# During bootstrapping on !FreeBSD OSes, we need to define some value. Short of
@@ -33,3 +48,7 @@ TARGET_ENDIANNESS= 1234
CAP_MKDB_ENDIAN= -B # Poisoned value, invalid flags for both cap_mkdb
LOCALEDEF_ENDIAN= -B # and localedef.
.endif
+
+.if empty(TARGET_ENDIANNESS) && ${.MAKE.OS} == "FreeBSD"
+.error Don't know the endianness of this architecture
+.endif