On Sun, Apr 16, 2017 at 11:15:55AM +0200, Mark Kettenis wrote: > 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.
Having a GCC4_ARCH list without all the gcc4 archs is a bit strange. It is more along the lines of ALSO_CLANG. The tests added to the clang directories are for if /usr/bin/c++ can't do c++11. Maybe we could define variables in the makefiles to indicate this before bsd.own.mk is included and then adjust CC and CXX in bsd.own.mk if it is set and COMPILER_VERSION is gcc3 or gcc4? I don't see the point in keeping the BOOTSTRAP_CLANG parts, if CC and CXX are already being overridden isn't just installing ports clang going to be enough assuming /usr/local/bin is in PATH? > > > 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}) >