Module Name: src
Committed By: joerg
Date: Thu May 19 14:29:27 UTC 2011
Modified Files:
src/share/mk: bsd.README bsd.own.mk
Log Message:
Add fine-grained compiler selection, including clang support.
To generate a diff of this commit:
cvs rdiff -u -r1.280 -r1.281 src/share/mk/bsd.README
cvs rdiff -u -r1.666 -r1.667 src/share/mk/bsd.own.mk
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/mk/bsd.README
diff -u src/share/mk/bsd.README:1.280 src/share/mk/bsd.README:1.281
--- src/share/mk/bsd.README:1.280 Thu Mar 24 17:05:44 2011
+++ src/share/mk/bsd.README Thu May 19 14:29:27 2011
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.README,v 1.280 2011/03/24 17:05:44 bouyer Exp $
+# $NetBSD: bsd.README,v 1.281 2011/05/19 14:29:27 joerg Exp $
# @(#)bsd.README 8.2 (Berkeley) 4/2/94
This is the README file for the make "include" files for the NetBSD
@@ -446,6 +446,20 @@
set to "-g", "-g" will be added to COPTS only when compiling
the crypto library.
+The active compiler is selected using the following variables:
+AVAILABLE_COMPILER
+ List of available compiler suites. Processed in order
+ for selecting the active compiler for each frontend.
+HAVE_PCC If defined, PCC is present and enabled.
+HAVE_LLVM If defined, LLVM/Clang is present and enabled.
+UNSUPPORTED_COMPILER.xxx
+ If defined, the support for compiler "xxx" is disabled.
+
+For the frontends (CC, CPP, CXX, FC and OBJC) the following variables exist:
+ACTIVE_CC Active compile suite for the CC frontend.
+SUPPORTED_CC Compile suite with support for the CC frontend.
+TOOL_CC.xxx Path to the CC frontend for compiler "xxx"
+
=-=-=-=-= sys.mk =-=-=-=-=
The include file <sys.mk> has the default rules for all makes, in the BSD
Index: src/share/mk/bsd.own.mk
diff -u src/share/mk/bsd.own.mk:1.666 src/share/mk/bsd.own.mk:1.667
--- src/share/mk/bsd.own.mk:1.666 Thu May 19 06:09:36 2011
+++ src/share/mk/bsd.own.mk Thu May 19 14:29:27 2011
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.own.mk,v 1.666 2011/05/19 06:09:36 adam Exp $
+# $NetBSD: bsd.own.mk,v 1.667 2011/05/19 14:29:27 joerg Exp $
# This needs to be before bsd.init.mk
.if defined(BSD_MK_COMPAT_FILE)
@@ -172,11 +172,11 @@
SIZE= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-size
STRIP= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-strip
-CC= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
-CPP= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-cpp
-CXX= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-c++
-FC= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-g77
-OBJC= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
+TOOL_CC.gcc= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
+TOOL_CPP.gcc= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-cpp
+TOOL_CXX.gcc= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-c++
+TOOL_FC.gcc= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-g77
+TOOL_OBJC.gcc= ${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
.else # } {
# Define default locations for common tools.
.if ${USETOOLS_BINUTILS:Uyes} == "yes" # {
@@ -189,23 +189,24 @@
RANLIB= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-ranlib
SIZE= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-size
STRIP= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-strip
-.endif # }
-.if defined(HAVE_GCC) && ${USETOOLS_GCC:Uyes} == "yes" # {
-CC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
-CPP= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-cpp
-CXX= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-c++
-FC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-g77
-OBJC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
+# GCC supports C, C++, Fortran and Objective C
+TOOL_CC.gcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
+TOOL_CPP.gcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-cpp
+TOOL_CXX.gcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-c++
+TOOL_FC.gcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-g77
+TOOL_OBJC.gcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
.endif # }
-.if defined(HAVE_PCC) && ${USETOOLS_PCC:Uyes} == "yes"
-CC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-pcc
-CPP= ${TOOLDIR}/libexec/${MACHINE_GNU_PLATFORM}-cpp
-CXX= false
-FC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-f77
-OBJC= false
-.endif
+# Clang supports C, C++ and Objective C
+TOOL_CC.clang= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang
+TOOL_CPP.clang= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang-cpp
+TOOL_CXX.clang= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang++
+TOOL_OBJC.clang= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang
+
+# PCC supports C and Fortran
+TOOL_CC.pcc= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-pcc
+TOOL_CPP.pcc= ${TOOLDIR}/libexec/${MACHINE_GNU_PLATFORM}-cpp
#
# Make sure DESTDIR is set, so that builds with these tools always
@@ -318,6 +319,23 @@
.else # USETOOLS != yes # } {
+# Clang supports C, C++ and Objective C
+TOOL_CC.clang= clang
+TOOL_CPP.clang= clang-cpp
+TOOL_CXX.clang= clang++
+TOOL_OBJC.clang= clang
+
+# GCC supports C, C++, Fortran and Objective C
+TOOL_CC.gcc= gcc
+TOOL_CPP.gcc= cpp
+TOOL_CXX.gcc= c++
+TOOL_FC.gcc= g77
+TOOL_OBJC.gcc= gcc
+
+# PCC supports C and Fortran
+TOOL_CC.pcc= pcc
+TOOL_CPP.pcc= /usr/libexec/pcpp
+
TOOL_AMIGAAOUT2BB= amiga-aout2bb
TOOL_AMIGAELF2BB= amiga-elf2bb
TOOL_AMIGATXLT= amiga-txlt
@@ -397,6 +415,26 @@
.endif # USETOOLS != yes # }
+# Fallback to ensure that all variables are defined to something
+TOOL_CC.false= false
+TOOL_CPP.false= false
+TOOL_CXX.false= false
+TOOL_FC.false= false
+TOOL_OBJC.false= false
+
+AVAILABLE_COMPILER?= ${HAVE_PCC:Dpcc} ${HAVE_LLVM:Dclang} ${HAVE_GCC:Dgcc} false
+
+.for _t in CC CPP CXX FC OBJC
+ACTIVE_${_t}= ${AVAILABLE_COMPILER:@.c.@ ${ !defined(UNSUPPORTED_COMPILER.${.c.}) && defined(TOOL_${_t}.${.c.}) :? ${.c.} : }@:[1]}
+SUPPORTED_${_t}=${AVAILABLE_COMPILER:Nfalse:@.c.@ ${ !defined(UNSUPPORTED_COMPILER.${.c.}) && defined(TOOL_${_t}.${.c.}) :? ${.c.} : }@}
+.endfor
+# make bugs prevent moving this into the .for loop
+CC= ${TOOL_CC.${ACTIVE_CC}}
+CPP= ${TOOL_CPP.${ACTIVE_CPP}}
+CXX= ${TOOL_CXX.${ACTIVE_CXX}}
+FC= ${TOOL_FC.${ACTIVE_FC}}
+OBJC= ${TOOL_OBJC.${ACTIVE_OBJC}}
+
#
# Targets to check if DESTDIR or RELEASEDIR is provided
#