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

Reply via email to