svn commit: r243041 - in stable/9: . share/mk sys/conf

Dimitry Andric dim at FreeBSD.org
Wed Nov 14 20:27:17 UTC 2012


Author: dim
Date: Wed Nov 14 20:27:17 2012
New Revision: 243041
URL: http://svnweb.freebsd.org/changeset/base/243041

Log:
  MFC r240468 (by brooks):
  
    Introduce a new make variable COMPILER_TYPE that specifies what
    type of compiler is being used (currently clang or gcc).  COMPILER_TYPE
    is set in the new bsd.compiler.mk file based on the value of the CC
    variable or, should it prove informative, by running ${CC} --version
    and examining the output.
  
    To avoid negative performance impacts in the default case and correct
    value for COMPILER_TYPE type is determined and passed in the environment
    of submake instances while building world.
  
    Replace adhoc attempts at determining the compiler type by examining
    CC or MK_CLANG_IS_CC with checks of COMPILER_TYPE.  This eliminates
    bootstrapping complications when first setting WITH_CLANG_IS_CC.
  
    Sponsored by:	DARPA, AFRL
    Reviewed by:	Yamaya Takashi <yamayan at kbh.biglobe.ne.jp>, imp, linimon
  		(with some modifications post review)
  
  MFC r242633 (by brooks):
  
    Allow CC to be gcc46 or similar by matching gcc*.
  
    Don't test the value of the :M matches, either the string matches or does
    not.
  
  MFC r242658:
  
    Fix typo in bsd.compiler.mk.

Added:
  stable/9/share/mk/bsd.compiler.mk
     - copied, changed from r240468, head/share/mk/bsd.compiler.mk
Modified:
  stable/9/Makefile.inc1   (contents, props changed)
  stable/9/share/mk/Makefile
  stable/9/share/mk/bsd.sys.mk   (contents, props changed)
  stable/9/sys/conf/kern.mk
  stable/9/sys/conf/kern.pre.mk
  stable/9/sys/conf/kmod.mk
Directory Properties:
  stable/9/share/   (props changed)
  stable/9/share/mk/   (props changed)
  stable/9/sys/   (props changed)
  stable/9/sys/conf/   (props changed)

Modified: stable/9/Makefile.inc1
==============================================================================
--- stable/9/Makefile.inc1	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/Makefile.inc1	Wed Nov 14 20:27:17 2012	(r243041)
@@ -42,6 +42,7 @@ TARGET_ARCH=${TARGET}
 
 .include <bsd.own.mk>
 .include <bsd.arch.inc.mk>
+.include <bsd.compiler.mk>
 
 # We must do share/info early so that installation of info `dir'
 # entries works correctly.  Do it first since it is less likely to
@@ -230,7 +231,8 @@ BMAKEENV=	INSTALL="sh ${.CURDIR}/tools/i
 		PATH=${BPATH}:${PATH} \
 		WORLDTMP=${WORLDTMP} \
 		VERSION="${VERSION}" \
-		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
+		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
+		COMPILER_TYPE=${COMPILER_TYPE}
 BMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
 		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
 		DESTDIR= \
@@ -265,6 +267,16 @@ WMAKEENV=	${CROSSENV} \
 .if ${MK_CDDL} == "no"
 WMAKEENV+=	NO_CTF=1
 .endif
+.if ${CC:T:Mgcc} == "gcc"
+WMAKE_COMPILER_TYPE=	gcc
+.elif ${CC:T:Mclang} == "clang"
+WMAKE_COMPILER_TYPE=	clang
+.elif ${MK_CLANG_IS_CC} == "no"
+WMAKE_COMPILER_TYPE=	gcc
+.else
+WMAKE_COMPILER_TYPE=	clang
+.endif
+WMAKEENV+=	COMPILER_TYPE=${WMAKE_COMPILER_TYPE}
 WMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
 
 .if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64"
