aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.mk16
-rw-r--r--config/StdGNU.mk8
-rw-r--r--xen/Rules.mk3
-rw-r--r--xen/arch/x86/Rules.mk6
4 files changed, 17 insertions, 16 deletions
diff --git a/Config.mk b/Config.mk
index aee6e5b8ad..9c16c1f2ce 100644
--- a/Config.mk
+++ b/Config.mk
@@ -23,6 +23,15 @@ DESTDIR ?= /
# Allow phony attribute to be listed as dependency rather than fake target
.PHONY: .phony
+# Use Clang/LLVM instead of GCC?
+clang ?= n
+ifeq ($(clang),n)
+gcc := y
+else
+gcc := n
+endif
+
+
include $(XEN_ROOT)/config/$(XEN_OS).mk
include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
@@ -148,12 +157,9 @@ 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
+# and is over-zealous with the printf format lint
+CFLAGS-$(clang) += -Wno-parentheses -Wno-format
$(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 786efd7e20..25aeb4d819 100644
--- a/config/StdGNU.mk
+++ b/config/StdGNU.mk
@@ -76,14 +76,10 @@ CFLAGS += -O2 -fomit-frame-pointer
else
# Less than -O1 produces bad code and large stack frames
CFLAGS += -O1 -fno-omit-frame-pointer
-ifneq ($(clang),y)
-CFLAGS += -fno-optimize-sibling-calls
-endif
+CFLAGS-$(gcc) += -fno-optimize-sibling-calls
endif
ifeq ($(lto),y)
CFLAGS += -flto
-ifeq ($(clang),y)
-LDFLAGS += -plugin LLVMgold.so
-endif
+LDFLAGS-$(clang) += -plugin LLVMgold.so
endif
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 9a9829bcb3..c39706a6c7 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -9,7 +9,6 @@ perfc_arrays ?= n
lock_profile ?= n
crash_debug ?= n
frame_pointer ?= n
-clang ?= n
lto ?= n
XEN_ROOT=$(BASEDIR)/..
@@ -83,6 +82,8 @@ AFLAGS += $(AFLAGS-y) $(filter-out -std=gnu%,$(filter-out -flto,$(CFLAGS)))
# LDFLAGS are only passed directly to $(LD)
LDFLAGS += $(LDFLAGS_DIRECT)
+LDFLAGS += $(LDFLAGS-y)
+
include Makefile
# Ensure each subdirectory has exactly one trailing slash.
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index f951398b60..df7cf34cce 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -14,9 +14,7 @@ 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
+CFLAGS-$(gcc) += -nostdinc
endif
CFLAGS += -fno-builtin -fno-common -Wredundant-decls
@@ -52,7 +50,7 @@ x86_32 := n
x86_64 := y
endif
-ifneq ($(clang),y)
+ifeq ($(gcc),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