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})
>