@@ -308,7 +320,8 @@ LIB32WMAKEENV+=	MAKEOBJDIRPREFIX=${OBJTR
 		CC="${CC} ${LIB32FLAGS}" \
 		CXX="${CXX} ${LIB32FLAGS}" \
 		LIBDIR=/usr/lib32 \
-		SHLIBDIR=/usr/lib32
+		SHLIBDIR=/usr/lib32 \
+		COMPILER_TYPE=${WMAKE_COMPILER_TYPE}
 
 LIB32WMAKE=	${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
 		-DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_INFO \

Modified: stable/9/share/mk/Makefile
==============================================================================
--- stable/9/share/mk/Makefile	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/share/mk/Makefile	Wed Nov 14 20:27:17 2012	(r243041)
@@ -3,7 +3,8 @@
 
 FILES=	bsd.README
 FILES+=	bsd.arch.inc.mk
-FILES+=	bsd.compat.mk bsd.cpu.mk bsd.dep.mk bsd.doc.mk bsd.dtrace.mk
+FILES+=	bsd.compat.mk bsd.compiler.mk bsd.cpu.mk
+FILES+=	bsd.dep.mk bsd.doc.mk bsd.dtrace.mk
 FILES+=	bsd.endian.mk
 FILES+=	bsd.files.mk bsd.crunchgen.mk bsd.incs.mk bsd.info.mk bsd.init.mk
 FILES+=	bsd.kmod.mk

Copied and modified: stable/9/share/mk/bsd.compiler.mk (from r240468, head/share/mk/bsd.compiler.mk)
==============================================================================
--- head/share/mk/bsd.compiler.mk	Thu Sep 13 16:00:46 2012	(r240468, copy source)
+++ stable/9/share/mk/bsd.compiler.mk	Wed Nov 14 20:27:17 2012	(r243041)
@@ -1,20 +1,20 @@
 # $FreeBSD$
 
 .if !defined(COMPILER_TYPE)
-. if ${CC:T:Mgcc} == "gcc"
+. if ${CC:T:Mgcc*}
 COMPILER_TYPE:=	gcc  
-. elif ${CC:T:Mclang} == "clang"
+. elif ${CC:T:Mclang}
 COMPILER_TYPE:=	clang
 . else
 _COMPILER_VERSION!=	${CC} --version
-.  if ${_COMPILER_VERSION:Mgcc} == "gcc"
+.  if ${_COMPILER_VERSION:Mgcc}
 COMPILER_TYPE:=	gcc
-.  elif ${_COMPILER_VERSION:M\(GCC\)} == "(GCC)"
+.  elif ${_COMPILER_VERSION:M\(GCC\)}
 COMPILER_TYPE:=	gcc
-.  elif ${_COMPILER_VERSION:Mclang} == "clang"
+.  elif ${_COMPILER_VERSION:Mclang}
 COMPILER_TYPE:=	clang
 .  else
-.error Unable to determing compiler type for ${CC}
+.error Unable to determine compiler type for ${CC}
 .  endif
 .  undef _COMPILER_VERSION
 . endif

Modified: stable/9/share/mk/bsd.sys.mk
==============================================================================
--- stable/9/share/mk/bsd.sys.mk	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/share/mk/bsd.sys.mk	Wed Nov 14 20:27:17 2012	(r243041)
@@ -8,6 +8,8 @@
 
 # for GCC:   http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc/Warning-Options.html
 
+.include <bsd.compiler.mk>
+
 # the default is gnu99 for now
 CSTD?=		gnu99
 
@@ -28,8 +30,8 @@ CFLAGS+=	-std=${CSTD}
 .if defined(WARNS)
 .if ${WARNS} >= 1
 CWARNFLAGS+=	-Wsystem-headers
-.if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \
-    ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang))
+.if !defined(NO_WERROR) && (${COMPILER_TYPE} != "clang" \
+    || !defined(NO_WERROR.clang))
 CWARNFLAGS+=	-Werror
 .endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang)
 .endif # WARNS >= 1
@@ -43,8 +45,8 @@ CWARNFLAGS+=	-W -Wno-unused-parameter -W
 .if ${WARNS} >= 4
 CWARNFLAGS+=	-Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow\
 		-Wunused-parameter
