Clang's 3.5 integrated assembler now handles these files correctly (it

has support for the .codeXX directives). However, it is desirable, for
a time, to allow kernels to be built with clang 3.4. Historically, it
has been advantageous to allow stable X-1 to build kernels the old
way (so long as the impact of doing so is small), and this restores
that ability.

Also, centralize the addition of ${ASM_CFLAGS.${.IMPSRC}}, place it in
kern.mk rather than kern.pre.mk so that all modules can benefit, and
give the same treatment to CFLAGS in kern.mk as well.
This commit is contained in:
Warner Losh 2015-01-05 12:28:22 +00:00
parent fe94dc19e8
commit 9aca3e0f2b
6 changed files with 20 additions and 13 deletions

View File

@ -37,6 +37,9 @@ INCLUDES+= -I$S/contrib/libfdt
CFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
.endif
ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS34}
ASM_CFLAGS.mpboot.S= ${CLANG_NO_IAS34}
%BEFORE_DEPEND
%OBJS

View File

@ -32,6 +32,9 @@ S= ../../..
INCLUDES+= -I$S/contrib/libfdt
ASM_CFLAGS.acpi_wakecode.S= ${CLANG_NO_IAS34}
ASM_CFLAGS.mpboot.s= ${CLANG_NO_IAS34}
%BEFORE_DEPEND
%OBJS

View File

@ -30,6 +30,8 @@ S= ../../..
.endif
.include "$S/conf/kern.pre.mk"
ASM_CFLAGS.mpboot.s= ${CLANG_NO_IAS34}
%BEFORE_DEPEND
%OBJS

View File

@ -29,9 +29,16 @@ NO_WSOMETIMES_UNINITIALIZED= -Wno-error-sometimes-uninitialized
CWARNEXTRA?= -Wno-error-tautological-compare -Wno-error-empty-body \
-Wno-error-parentheses-equality -Wno-error-unused-function \
-Wno-error-pointer-sign -Wno-error-format -Wno-error-parentheses
CLANG_NO_IAS= -no-integrated-as
.if ${COMPILER_VERSION} < 30500
# XXX: clang < 3.5 integrated-as doesn't grok .codeNN directives
CLANG_NO_IAS34= -no-integrated-as
.endif
.endif
.if ${COMPILER_TYPE} == "gcc"
GCC_MS_EXTENSIONS= -fms-extensions
.if ${COMPILER_VERSION} >= 40300
# Catch-all for all the things that are in our tree, but for which we're
# not yet ready for this compiler. Note: we likely only really "support"
@ -168,9 +175,8 @@ CFLAGS+= -fstack-protector
CFLAGS+= -gdwarf-2
.endif
CFLAGS+= ${CWARNEXTRA}
CFLAGS+= ${CFLAGS.${COMPILER_TYPE}}
CFLAGS+= ${CWARNEXTRA} ${CWARNFLAGS} ${CWARNFLAGS.${.IMPSRC:T}}
CFLAGS+= ${CFLAGS.${COMPILER_TYPE}} ${CFLAGS.${.IMPSRC}}
# Tell bmake not to mistake standard targets for things to be searched for
# or expect to ever be up-to-date.
@ -199,6 +205,3 @@ CFLAGS+= -std=iso9899:1999
.else # CSTD
CFLAGS+= -std=${CSTD}
.endif # CSTD
# Pull in any CWARNFLAGS the modules have added.
CFLAGS+= ${CWARNFLAGS} ${CWARNFLAGS.${.IMPSRC:T}}

View File

@ -103,13 +103,7 @@ CFLAGS.gcc+=${CFLAGS_ARCH_PARAMS}
WERROR?= -Werror
# XXX LOCORE means "don't declare C stuff" not "for locore.s".
ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS}
.if ${COMPILER_TYPE} == "clang"
CLANG_NO_IAS= -no-integrated-as
.else
GCC_MS_EXTENSIONS= -fms-extensions
.endif
ASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} ${ASM_CFLAGS.${.IMPSRC}}
.if defined(PROFLEVEL) && ${PROFLEVEL} >= 1
CFLAGS+= -DGPROF

View File

@ -8,3 +8,5 @@ SRCS= smapi.c smapi_bios.S \
bus_if.h device_if.h
.include <bsd.kmod.mk>
CFLAGS.smapi_bios.S= ${CLANG_NO_IAS34}