commit 40618d354fa4faa8da62bda23cfc595342f76eb5 Author: Brandon Bergren Date: Tue Oct 15 21:02:49 2019 -0500 [ELFv2] D19237 Fix TARGET_TRIPLE variable assembly when specifying TARGET_ABI diff --git a/Makefile.inc1 b/Makefile.inc1 index dce33b57463..1e9b6a44b08 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/hf$//:S/mipsn32/mips64/}-${MACHINE_ABI}-freebsd13.0 -TARGET_ABI?= unknown -TARGET_TRIPLE?= ${TARGET_ARCH:S/amd64/x86_64/:C/hf$//: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/hf$//: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/hf$//: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 0f91af5ebd5..07f7c8f6c23 100644 --- a/share/mk/bsd.compat.mk +++ b/share/mk/bsd.compat.mk @@ -15,7 +15,7 @@ LIB32CPUFLAGS= -march=${TARGET_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 \ @@ -47,9 +47,9 @@ LIB32CPUFLAGS= -march=${TARGET_CPUTYPE} .endif .else .if ${TARGET_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 }'