I've added new xtoolchain ports for llvm. Unlike the <arch>-xtoolchain-gcc ports, they use LLVM's native cross build support so there is a single one for each usable LLVM version. They use clang and lld for compilation and linking. It's probably feasible to add versions that use binutils, but I'll let someone else explore that space. My results so far:
llvm40 builds i386, amd64, and arm64 with caveats. llvm-devel build arm64, but amd64 is currently failing and I've not tested i386. For i386, modules don't link so buildkernel requires -DNO_MODULES. For arm64, there's a bootstrapping bug of some sort of LLD so -DWITHOUT_LLD is required. I suspect mips64 is close to working, but haven't tested it yet. -- Brooks On Sat, Apr 08, 2017 at 12:13:58AM +0000, Brooks Davis wrote: > Author: brooks > Date: Sat Apr 8 00:13:58 2017 > New Revision: 437976 > URL: https://svnweb.freebsd.org/changeset/ports/437976 > > Log: > Add experimental xtoolchain ports for llvm-devel and llvm40. > > With an appropriate port installed, in principle you can build a cross > world and/or kernel without a bootstrap compiler or binutils with: > > make CROSS_TOOLCHAIN=llvm40 TARGET=arm64 buildworld buildkernel > > In practice, this only has a chance of working on platforms with solid > LLD support. At the moment I've had some success with i386, amd64, and > arm64. > > Sponsored by: DARPA, AFRL > > Added: > head/devel/xtoolchain-llvm-devel/ > - copied from r437962, head/devel/powerpc64-xtoolchain-gcc/ > head/devel/xtoolchain-llvm40/ > head/devel/xtoolchain-llvm40/Makefile (contents, props changed) > Modified: > head/devel/Makefile > head/devel/xtoolchain-llvm-devel/Makefile > head/devel/xtoolchain-llvm-devel/files/xtoolchain.mk.in > > Modified: head/devel/Makefile > ============================================================================== > --- head/devel/Makefile Fri Apr 7 23:20:31 2017 (r437975) > +++ head/devel/Makefile Sat Apr 8 00:13:58 2017 (r437976) > @@ -5817,6 +5817,8 @@ > SUBDIR += xparam > SUBDIR += xsd > SUBDIR += xtl > + SUBDIR += xtoolchain-llvm-devel > + SUBDIR += xtoolchain-llvm40 > SUBDIR += xwpe > SUBDIR += xxgdb > SUBDIR += xxhash > > Modified: head/devel/xtoolchain-llvm-devel/Makefile > ============================================================================== > --- head/devel/powerpc64-xtoolchain-gcc/Makefile Fri Apr 7 22:32:01 > 2017 (r437962) > +++ head/devel/xtoolchain-llvm-devel/Makefile Sat Apr 8 00:13:58 2017 > (r437976) > @@ -1,43 +1,47 @@ > # $FreeBSD$ > > PORTNAME= xtoolchain > -PORTVERSION= 0.2 > +PORTVERSION= 0.1 > CATEGORIES= devel > MASTER_SITES= # none > DISTFILES= # none > -PKGNAMEPREFIX?= powerpc64- > -PKGNAMESUFFIX?= -gcc > +PKGNAMESUFFIX?= -llvm${LLVM_SUFFIX} > > -MAINTAINER?= [email protected] > +MAINTAINER?= [email protected] > COMMENT= Pre seeded toolchain to cross build FreeBSD base > > +LLVM_SUFFIX?= -devel > + > NO_BUILD= yes > > -.if ${PKGNAMEPREFIX} == "amd64-" > -TOOLCHAIN_PREFIX= x86_64- > -.else > -TOOLCHAIN_PREFIX= ${PKGNAMEPREFIX} > -.endif > -XCC?= ${TOOLCHAIN_PREFIX}unknown-${OPSYS:tl}${OSREL}-gcc > -XCXX?= ${TOOLCHAIN_PREFIX}unknown-${OPSYS:tl}${OSREL}-g++ > -XCPP?= ${TOOLCHAIN_PREFIX}unknown-${OPSYS:tl}${OSREL}-cpp > -X_COMPILER_TYPE?= ${PKGNAMESUFFIX:C/-//g} > +XCC?= clang${LLVM_SUFFIX} > +XCXX?= clang++${LLVM_SUFFIX} > +XCPP?= clang-cpp${LLVM_SUFFIX} > +XLD?= ${LOCALBASE}/llvm${LLVM_SUFFIX}/bin/ld.lld > +X_COMPILER_TYPE?= clang > > -RUN_DEPENDS?= ${XCC}:devel/${PKGNAMEPREFIX}${X_COMPILER_TYPE} > +RUN_DEPENDS?= ${XCC}:devel/llvm${LLVM_SUFFIX} > > SUB_FILES= xtoolchain.mk > -SUB_LIST= TARGETARCH=${TOOLCHAIN_PREFIX:C/-//g} \ > - OPSYS=${OPSYS:tl} \ > - XCC=${XCC} \ > +SUB_LIST= XCC=${XCC} \ > XCXX=${XCXX} \ > XCPP=${XCPP} \ > + XLD=${XLD} \ > X_COMPILER_TYPE=${X_COMPILER_TYPE} > > -PLIST_FILES= share/toolchains/${PKGNAMEPREFIX}${X_COMPILER_TYPE}.mk > +PLIST_FILES= share/toolchains/llvm${LLVM_SUFFIX}.mk \ > + llvm${LLVM_SUFFIX}/bin/ld > > do-install: > @${MKDIR} ${STAGEDIR}${PREFIX}/share/toolchains/ > @${INSTALL_DATA} ${WRKDIR}/xtoolchain.mk \ > - > ${STAGEDIR}${PREFIX}/share/toolchains/${PKGNAMEPREFIX}${X_COMPILER_TYPE}.mk > + ${STAGEDIR}${PREFIX}/share/toolchains/llvm${LLVM_SUFFIX}.mk > + > +# XXX: would be better to add -fuse-ld=lld to LDFLAGS, but there isn't > +# yet a mechansim for that. Link added here, not in devel/llvm* to avoid > +# forcing lld on all users. > +post-install: > + @${MKDIR} ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin > + @${LN} -s ld.lld ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin/ld > > .include <bsd.port.mk> > > Modified: head/devel/xtoolchain-llvm-devel/files/xtoolchain.mk.in > ============================================================================== > --- head/devel/powerpc64-xtoolchain-gcc/files/xtoolchain.mk.in Fri Apr > 7 22:32:01 2017 (r437962) > +++ head/devel/xtoolchain-llvm-devel/files/xtoolchain.mk.in Sat Apr 8 > 00:13:58 2017 (r437976) > @@ -1,5 +1,6 @@ > XCC=%%LOCALBASE%%/bin/%%XCC%% > XCXX=%%LOCALBASE%%/bin/%%XCXX%% > XCPP=%%LOCALBASE%%/bin/%%XCPP%% > -CROSS_BINUTILS_PREFIX=%%LOCALBASE%%/%%TARGETARCH%%-%%OPSYS%%/bin/ > +XLD=%%XLD%% > +CROSS_BINUTILS_PREFIX=/var/empty > X_COMPILER_TYPE=%%X_COMPILER_TYPE%% > > Added: head/devel/xtoolchain-llvm40/Makefile > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/devel/xtoolchain-llvm40/Makefile Sat Apr 8 00:13:58 2017 > (r437976) > @@ -0,0 +1,7 @@ > +# $FreeBSD$ > + > +LLVM_SUFFIX=40 > + > +MASTERDIR= ${.CURDIR}/../xtoolchain-llvm-devel > + > +.include "${MASTERDIR}/Makefile" > _______________________________________________ > [email protected] mailing list > https://lists.freebsd.org/mailman/listinfo/svn-ports-all > To unsubscribe, send any mail to "[email protected]" >
signature.asc
Description: PGP signature
