From bdd2a35046d75f441b2afafae81c3ace3a7feeea Mon Sep 17 00:00:00 2001 From: Brandon Bergren Date: Tue, 15 Oct 2019 21:02:49 -0500 Subject: [PATCH 3/3] [ELFv2] D19237 Fix TARGET_TRIPLE variable assembly when specifying TARGET_ABI --- Makefile.inc1 | 23 +++++++++++++++++++---- lib/clang/llvm.build.mk | 12 +++++++++--- share/mk/bsd.compat.mk | 6 +++--- share/mk/sys.mk | 7 +++++++ 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Makefile.inc1 b/Makefile.inc1 index 9f75dba90bb..6a9da957c6b 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -128,10 +128,25 @@ TARGET_ABI= gnueabihf TARGET_ABI= gnueabi .endif .endif -MACHINE_ABI?= unknown -MACHINE_TRIPLE?=${MACHINE_ARCH:S/amd64/x86_64/:C/[hs]f$//:S/mipsn32/mips64/}-${MACHINE_ABI}-freebsd13.0 -TARGET_ABI?= unknown -TARGET_TRIPLE?= ${TARGET_ARCH:S/amd64/x86_64/:C/[hs]f$//:S/mipsn32/mips64/}-${TARGET_ABI}-freebsd13.0 +MACHINE_VENDOR?= unknown +TARGET_VENDOR?= unknown + +# The triple has the general format --- +# See https://clang.llvm.org/docs/CrossCompilation.html#target-triple +.ifndef MACHINE_TRIPLE +MACHINE_TRIPLE?=${MACHINE_ARCH:S/amd64/x86_64/:C/[hs]f$//:S/powerpcspe/powerpc/:S/mipsn32/mips64/}-${MACHINE_VENDOR}-freebsd${OS_VERSION} +.ifdef MACHINE_ABI +MACHINE_TRIPLE:=${MACHINE_TRIPLE}-${MACHINE_ABI} +.endif +.endif + +.ifndef TARGET_TRIPLE +TARGET_TRIPLE?= ${TARGET_ARCH:S/amd64/x86_64/:C/[hs]f$//:S/powerpcspe/powerpc/:S/mipsn32/mips64/}-${TARGET_VENDOR}-freebsd${OS_VERSION} +.ifdef TARGET_ABI +TARGET_TRIPLE:=${TARGET_TRIPLE}-${TARGET_ABI} +.endif +.endif + KNOWN_ARCHES?= aarch64/arm64 \ amd64 \ arm \ diff --git a/lib/clang/llvm.build.mk b/lib/clang/llvm.build.mk index 726ccd18421..ecbcbe00a0a 100644 --- a/lib/clang/llvm.build.mk +++ b/lib/clang/llvm.build.mk @@ -10,6 +10,10 @@ .error Please define SRCDIR before including this file .endif +.ifndef OS_VERSION +.error Please define OS_VERSION before including this file +.endif + .PATH: ${LLVM_SRCS}/${SRCDIR} CFLAGS+= -I${SRCTOP}/lib/clang/include @@ -30,14 +34,16 @@ BUILD_ARCH?= ${MACHINE_ARCH} TARGET_ABI= -gnueabihf .elif ${TARGET_ARCH:Marm*} TARGET_ABI= -gnueabi +.elif defined(TARGET_ABI) +TARGET_ABI:= -${TARGET_ABI} .else TARGET_ABI= .endif + VENDOR= unknown -OS_VERSION= freebsd13.0 -LLVM_TARGET_TRIPLE?= ${TARGET_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION}${TARGET_ABI} -LLVM_BUILD_TRIPLE?= ${BUILD_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-${OS_VERSION} +LLVM_TARGET_TRIPLE?= ${TARGET_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-freebsd${OS_VERSION}${TARGET_ABI} +LLVM_BUILD_TRIPLE?= ${BUILD_ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-${VENDOR}-freebsd${OS_VERSION} CFLAGS+= -DLLVM_DEFAULT_TARGET_TRIPLE=\"${LLVM_TARGET_TRIPLE}\" CFLAGS+= -DLLVM_HOST_TRIPLE=\"${LLVM_BUILD_TRIPLE}\" diff --git a/share/mk/bsd.compat.mk b/share/mk/bsd.compat.mk index 4d6c8aac56f..8a8ca1901f5 100644 --- a/share/mk/bsd.compat.mk +++ b/share/mk/bsd.compat.mk @@ -23,7 +23,7 @@ LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} .if (defined(WANT_COMPILER_TYPE) && ${WANT_COMPILER_TYPE} == gcc) || \ (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) .else -LIB32CPUFLAGS+= -target x86_64-unknown-freebsd13.0 +LIB32CPUFLAGS+= -target x86_64-unknown-freebsd${OS_VERSION} .endif LIB32CPUFLAGS+= -m32 LIB32WMAKEENV= MACHINE=i386 MACHINE_ARCH=i386 \ @@ -55,9 +55,9 @@ LIB32CPUFLAGS= -march=${COMPAT_CPUTYPE} .endif .else .if ${COMPAT_ARCH:Mmips64el*} != "" -LIB32CPUFLAGS= -target mipsel-unknown-freebsd13.0 +LIB32CPUFLAGS= -target mipsel-unknown-freebsd${OS_VERSION} .else -LIB32CPUFLAGS= -target mips-unknown-freebsd13.0 +LIB32CPUFLAGS= -target mips-unknown-freebsd${OS_VERSION} .endif .endif LIB32CPUFLAGS+= -mabi=32 diff --git a/share/mk/sys.mk b/share/mk/sys.mk index 03698a2920b..f8aa0a45383 100644 --- a/share/mk/sys.mk +++ b/share/mk/sys.mk @@ -346,3 +346,10 @@ __MAKE_SHELL?=/bin/sh .endif .endif # ! Posix + +# Parse FreeBSD version from /sys/sys/param.h and creates OS_VERSION +# in the format used by clang's '-target' parameter (i.e. 13.0, 13.10) +OS_VERSION!=grep '\#define __FreeBSD_version' $${SRCTOP}/sys/sys/param.h |\ + awk '{ major=int(substr($$3,1,length($$3)-5)); \ + minor=int(substr($$3,length($$3)-4,2)); \ + print major "." minor }' -- 2.23.0