Index: Makefile.inc1 =================================================================== --- Makefile.inc1 +++ Makefile.inc1 @@ -128,10 +128,25 @@ 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 \ Index: Makefile.libcompat =================================================================== --- Makefile.libcompat +++ Makefile.libcompat @@ -17,7 +17,7 @@ .if ${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 \ @@ -49,9 +49,9 @@ .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 Index: lib/clang/llvm.build.mk =================================================================== --- lib/clang/llvm.build.mk +++ 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 @@ -29,14 +33,16 @@ 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}\" Index: share/mk/sys.mk =================================================================== --- share/mk/sys.mk +++ share/mk/sys.mk @@ -346,3 +346,10 @@ .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 }'