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