git: 426fc376afaf - main - bsd.cpu.mk: Introduce MACHINE_ABI
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 05 Oct 2022 16:29:42 UTC
The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=426fc376afaf39c1e754e263588534fdedb1b5ec commit 426fc376afaf39c1e754e263588534fdedb1b5ec Author: Brooks Davis <brooks@FreeBSD.org> AuthorDate: 2022-10-05 16:26:30 +0000 Commit: Brooks Davis <brooks@FreeBSD.org> CommitDate: 2022-10-05 16:27:44 +0000 bsd.cpu.mk: Introduce MACHINE_ABI MACHINE_ABI is a list of properties of the ABI used for MACHINE_ARCH. It should be used in place of long conditionals on MACHINE_ARCH where practical. The following properties are indicated with one of the follow values: Byte order: big-endian, little-endian Floating point ABI: soft-float, hard-float Size of long (size_t, etc): long32, long64 Pointer type: ptr32, ptr64 Size of time_t: time32, time64 For example, i386 targets will be: MACHINE_ABI= big-endian hard-float long32 ptr32 time32 Reviewed by: imp Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D36421 --- share/mk/bsd.compat.mk | 8 +++++++- share/mk/bsd.cpu.mk | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/share/mk/bsd.compat.mk b/share/mk/bsd.compat.mk index f7b40ce47532..9a59020b4df2 100644 --- a/share/mk/bsd.compat.mk +++ b/share/mk/bsd.compat.mk @@ -66,6 +66,12 @@ LIB32WMAKEFLAGS+= OBJCOPY="${XOBJCOPY}" LIB32CFLAGS= -DCOMPAT_32BIT LIB32DTRACE= ${DTRACE} -32 LIB32WMAKEFLAGS+= -DCOMPAT_32BIT +LIB32_MACHINE_ABI= ${MACHINE_ABI:N*64} long32 ptr32 +.if ${COMPAT_ARCH} == "amd64" +LIB32_MACHINE_ABI+= time32 +.else +LIB32_MACHINE_ABI+= time64 +.endif # ------------------------------------------------------------------- # In the program linking case, select LIBCOMPAT @@ -95,7 +101,7 @@ _LIBCOMPAT:= ${WANT_COMPAT} # Set defaults based on type. libcompat= ${_LIBCOMPAT:tl} _LIBCOMPAT_MAKEVARS= _OBJTOP TMP CPUFLAGS CFLAGS CXXFLAGS LDFLAGS \ - _MACHINE _MACHINE_ARCH \ + _MACHINE _MACHINE_ARCH _MACHINE_ABI \ WMAKEENV WMAKEFLAGS WMAKE WORLDTMP .for _var in ${_LIBCOMPAT_MAKEVARS} .if !empty(LIB${_LIBCOMPAT}${_var}) diff --git a/share/mk/bsd.cpu.mk b/share/mk/bsd.cpu.mk index 610f45969b4d..db5fa08df4bc 100644 --- a/share/mk/bsd.cpu.mk +++ b/share/mk/bsd.cpu.mk @@ -362,3 +362,41 @@ CFLAGS_NO_SIMD += ${CFLAGS_NO_SIMD.${COMPILER_TYPE}} CFLAGS += ${CFLAGS.${MACHINE_ARCH}} CXXFLAGS += ${CXXFLAGS.${MACHINE_ARCH}} +# +# MACHINE_ABI is a list of properties about the ABI used for MACHINE_ARCH. +# The following properties are indicated with one of the follow values: +# +# Byte order: big-endian, little-endian +# Floating point ABI: soft-float, hard-float +# Size of long (size_t, etc): long32, long64 +# Pointer type: ptr32, ptr64 +# Size of time_t: time32, time64 +# +.if (${MACHINE} == "arm" && (defined(CPUTYPE) && ${CPUTYPE:M*soft*})) || \ + (${MACHINE_ARCH} == "powerpc" && (defined(CPUTYPE) && ${CPUTYPE} == "e500")) || \ + ${MACHINE_ARCH:Mriscv*sf*} +MACHINE_ABI+= soft-float +.else +MACHINE_ABI+= hard-float +.endif +# Currently all 64-bit architectures include 64 in their name (see arch(7)). +.if ${MACHINE_ARCH:M*64*} +MACHINE_ABI+= long64 +.else +MACHINE_ABI+= long32 +.endif +.if ${MACHINE_ABI:Mlong64} +MACHINE_ABI+= ptr64 +.else +MACHINE_ABI+= ptr32 +.endif +.if ${MACHINE_ARCH} == "i386" +MACHINE_ABI+= time32 +.else +MACHINE_ABI+= time64 +.endif +.if ${MACHINE_ARCH:Mpowerpc*} && !${MACHINE_ARCH:M*le} +MACHINE_ABI+= big-endian +.else +MACHINE_ABI+= little-endian +.endif