diff options
-rw-r--r-- | Config.mk | 7 | ||||
-rw-r--r-- | config/StdGNU.mk | 10 | ||||
-rw-r--r-- | xen/Makefile | 2 | ||||
-rw-r--r-- | xen/Rules.mk | 3 | ||||
-rw-r--r-- | xen/arch/x86/Rules.mk | 5 |
5 files changed, 25 insertions, 2 deletions
@@ -148,6 +148,13 @@ CFLAGS += -Wall -Wstrict-prototypes # result of any casted expression causes a warning. CFLAGS += -Wno-unused-value +ifeq ($(clang),y) +# Clang complains about macros that expand to 'if ( ( foo == bar ) ) ...' +CFLAGS += -Wno-parentheses +# And is over-zealous with the printf format lint +CFLAGS += -Wno-format +endif + $(call cc-option-add,HOSTCFLAGS,HOSTCC,-Wdeclaration-after-statement) $(call cc-option-add,CFLAGS,CC,-Wdeclaration-after-statement) diff --git a/config/StdGNU.mk b/config/StdGNU.mk index f27bdc59f5..d73e644bbf 100644 --- a/config/StdGNU.mk +++ b/config/StdGNU.mk @@ -1,6 +1,11 @@ AS = $(CROSS_COMPILE)as +ifeq ($(clang),y) +LD = $(CROSS_COMPILE)gold +CC = $(CROSS_COMPILE)clang +else LD = $(CROSS_COMPILE)ld CC = $(CROSS_COMPILE)gcc +endif CPP = $(CC) -E AR = $(CROSS_COMPILE)ar RANLIB = $(CROSS_COMPILE)ranlib @@ -69,5 +74,8 @@ ifneq ($(debug),y) CFLAGS += -O2 -fomit-frame-pointer else # Less than -O1 produces bad code and large stack frames -CFLAGS += -O1 -fno-omit-frame-pointer -fno-optimize-sibling-calls +CFLAGS += -O1 -fno-omit-frame-pointer +ifneq ($(clang),y) +CFLAGS += -fno-optimize-sibling-calls +endif endif diff --git a/xen/Makefile b/xen/Makefile index 8b04f8b107..64f73cb64c 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -88,7 +88,7 @@ include/xen/compile.h: include/xen/compile.h.in .banner -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \ -e 's/@@domain@@/$(XEN_DOMAIN)/g' \ -e 's/@@hostname@@/$(shell hostname)/g' \ - -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) -v 2>&1 | tail -1)!g' \ + -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) -v 2>&1 | grep version | tail -1)!g' \ -e 's/@@version@@/$(XEN_VERSION)/g' \ -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \ -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \ diff --git a/xen/Rules.mk b/xen/Rules.mk index d3348144c0..59d0dc7c31 100644 --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -62,6 +62,9 @@ endif AFLAGS-y += -D__ASSEMBLY__ +# Clang's built-in assembler can't handle .code16/.code32/.code64 yet +AFLAGS-$(clang) += -no-integrated-as + ALL_OBJS := $(ALL_OBJS-y) # Get gcc to generate the dependencies for us. diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk index ec3abdd2be..f951398b60 100644 --- a/xen/arch/x86/Rules.mk +++ b/xen/arch/x86/Rules.mk @@ -12,9 +12,12 @@ xenoprof := y supervisor_mode_kernel ?= n # Solaris grabs stdarg.h and friends from the system include directory. +# Clang likewise. ifneq ($(XEN_OS),SunOS) +ifneq ($(clang),y) CFLAGS += -nostdinc endif +endif CFLAGS += -fno-builtin -fno-common -Wredundant-decls CFLAGS += -iwithprefix include -Werror -Wno-pointer-arith -pipe @@ -49,5 +52,7 @@ x86_32 := n x86_64 := y endif +ifneq ($(clang),y) # Require GCC v3.4+ (to avoid issues with alignment constraints in Xen headers) $(call cc-ver-check,CC,0x030400,"Xen requires at least gcc-3.4") +endif |