aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2012-02-28 18:30:18 +0000
committerDimitry Andric <dim@FreeBSD.org>2012-02-28 18:30:18 +0000
commit07b202a847e08b9cd976e40315cda902ced1c84a (patch)
tree3aa885ba7c336d9e6d260c5deb1228863b043b89
parent8cfa93e4be0331e422d590579cb676f9f253b389 (diff)
downloadsrc-07b202a847e08b9cd976e40315cda902ced1c84a.tar.gz
src-07b202a847e08b9cd976e40315cda902ced1c84a.zip
Define several extra macros in bsd.sys.mk and sys/conf/kern.pre.mk, to
get rid of testing explicitly for clang (using ${CC:T:Mclang}) in individual Makefiles. Instead, use the following extra macros, for use with clang: - NO_WERROR.clang (disables -Werror) - NO_WCAST_ALIGN.clang (disables -Wcast-align) - NO_WFORMAT.clang (disables -Wformat and friends) - CLANG_NO_IAS (disables integrated assembler) - CLANG_OPT_SMALL (adds flags for extra small size optimizations) As a side effect, this enables setting CC/CXX/CPP in src.conf instead of make.conf! For clang, use the following: CC=clang CXX=clang++ CPP=clang-cpp MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=232263
-rw-r--r--lib/libsm/Makefile4
-rw-r--r--lib/libthread_db/Makefile4
-rw-r--r--lib/libz/Makefile8
-rw-r--r--libexec/mail.local/Makefile4
-rw-r--r--libexec/smrsh/Makefile4
-rw-r--r--sbin/fsdb/Makefile4
-rw-r--r--share/mk/bsd.sys.mk14
-rw-r--r--sys/boot/i386/boot0/Makefile11
-rw-r--r--sys/boot/i386/boot2/Makefile16
-rw-r--r--sys/boot/i386/btx/btx/Makefile9
-rw-r--r--sys/boot/i386/btx/btxldr/Makefile9
-rw-r--r--sys/boot/i386/gptboot/Makefile9
-rw-r--r--sys/boot/i386/gptzfsboot/Makefile9
-rw-r--r--sys/boot/i386/libi386/Makefile9
-rw-r--r--sys/boot/i386/pxeldr/Makefile9
-rw-r--r--sys/boot/i386/zfsboot/Makefile9
-rw-r--r--sys/boot/pc98/btx/btx/Makefile9
-rw-r--r--sys/boot/pc98/btx/btxldr/Makefile9
-rw-r--r--sys/conf/Makefile.amd6411
-rw-r--r--sys/conf/Makefile.i3867
-rw-r--r--sys/conf/kern.pre.mk4
-rw-r--r--sys/modules/bios/smapi/Makefile8
-rw-r--r--sys/modules/linux/Makefile9
-rw-r--r--usr.bin/netstat/Makefile4
-rw-r--r--usr.bin/vacation/Makefile4
-rw-r--r--usr.sbin/sendmail/Makefile4
26 files changed, 89 insertions, 112 deletions
diff --git a/lib/libsm/Makefile b/lib/libsm/Makefile
index 661e87a6e7aa..f2f19fb4cf4a 100644
--- a/lib/libsm/Makefile
+++ b/lib/libsm/Makefile
@@ -18,12 +18,10 @@ CFLAGS+=${SENDMAIL_CFLAGS}
WARNS?= 2
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives warnings about sendmail code that cannot
# be turned off yet. Since this is contrib code, and we don't really
# care about the warnings, just make them non-fatal for now.
-NO_WERROR=
-.endif
+NO_WERROR.clang=
LIB= sm
diff --git a/lib/libthread_db/Makefile b/lib/libthread_db/Makefile
index a66f25da6f63..b612f4f8d789 100644
--- a/lib/libthread_db/Makefile
+++ b/lib/libthread_db/Makefile
@@ -16,10 +16,8 @@ SYM_MAPS+=${.CURDIR}/Symbol.map
SYMBOL_MAPS=${SYM_MAPS}
VERSION_DEF=${.CURDIR}/../libc/Versions.def
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives an incorrect warning about alignment in
# arch/i386/libpthread_md.c, so turn that off for now.
-NO_WCAST_ALIGN=
-.endif
+NO_WCAST_ALIGN.clang=
.include <bsd.lib.mk>
diff --git a/lib/libz/Makefile b/lib/libz/Makefile
index 8ae9aeb4929f..e373e834cbf6 100644
--- a/lib/libz/Makefile
+++ b/lib/libz/Makefile
@@ -47,10 +47,6 @@ ACFLAGS+= -Wa,--noexecstack
#SRCS+= gvmat64.S
#CFLAGS+= -DASMV -DNO_UNDERLINE
#ACFLAGS+= -Wa,--noexecstack
-#.if ${CC:T:Mclang} == "clang"
-## XXX: clang integrated-as doesn't grok .intel_syntax directives yet
-#ACFLAGS+= ${.IMPSRC:T:Mgvmat64.S:C/^.+$/-no-integrated-as/}
-#.endif
#.endif
VERSION_DEF= ${.CURDIR}/Versions.def
@@ -71,3 +67,7 @@ test: example minigzip
echo hello world | ./minigzip | ./minigzip -d )
.include <bsd.lib.mk>
+
+## XXX: clang integrated-as doesn't grok .intel_syntax directives yet
+#ACFLAGS.gvmat64.S= ${CLANG_NO_IAS}
+#ACFLAGS+= ${ACFLAGS.${.IMPSRC:T}}
diff --git a/libexec/mail.local/Makefile b/libexec/mail.local/Makefile
index de490fb42314..1487decf6216 100644
--- a/libexec/mail.local/Makefile
+++ b/libexec/mail.local/Makefile
@@ -12,12 +12,10 @@ CFLAGS+=-I${SENDMAIL_DIR}/include -I.
WARNS?= 2
WFORMAT=0
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives warnings about sendmail code that cannot
# be turned off yet. Since this is contrib code, and we don't really
# care about the warnings, just make them non-fatal for now.
-NO_WERROR=
-.endif
+NO_WERROR.clang=
LIBSMDIR= ${.OBJDIR}/../../lib/libsm
LIBSM= ${LIBSMDIR}/libsm.a
diff --git a/libexec/smrsh/Makefile b/libexec/smrsh/Makefile
index 7080fbae86fb..0de820d02279 100644
--- a/libexec/smrsh/Makefile
+++ b/libexec/smrsh/Makefile
@@ -17,12 +17,10 @@ LDADD= ${LIBSM}
WARNS?= 2
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives warnings about sendmail code that cannot
# be turned off yet. Since this is contrib code, and we don't really
# care about the warnings, just make them non-fatal for now.
-NO_WERROR=
-.endif
+NO_WERROR.clang=
SRCS+= sm_os.h
CLEANFILES+=sm_os.h
diff --git a/sbin/fsdb/Makefile b/sbin/fsdb/Makefile
index 038f82efd18f..5e172fd78d55 100644
--- a/sbin/fsdb/Makefile
+++ b/sbin/fsdb/Makefile
@@ -9,10 +9,8 @@ SRCS= fsdb.c fsdbutil.c \
pass5.c setup.c utilities.c ffs_subr.c ffs_tables.c
CFLAGS+= -I${.CURDIR}/../fsck_ffs
WARNS?= 2
-.if ${CC:T:Mclang} == "clang"
# Work around a problem with format string warnings and ntohs macros.
-NO_WFORMAT=
-.endif
+NO_WFORMAT.clang=
LDADD= -ledit -ltermcap
DPADD= ${LIBEDIT} ${LIBTERMCAP}
.PATH: ${.CURDIR}/../fsck_ffs ${.CURDIR}/../../sys/ufs/ffs
diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk
index 7a72ca65ee37..9b56154a369c 100644
--- a/share/mk/bsd.sys.mk
+++ b/share/mk/bsd.sys.mk
@@ -28,7 +28,7 @@ CFLAGS += -std=${CSTD}
. if defined(WARNS)
. if ${WARNS} >= 1
CWARNFLAGS += -Wsystem-headers
-. if !defined(NO_WERROR)
+. if !defined(NO_WERROR) && (${CC:T:Mclang} != "clang" || !defined(NO_WERROR.clang))
CWARNFLAGS += -Werror
. endif
. endif
@@ -42,7 +42,7 @@ CWARNFLAGS += -W -Wno-unused-parameter -Wstrict-prototypes\
. if ${WARNS} >= 4
CWARNFLAGS += -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch\
-Wshadow -Wunused-parameter
-. if !defined(NO_WCAST_ALIGN)
+. if !defined(NO_WCAST_ALIGN) && (${CC:T:Mclang} != "clang" || !defined(NO_WCAST_ALIGN.clang))
CWARNFLAGS += -Wcast-align
. endif
. endif
@@ -84,12 +84,12 @@ WFORMAT = 1
. if ${WFORMAT} > 0
#CWARNFLAGS += -Wformat-nonliteral -Wformat-security -Wno-format-extra-args
CWARNFLAGS += -Wformat=2 -Wno-format-extra-args
-. if !defined(NO_WERROR)
+. if !defined(NO_WERROR) && (${CC:T:Mclang} != "clang" || !defined(NO_WERROR.clang))
CWARNFLAGS += -Werror
. endif
. endif
. endif
-. if defined(NO_WFORMAT)
+. if defined(NO_WFORMAT) || (${CC:T:Mclang} == "clang" && defined(NO_WFORMAT.clang))
CWARNFLAGS += -Wno-format
. endif
.endif
@@ -98,6 +98,12 @@ CWARNFLAGS += -Wno-format
CWARNFLAGS += -Wno-unknown-pragmas
.endif
+.if ${CC:T:Mclang} == "clang"
+CLANG_NO_IAS = -no-integrated-as
+CLANG_OPT_SMALL = -mllvm -stack-alignment=8 -mllvm -inline-threshold=3 \
+ -mllvm -enable-load-pre=false
+.endif
+
.if ${MK_SSP} != "no" && ${MACHINE_CPUARCH} != "ia64" && \
${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
# Don't use -Wstack-protector as it breaks world with -Werror.
diff --git a/sys/boot/i386/boot0/Makefile b/sys/boot/i386/boot0/Makefile
index 4013983c4063..38281a1d510a 100644
--- a/sys/boot/i386/boot0/Makefile
+++ b/sys/boot/i386/boot0/Makefile
@@ -19,12 +19,6 @@ SRCS= ${PROG}.S
OPTS ?= -DVOLUME_SERIAL -DPXE
CFLAGS += ${OPTS}
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mboot0.S:C/^.+$/-no-integrated-as/}
-CFLAGS+= ${.IMPSRC:T:Mboot0ext.S:C/^.+$/-no-integrated-as/}
-.endif
-
# Flags used in the boot0.S code:
# 0x0f all valid partitions enabled.
# 0x80 'packet', use BIOS EDD (LBA) extensions instead of CHS
@@ -83,3 +77,8 @@ CFLAGS+=-DFLAGS=${BOOT_BOOT0_FLAGS} \
LDFLAGS=-e start -Ttext ${BOOT_BOOT0_ORG} -Wl,-N,-S,--oformat,binary
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.boot0.S= ${CLANG_NO_IAS}
+CFLAGS.boot0ext.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/boot2/Makefile b/sys/boot/i386/boot2/Makefile
index e2fc534cadc8..68e49edf52fe 100644
--- a/sys/boot/i386/boot2/Makefile
+++ b/sys/boot/i386/boot2/Makefile
@@ -40,14 +40,8 @@ CFLAGS= -Os \
-Wall -Waggregate-return -Wbad-function-cast -Wcast-align \
-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
- -Winline --param max-inline-insns-single=100
-
-.if ${CC:T:Mclang} == "clang"
-CFLAGS+= -mllvm -stack-alignment=8 -mllvm -inline-threshold=3 \
- -mllvm -enable-load-pre=false
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mboot1.S:C/^.+$/-no-integrated-as/}
-.endif
+ -Winline --param max-inline-insns-single=100 \
+ ${CLANG_OPT_SMALL}
LDFLAGS=-static -N --gc-sections
@@ -89,9 +83,7 @@ boot2.out: ${BTXCRT} boot2.o sio.o
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
boot2.o: boot2.s
-.if ${CC:T:Mclang} == "clang"
${CC} ${ACFLAGS} -c boot2.s
-.endif
SRCS= boot2.c boot2.h
@@ -115,3 +107,7 @@ machine:
.endif
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.boot1.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/btx/btx/Makefile b/sys/boot/i386/btx/btx/Makefile
index 4c74c1ddb332..2b4abe6ab120 100644
--- a/sys/boot/i386/btx/btx/Makefile
+++ b/sys/boot/i386/btx/btx/Makefile
@@ -13,11 +13,6 @@ BOOT_BTX_FLAGS=0x0
CFLAGS+=-DBTX_FLAGS=${BOOT_BTX_FLAGS}
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+=${.IMPSRC:T:Mbtx.S:C/^.+$/-no-integrated-as/}
-.endif
-
.if defined(BTX_SERIAL)
BOOT_COMCONSOLE_PORT?= 0x3f8
BOOT_COMCONSOLE_SPEED?= 9600
@@ -32,3 +27,7 @@ ORG= 0x9000
LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.btx.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/btx/btxldr/Makefile b/sys/boot/i386/btx/btxldr/Makefile
index 0e12f466ceda..56333e7f35e2 100644
--- a/sys/boot/i386/btx/btxldr/Makefile
+++ b/sys/boot/i386/btx/btxldr/Makefile
@@ -11,11 +11,10 @@ CFLAGS+=-DLOADER_ADDRESS=${LOADER_ADDRESS}
CFLAGS+=-DBTXLDR_VERBOSE
.endif
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+=${.IMPSRC:T:Mbtxldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LDFLAGS=-e start -Ttext ${LOADER_ADDRESS} -Wl,-N,-S,--oformat,binary
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.btxldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/gptboot/Makefile b/sys/boot/i386/gptboot/Makefile
index 48a6d590c8c8..e1a640af9591 100644
--- a/sys/boot/i386/gptboot/Makefile
+++ b/sys/boot/i386/gptboot/Makefile
@@ -36,11 +36,6 @@ CFLAGS= -DBOOTPROG=\"gptboot\" \
-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
-Winline --param max-inline-insns-single=100
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mgptldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LDFLAGS=-static -N --gc-sections
# Pick up ../Makefile.inc early.
@@ -79,3 +74,7 @@ machine:
.endif
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.gptldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/gptzfsboot/Makefile b/sys/boot/i386/gptzfsboot/Makefile
index 2067162a8cd3..a2b8fccf8ccb 100644
--- a/sys/boot/i386/gptzfsboot/Makefile
+++ b/sys/boot/i386/gptzfsboot/Makefile
@@ -34,11 +34,6 @@ CFLAGS= -DBOOTPROG=\"gptzfsboot\" \
-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
-Winline --param max-inline-insns-single=100
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mgptldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LDFLAGS=-static -N --gc-sections
# Pick up ../Makefile.inc early.
@@ -77,3 +72,7 @@ machine:
.endif
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.gptldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/libi386/Makefile b/sys/boot/i386/libi386/Makefile
index de32c911ef8e..94a20c8f3f69 100644
--- a/sys/boot/i386/libi386/Makefile
+++ b/sys/boot/i386/libi386/Makefile
@@ -54,11 +54,6 @@ CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../common \
# the location of libstand
CFLAGS+= -I${.CURDIR}/../../../../lib/libstand/
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mamd64_tramp.S:C/^.+$/-no-integrated-as/}
-.endif
-
.if ${MACHINE_CPUARCH} == "amd64"
CLEANFILES+= machine
machine:
@@ -67,6 +62,10 @@ machine:
.include <bsd.lib.mk>
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.amd64_tramp.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
+
.if ${MACHINE_CPUARCH} == "amd64"
beforedepend ${OBJS}: machine
.endif
diff --git a/sys/boot/i386/pxeldr/Makefile b/sys/boot/i386/pxeldr/Makefile
index 0290632caf41..f4fd65d128e4 100644
--- a/sys/boot/i386/pxeldr/Makefile
+++ b/sys/boot/i386/pxeldr/Makefile
@@ -23,11 +23,6 @@ CFLAGS+=-DPROBE_KEYBOARD
CFLAGS+=-DALWAYS_SERIAL
.endif
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+=${.IMPSRC:T:Mpxeldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LOADERBIN= ${.OBJDIR}/../loader/loader.bin
CLEANFILES+= ${BOOT}.tmp
@@ -46,3 +41,7 @@ ${LOADER}: ${LOADERBIN} ${BTXLDR} ${BTXKERN}
-b ${BTXKERN} ${LOADERBIN}
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.pxeldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/i386/zfsboot/Makefile b/sys/boot/i386/zfsboot/Makefile
index 024fa258583a..b2db778888e7 100644
--- a/sys/boot/i386/zfsboot/Makefile
+++ b/sys/boot/i386/zfsboot/Makefile
@@ -31,11 +31,6 @@ CFLAGS= -DBOOTPROG=\"zfsboot\" \
-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
-Winline --param max-inline-insns-single=100
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mzfsldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LDFLAGS=-static -N --gc-sections
# Pick up ../Makefile.inc early.
@@ -90,3 +85,7 @@ machine:
.endif
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.zfsldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/pc98/btx/btx/Makefile b/sys/boot/pc98/btx/btx/Makefile
index e6067534e479..d90e51f17221 100644
--- a/sys/boot/pc98/btx/btx/Makefile
+++ b/sys/boot/pc98/btx/btx/Makefile
@@ -13,11 +13,6 @@ BOOT_BTX_FLAGS=0x0
CFLAGS+=-DBTX_FLAGS=${BOOT_BTX_FLAGS}
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+=${.IMPSRC:T:Mbtx.S:C/^.+$/-no-integrated-as/}
-.endif
-
.if defined(BTX_SERIAL)
BOOT_COMCONSOLE_PORT?= 0x238
BOOT_COMCONSOLE_SPEED?= 9600
@@ -32,3 +27,7 @@ ORG= 0x9000
LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.btx.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/boot/pc98/btx/btxldr/Makefile b/sys/boot/pc98/btx/btxldr/Makefile
index 0e12f466ceda..56333e7f35e2 100644
--- a/sys/boot/pc98/btx/btxldr/Makefile
+++ b/sys/boot/pc98/btx/btxldr/Makefile
@@ -11,11 +11,10 @@ CFLAGS+=-DLOADER_ADDRESS=${LOADER_ADDRESS}
CFLAGS+=-DBTXLDR_VERBOSE
.endif
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+=${.IMPSRC:T:Mbtxldr.S:C/^.+$/-no-integrated-as/}
-.endif
-
LDFLAGS=-e start -Ttext ${LOADER_ADDRESS} -Wl,-N,-S,--oformat,binary
.include <bsd.prog.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.btxldr.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/conf/Makefile.amd64 b/sys/conf/Makefile.amd64
index 509682938ef0..33f146e1f1bf 100644
--- a/sys/conf/Makefile.amd64
+++ b/sys/conf/Makefile.amd64
@@ -40,13 +40,12 @@ CFLAGS+= -fno-omit-frame-pointer
MKMODULESENV+= MACHINE=amd64
-.if ${CC:T:Mclang} == "clang"
# XXX: clang integrated-as doesn't grok .codeNN directives yet
-ASM_CFLAGS+= ${.IMPSRC:T:Macpi_wakecode.S:C/^.+$/-no-integrated-as/}
-ASM_CFLAGS+= ${.IMPSRC:T:Mia32_sigtramp.S:C/^.+$/-no-integrated-as/}
-ASM_CFLAGS+= ${.IMPSRC:T:Mlinux32_locore.s:C/^.+$/-no-integrated-as/}
-ASM_CFLAGS+= ${.IMPSRC:T:Mmpboot.S:C/^.+$/-no-integrated-as/}
-.endif
+ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS}
+ASM_CFLAGS.ia32_sigtramp.S= ${CLANG_NO_IAS}
+ASM_CFLAGS.linux32_locore.s= ${CLANG_NO_IAS}
+ASM_CFLAGS.mpboot.S= ${CLANG_NO_IAS}
+ASM_CFLAGS+= ${ASM_CFLAGS.${.IMPSRC:T}}
%BEFORE_DEPEND
diff --git a/sys/conf/Makefile.i386 b/sys/conf/Makefile.i386
index 5ea09d0845b7..538ccbcc851e 100644
--- a/sys/conf/Makefile.i386
+++ b/sys/conf/Makefile.i386
@@ -34,11 +34,10 @@ MACHINE=i386
MKMODULESENV+= MACHINE=${MACHINE}
-.if ${CC:T:Mclang} == "clang"
# XXX: clang integrated-as doesn't grok .codeNN directives yet
-ASM_CFLAGS+= ${.IMPSRC:T:Macpi_wakecode.S:C/^.+$/-no-integrated-as/}
-ASM_CFLAGS+= ${.IMPSRC:T:Mmpboot.s:C/^.+$/-no-integrated-as/}
-.endif
+ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS}
+ASM_CFLAGS.mpboot.s= ${CLANG_NO_IAS}
+ASM_CFLAGS+= ${ASM_CFLAGS.${.IMPSRC:T}}
%BEFORE_DEPEND
diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk
index a209ddde158a..8edc1c91d3fc 100644
--- a/sys/conf/kern.pre.mk
+++ b/sys/conf/kern.pre.mk
@@ -101,6 +101,10 @@ WERROR?= -Werror
# XXX LOCORE means "don't declare C stuff" not "for locore.s".
ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
+.if ${CC:T:Mclang} == "clang"
+CLANG_NO_IAS= -no-integrated-as
+.endif
+
.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
CFLAGS+= -DGPROF -falign-functions=16
.if ${PROFLEVEL} >= 2
diff --git a/sys/modules/bios/smapi/Makefile b/sys/modules/bios/smapi/Makefile
index 16d832e861de..e2f50e57538a 100644
--- a/sys/modules/bios/smapi/Makefile
+++ b/sys/modules/bios/smapi/Makefile
@@ -7,9 +7,9 @@ KMOD= smapi
SRCS= smapi.c smapi_bios.S \
bus_if.h device_if.h
WERROR=
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok 16-bit assembly yet
-CFLAGS+= ${.IMPSRC:T:Msmapi_bios.S:C/^.+$/-no-integrated-as/}
-.endif
.include <bsd.kmod.mk>
+
+# XXX: clang integrated-as doesn't grok 16-bit assembly yet
+CFLAGS.smapi_bios.S= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/sys/modules/linux/Makefile b/sys/modules/linux/Makefile
index 568ee2ae34e2..891d8a89f400 100644
--- a/sys/modules/linux/Makefile
+++ b/sys/modules/linux/Makefile
@@ -5,11 +5,6 @@ SFX= 32
CFLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32
.endif
-.if ${CC:T:Mclang} == "clang"
-# XXX: clang integrated-as doesn't grok .codeNN directives yet
-CFLAGS+= ${.IMPSRC:T:Mlinux32_locore.s:C/^.+$/-no-integrated-as/}
-.endif
-
.PATH: ${.CURDIR}/../../compat/linux ${.CURDIR}/../../${MACHINE_CPUARCH}/linux${SFX}
KMOD= linux
@@ -69,3 +64,7 @@ CFLAGS+= -DKTR
.endif
.include <bsd.kmod.mk>
+
+# XXX: clang integrated-as doesn't grok .codeNN directives yet
+CFLAGS.linux32_locore.s= ${CLANG_NO_IAS}
+CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
diff --git a/usr.bin/netstat/Makefile b/usr.bin/netstat/Makefile
index 3f7fe9feb4df..224f2b7f6615 100644
--- a/usr.bin/netstat/Makefile
+++ b/usr.bin/netstat/Makefile
@@ -8,11 +8,9 @@ SRCS= if.c inet.c main.c mbuf.c mroute.c netisr.c route.c \
unix.c atalk.c mroute6.c ipsec.c bpf.c pfkey.c sctp.c
WARNS?= 3
-.if ${CC:T:Mclang} == "clang"
# XXX: Work around a clang false positive with format string warnings
# and ntohs macros (see LLVM PR 11313).
-NO_WFORMAT=
-.endif
+NO_WFORMAT.clang=
CFLAGS+=-fno-strict-aliasing
CFLAGS+=-DIPSEC
diff --git a/usr.bin/vacation/Makefile b/usr.bin/vacation/Makefile
index 2b13a28d81de..ad77dbae8c71 100644
--- a/usr.bin/vacation/Makefile
+++ b/usr.bin/vacation/Makefile
@@ -11,12 +11,10 @@ CFLAGS+=-D_FFR_LISTDB -D_FFR_DEBUG
WARNS?= 2
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives warnings about sendmail code that cannot
# be turned off yet. Since this is contrib code, and we don't really
# care about the warnings, just make them non-fatal for now.
-NO_WERROR=
-.endif
+NO_WERROR.clang=
LIBSMDIR= ${.OBJDIR}/../../lib/libsm
LIBSM= ${LIBSMDIR}/libsm.a
diff --git a/usr.sbin/sendmail/Makefile b/usr.sbin/sendmail/Makefile
index 1eaebeedfb44..b68ed0fad71d 100644
--- a/usr.sbin/sendmail/Makefile
+++ b/usr.sbin/sendmail/Makefile
@@ -45,12 +45,10 @@ CFLAGS+= -DNETINET6
WARNS?= 1
-.if ${CC:T:Mclang} == "clang"
# Unfortunately, clang gives warnings about sendmail code that cannot
# be turned off yet. Since this is contrib code, and we don't really
# care about the warnings, just make them non-fatal for now.
-NO_WERROR=
-.endif
+NO_WERROR.clang=
DPADD= ${LIBUTIL} ${LIBWRAP}
LDADD= -lutil -lwrap