Here is my current diff to build clang alongside gcc. The idea is that if you add an architecture to both CLANG_ARCH and GCC4_ARCH, both compilers get built, but gcc remains the default compiler. It forces the clang-related libraries (libcompiler_rt, libc++abi, libc++) to be built with clang.
You'll need to bootstrap clang with the ports gcc before you can do a make build. This is done using: # pkg_add g++ # cd /usr/src/gnu/usr.bin/clang # make obj # make BOOTSTRAP_CLANG=yes # make install Thoughts? ok? If we don't want to start building clang on amd64 just yet, I can leave GCC4_ARCHS empty for now. Index: gnu/usr.bin/Makefile =================================================================== RCS file: /cvs/src/gnu/usr.bin/Makefile,v retrieving revision 1.58 diff -u -p -r1.58 Makefile --- gnu/usr.bin/Makefile 20 Feb 2017 01:00:26 -0000 1.58 +++ gnu/usr.bin/Makefile 15 Apr 2017 12:06:10 -0000 @@ -10,7 +10,8 @@ SUBDIR+= cc clang gcc SUBDIR+= gcc . elif ${COMPILER_VERSION:L} == "gcc4" SUBDIR+= cc -. elif ${COMPILER_VERSION:L} == "clang" +. endif +. if ${BUILD_CLANG} == "yes" SUBDIR+= clang . endif .endif Index: gnu/usr.bin/clang/Makefile.inc =================================================================== RCS file: /cvs/src/gnu/usr.bin/clang/Makefile.inc,v retrieving revision 1.4 diff -u -p -r1.4 Makefile.inc --- gnu/usr.bin/clang/Makefile.inc 16 Feb 2017 02:08:42 -0000 1.4 +++ gnu/usr.bin/clang/Makefile.inc 27 Mar 2017 15:56:49 -0000 @@ -2,6 +2,11 @@ LLVM_SRCS?= ${.CURDIR}/../../../llvm +.if ${COMPILER_VERSION:L} != "clang" +CC= clang +CXX= clang++ +.endif + BOOTSTRAP_CLANG?=no .if ${BOOTSTRAP_CLANG} == "yes" CC= egcc Index: lib/libcompiler_rt/Makefile =================================================================== RCS file: /cvs/src/lib/libcompiler_rt/Makefile,v retrieving revision 1.6 diff -u -p -r1.6 Makefile --- lib/libcompiler_rt/Makefile 9 Apr 2017 21:47:05 -0000 1.6 +++ lib/libcompiler_rt/Makefile 15 Apr 2017 12:14:38 -0000 @@ -2,7 +2,12 @@ .include <bsd.own.mk> -.if ${COMPILER_VERSION:L} == "clang" +.if ${COMPILER_VERSION:L} != "clang" +CC= clang +CXX= clang++ +.endif + +.if ${BUILD_CLANG} == "yes" LIB= compiler_rt NOPIC= Index: lib/libcxx/Makefile =================================================================== RCS file: /cvs/src/lib/libcxx/Makefile,v retrieving revision 1.5 diff -u -p -r1.5 Makefile --- lib/libcxx/Makefile 16 Feb 2017 02:08:42 -0000 1.5 +++ lib/libcxx/Makefile 15 Apr 2017 12:04:11 -0000 @@ -2,7 +2,12 @@ .include <bsd.own.mk> -.if ${COMPILER_VERSION:L} == "clang" +.if ${COMPILER_VERSION:L} != "clang" +CC= clang +CXX= clang++ +.endif + +.if ${BUILD_CLANG} == "yes" HDRDIR= ${.CURDIR}/include SRCDIR= ${.CURDIR}/src Index: lib/libcxxabi/Makefile =================================================================== RCS file: /cvs/src/lib/libcxxabi/Makefile,v retrieving revision 1.7 diff -u -p -r1.7 Makefile --- lib/libcxxabi/Makefile 6 Apr 2017 09:28:29 -0000 1.7 +++ lib/libcxxabi/Makefile 15 Apr 2017 12:00:40 -0000 @@ -2,7 +2,12 @@ .include <bsd.own.mk> -.if ${COMPILER_VERSION:L} == "clang" +.if ${COMPILER_VERSION:L} != "clang" +CC= clang +CXX= clang++ +.endif + +.if ${BUILD_CLANG} == "yes" HDRDIR= ${.CURDIR}/include SRCDIR= ${.CURDIR}/src Index: share/mk/bsd.own.mk =================================================================== RCS file: /cvs/src/share/mk/bsd.own.mk,v retrieving revision 1.182 diff -u -p -r1.182 bsd.own.mk --- share/mk/bsd.own.mk 18 Dec 2016 17:02:21 -0000 1.182 +++ share/mk/bsd.own.mk 15 Apr 2017 11:58:41 -0000 @@ -15,7 +15,8 @@ SKEY?= yes # Set `YP' to `yes' to build with support for NIS/YP. YP?= yes -CLANG_ARCH=aarch64 +CLANG_ARCH=aarch64 amd64 +GCC4_ARCH=amd64 GCC3_ARCH=m88k # m88k: ? @@ -23,12 +24,20 @@ PIE_ARCH=alpha amd64 arm hppa i386 mips6 STATICPIE_ARCH=alpha amd64 arm hppa i386 mips64 mips64el powerpc sh sparc64 .for _arch in ${MACHINE_ARCH} -.if !empty(CLANG_ARCH:M${_arch}) -COMPILER_VERSION?=clang -.elif !empty(GCC3_ARCH:M${_arch}) +.if !empty(GCC3_ARCH:M${_arch}) COMPILER_VERSION?=gcc3 +.elif !empty(GCC4_ARCH:M${_arch}) +COMPILER_VERSION?=gcc4 +.elif !empty(CLANG_ARCH:M${_arch}) +COMPILER_VERSION?=clang .else COMPILER_VERSION?=gcc4 +.endif + +.if !empty(CLANG_ARCH:M${_arch}) +BUILD_CLANG?=yes +.else +BUILD_CLANG?=no .endif .if !empty(STATICPIE_ARCH:M${_arch})