-.if !defined(NO_WCAST_ALIGN) && ((${MK_CLANG_IS_CC} == "no" && \
-    ${CC:T:Mclang} != "clang") || !defined(NO_WCAST_ALIGN.clang))
+.if !defined(NO_WCAST_ALIGN) && (${COMPILER_TYPE} != "clang" \
+    || !defined(NO_WCAST_ALIGN.clang))
 CWARNFLAGS+=	-Wcast-align
 .endif # !NO_WCAST_ALIGN && (!CLANG || !NO_WCAST_ALIGN.clang)
 .endif # WARNS >= 4
@@ -61,8 +63,7 @@ CWARNFLAGS+=	-Wno-uninitialized
 CWARNFLAGS+=	-Wno-pointer-sign
 # Clang has more warnings enabled by default, and when using -Wall, so if WARNS
 # is set to low values, these have to be disabled explicitly.
-.if (${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang") && \
-    !defined(EARLY_BUILD)
+.if ${COMPILER_TYPE} == "clang" && !defined(EARLY_BUILD)
 .if ${WARNS} <= 6
 CWARNFLAGS+=	-Wno-empty-body -Wno-string-plus-int
 .endif # WARNS <= 6
@@ -89,20 +90,18 @@ WFORMAT=	1
 .if ${WFORMAT} > 0
 #CWARNFLAGS+=	-Wformat-nonliteral -Wformat-security -Wno-format-extra-args
 CWARNFLAGS+=	-Wformat=2 -Wno-format-extra-args
-.if (${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang") && \
-    !defined(EARLY_BUILD)
+.if ${COMPILER_TYPE} == "clang" && !defined(EARLY_BUILD)
 .if ${WARNS} <= 3
 CWARNFLAGS+=	-Wno-format-nonliteral
 .endif # WARNS <= 3
 .endif # CLANG
-.if !defined(NO_WERROR) && ((${MK_CLANG_IS_CC} == "no" && \
-    ${CC:T:Mclang} != "clang") || !defined(NO_WERROR.clang))
+.if !defined(NO_WERROR) && (${COMPILER_TYPE} != "clang" \
+    || !defined(NO_WERROR.clang))
 CWARNFLAGS+=	-Werror
 .endif # !NO_WERROR && (!CLANG || !NO_WERROR.clang)
 .endif # WFORMAT > 0
 .endif # WFORMAT
-.if defined(NO_WFORMAT) || ((${MK_CLANG_IS_CC} != "no" || \
-    ${CC:T:Mclang} == "clang") && defined(NO_WFORMAT.clang))
+.if defined(NO_WFORMAT) || (${COMPILER_TYPE} == "clang" && defined(NO_WFORMAT.clang))
 CWARNFLAGS+=	-Wno-format
 .endif # NO_WFORMAT || (CLANG && NO_WFORMAT.clang)
 .endif # !NO_WARNS
@@ -111,8 +110,7 @@ CWARNFLAGS+=	-Wno-format
 CWARNFLAGS+=	-Wno-unknown-pragmas
 .endif # IGNORE_PRAGMA
 
-.if (${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang") && \
-    !defined(EARLY_BUILD)
+.if ${COMPILER_TYPE} == "clang" && !defined(EARLY_BUILD)
 CLANG_NO_IAS=	 -no-integrated-as
 CLANG_OPT_SMALL= -mstack-alignment=8 -mllvm -inline-threshold=3\
 		 -mllvm -enable-load-pre=false -mllvm -simplifycfg-dup-ret

Modified: stable/9/sys/conf/kern.mk
==============================================================================
--- stable/9/sys/conf/kern.mk	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/sys/conf/kern.mk	Wed Nov 14 20:27:17 2012	(r243041)
@@ -15,7 +15,7 @@ CWARNFLAGS?=	-Wall -Wredundant-decls -Wn
 # Disable a few warnings for clang, since there are several places in the
 # kernel where fixing them is more trouble than it is worth, or where there is
 # a false positive.
-.if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
+.if ${COMPILER_TYPE} == "clang"
 NO_WCONSTANT_CONVERSION=	-Wno-constant-conversion
 NO_WARRAY_BOUNDS=		-Wno-array-bounds
 NO_WSHIFT_COUNT_NEGATIVE=	-Wno-shift-count-negative
@@ -51,7 +51,7 @@ CWARNEXTRA?=	-Wno-error-tautological-com
 # Setting -mno-sse implies -mno-sse2, -mno-sse3, -mno-ssse3, -mno-sse41 and -mno-sse42
 #
 .if ${MACHINE_CPUARCH} == "i386"
-.if ${MK_CLANG_IS_CC} == "no" && ${CC:T:Mclang} != "clang"
+.if ${COMPILER_TYPE} != "clang"
 CFLAGS+=	-mno-align-long-strings -mpreferred-stack-boundary=2
 .else
 CFLAGS+=	-mno-aes -mno-avx
@@ -99,7 +99,7 @@ INLINE_LIMIT?=	15000
 # (-mfpmath= is not supported)
 #
 .if ${MACHINE_CPUARCH} == "amd64"
-.if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
+.if ${COMPILER_TYPE} == "clang"
 CFLAGS+=	-mno-aes -mno-avx
 .endif
 CFLAGS+=	-mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float \

Modified: stable/9/sys/conf/kern.pre.mk
==============================================================================
--- stable/9/sys/conf/kern.pre.mk	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/sys/conf/kern.pre.mk	Wed Nov 14 20:27:17 2012	(r243041)
@@ -4,6 +4,7 @@
 # of the definitions that need to be before %BEFORE_DEPEND.
 
 .include <bsd.own.mk>
+.include <bsd.compiler.mk>
 
 # backwards compat option for older systems.
 MACHINE_CPUARCH?=${MACHINE_ARCH:C/mipse[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/}
@@ -35,7 +36,7 @@ _MINUS_O=	-O2
 .endif
 .endif
 .if ${MACHINE_CPUARCH} == "amd64"
-.if ${MK_CLANG_IS_CC} == "no" && ${CC:T:Mclang} != "clang"
+.if ${COMPILER_TYPE} != "clang"
 COPTFLAGS?=-O2 -frename-registers -pipe
 .else
 COPTFLAGS?=-O2 -pipe
@@ -85,7 +86,7 @@ INCLUDES+= -I$S/dev/cxgb -I$S/dev/cxgbe
 
 CFLAGS=	${COPTFLAGS} ${C_DIALECT} ${DEBUG} ${CWARNFLAGS}
 CFLAGS+= ${INCLUDES} -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h
-.if ${MK_CLANG_IS_CC} == "no" && ${CC:T:Mclang} != "clang"
+.if ${COMPILER_TYPE} != "clang"
 CFLAGS+= -fno-common -finline-limit=${INLINE_LIMIT}
 .if ${MACHINE_CPUARCH} != "mips"
 CFLAGS+= --param inline-unit-growth=100
@@ -102,7 +103,7 @@ WERROR?= -Werror
 # XXX LOCORE means "don't declare C stuff" not "for locore.s".
 ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
 
-.if ${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang"
+.if ${COMPILER_TYPE} == "clang"
 CLANG_NO_IAS= -no-integrated-as
 .endif
 

Modified: stable/9/sys/conf/kmod.mk
==============================================================================
--- stable/9/sys/conf/kmod.mk	Wed Nov 14 20:01:40 2012	(r243040)
+++ stable/9/sys/conf/kmod.mk	Wed Nov 14 20:27:17 2012	(r243041)
@@ -73,6 +73,7 @@ OBJCOPY?=	objcopy
 .endif
 
 .include <bsd.init.mk>
+.include <bsd.compiler.mk>
 
 .SUFFIXES: .out .o .c .cc .cxx .C .y .l .s .S
 
@@ -108,7 +109,7 @@ CFLAGS+=	-I. -I@
 # for example.
 CFLAGS+=	-I@/contrib/altq
 
-.if ${MK_CLANG_IS_CC} == "no" && ${CC:T:Mclang} != "clang"
+.if ${COMPILER_TYPE} != "clang"
 CFLAGS+=	-finline-limit=${INLINE_LIMIT}
 CFLAGS+= --param inline-unit-growth=100
 CFLAGS+= --param large-function-growth=1000


More information about the svn-src-stable-9 mailing list