> Date: Mon, 17 Apr 2017 01:49:18 +1000
> From: Jonathan Gray <[email protected]>
>
> 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.
Well, we could add all gcc4 architectures to GCC4_ARCH if that makes
you happier. All the architecture list variables end with _ARCH,
that's why I came up with this solution.
> 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?
Is that worth the trouble? Eventaully these chacks will disappear
again.
> 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?
Bootstrapping with ports clang doesn't work. It triggers some
incompatibility between clang and the ports libstdc++.
> > 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})
> >
>