GREP := GREP_OPTIONS= grep
AWKP ?= gawk --posix
CFLAGS :=
-CXXFLAGS :=
+CXXFLAGS := -std=c++0x
OPT_CFLAGS := -O2
OPT_CXXFLAGS := -O2
NOOPT_CFLAGS := -Os
# objdir/Makeconf.local.
MODULES_FILE = $(srcdir)/Modules.$(CONFIG_XARCH)
-PREPROCESS = \
- $(word 1, $(wildcard $(shell cd $(srcdir)/../../../tools/preprocess/src 2>/dev/null; \
- pwd)/preprocess \
- $(shell cd $(srcdir)/../../tools/preprocess/src 2>/dev/null; \
- pwd)/preprocess \
- $(DROPS_STDDIR)/tool/bin/preprocess) preprocess)
+PREPROCESS = $(srcdir)/../tool/preprocess/src/preprocess
ifeq ($(CONFIG_INLINE),y)
PREPROCESS_FLAGS = -i -t
CCXX_SUFFIX := -$(CCXX_VERSION)
endif
+CPP := $(SYSTEM_TARGET)cpp$(CCXX_SUFFIX)
+
CC := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CC)$(CCXX_SUFFIX)
CXX := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CXX)$(CCXX_SUFFIX)
+CC_TYPE := $(if $(findstring clang,$(shell $(CXX) --version)),clang,gcc)
CCVER_MAJOR := $(shell $(CXX) -dumpversion | cut -d . -f 1)
CCVER_MINOR := $(shell $(CXX) -dumpversion | cut -d . -f 2)
LIBGCC := $(shell $(CXX) -print-libgcc-file-name)
+
L4ALL_INCDIR ?= $(addprefix -I, $(PRIVATE_INCDIR))
L4STD_INCDIR ?= -nostdinc
L4STD_INCDIR_LAST ?= -I$(wildcard $(dir $(LIBGCC))/include \
$(dir $(LIBGCC))/../include)
KERNEL_LDFLAGS += -gc-sections
-SHARED_FLAGS += -fno-defer-pop -freg-struct-return -g -Wall -W
+SHARED_FLAGS-gcc += -fno-defer-pop -freg-struct-return
+SHARED_FLAGS += -g -Wall -W
SHARED_FLAGS += -Wno-parentheses
SHARED_FLAGS += $(call CHECKCC,-Wformat=2,)
SHARED_FLAGS += $(call CHECKCC,-fno-stack-protector,)
-SHARED_FLAGS += $(call CHECKCC,-Wframe-larger-than=512)
SHARED_FLAGS += $(call CHECKCC,-fdiagnostics-show-option)
-OPT_CXXFLAGS += $(call CHECKCXX,-fweb,)
-OPT_CFLAGS += $(call CHECKCC,-fweb,)
-OPT_SHARED_FLAGS += $(call CHECKCC,-frename-registers,)
-OPT_SHARED_FLAGS += $(call CHECKCC,-fgcse-after-reload,)
-CXXFLAGS += -fno-implement-inlines
+
+OPT_CXXFLAGS-gcc += $(call CHECKCXX,-fweb,)
+OPT_CFLAGS-gcc += $(call CHECKCC,-fweb,)
+OPT_SHARED_FLAGS-gcc += $(call CHECKCC,-frename-registers,)
+OPT_SHARED_FLAGS-gcc += $(call CHECKCC,-fgcse-after-reload,)
+CXXFLAGS-gcc += -fno-implement-inlines
-include $(objbase)/.Host-config
# Configuration dependent compile flags
-ifneq ($(CONFIG_PROFILE),y)
- SHARED_FLAGS += -ffunction-sections
-endif
-ifeq ($(CONFIG_NDEBUG),y)
- SHARED_FLAGS += -DNDEBUG
-endif
-ifeq ($(CONFIG_NO_FRAME_PTR),y)
- SHARED_FLAGS += -fomit-frame-pointer
-endif
-ifeq ($(CONFIG_GSTABS),y)
- SHARED_FLAGS += -gstabs+
-endif
-ifeq ($(CONFIG_PROFILE),y)
- PROF_FLAGS += -pg
-endif
-ifeq ($(CONFIG_UNREACHABLE_CODE),y)
- SHARED_FLAGS += $(call CHECKCC,-Wunreachable-code,)
-endif
+SHARED_FLAGS-$(CONFIG_NDEBUG) += -DNDEBUG
+SHARED_FLAGS-$(CONFIG_NO_FRAME_PTR) += -fomit-frame-pointer
+SHARED_FLAGS-$(CONFIG_GSTABS) += -gstabs+
+SHARED_FLAGS-$(CONFIG_UNREACHABLE_CODE) += $(call CHECKCC,-Wunreachable-code,)
# Eagerly compute SHARED_FLAGS to avoid calling CHECKCC over and over again.
-SHARED_FLAGS := $(SHARED_FLAGS) $(SHARED_FLAGS-y)
+SHARED_FLAGS := $(SHARED_FLAGS) $(SHARED_FLAGS-y)
+SHARED_FLAGS += $(SHARED_FLAGS-$(CC_TYPE))
+OPT_SHARED_FLAGS += $(OPT_SHARED_FLAGS-$(CC_TYPE))
+NOOPT_SHARED_FLAGS += $(NOOPT_SHARED_FLAGS-$(CC_TYPE))
# Standard compile flags
ASFLAGS += $(SHARED_FLAGS) -DASSEMBLER
+ASFLAGS-clang += -no-integrated-as
CFLAGS += $(SHARED_FLAGS)
CXXFLAGS += $(SHARED_FLAGS) -fno-rtti -fno-exceptions
OPT_CFLAGS += $(OPT_SHARED_FLAGS)
CXXFLAGS += $(call CHECKCXX,-fno-threadsafe-statics,)
CXXFLAGS += $(call CHECKCXX,-Wno-non-virtual-dtor,)
-ifneq ($(CONFIG_VERBOSE),y)
-VERBOSE = @
-PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $*"
-endif
+ASFLAGS += $(ASFLAGS-$(CC_TYPE))
+CXXFLAGS += $(CXXFLAGS-$(CC_TYPE))
+OPT_CFLAGS += $(OPT_CFLAGS-$(CC_TYPE))
+OPT_CXXFLAGS += $(OPT_CXXFLAGS-$(CC_TYPE))
+NOOPT_CFLAGS += $(NOOPT_CFLAGS-$(CC_TYPE))
+NOOPT_CXXFLAGS += $(NOOPT_CXXFLAGS-$(CC_TYPE))
+
# Output formatting, set V=1 to see command line, V=0 to prevent printing them
-VERBOSE ?=
+VERBOSE ?= @
ifeq ($(V),1)
VERBOSE :=
-endif
-ifeq ($(V),0)
- VERBOSE := @
+ PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $(filter %.cpp,$^)"
endif
AR_MESSAGE ?= @$(ECHO) " ==> Archiving into $@"
COMP_MESSAGE ?= @$(ECHO) " ... Making $@"
LINK_MESSAGE ?= @$(ECHO) " ==> Linking $@"
DEP_MESSAGE ?= @$(ECHO) " ... Building dependencies for $<"
-PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $(filter %.cpp,$^)"
+PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $*"
CHKSUM_MESSAGE ?= @$(ECHO) " ... Generating checksum for "
PATCH_MESSAGE ?= @$(ECHO) " ... Writing checksum into "
STRIP_MESSAGE ?= @$(ECHO) " ... Stripping $@"
DEPS = /dev/null
endif
-ifeq ("$(CONFIG_ALLOW_RO_TEXT)","y")
- PREPROCESS_PARTS += rotext
+# To enable all warning ...
+ENABLE_ALL_WARNINGS ?= n
+
+ifeq ($(CC_TYPE),gcc)
+ ifeq ($(ENABLE_ALL_WARNINGS),y)
+ tmp := $(call CHECKCC,-Wframe-larger-than=512)
+ CFLAGS += $(tmp)
+ CXXFLAGS += $(tmp)
+ tmp :=
+ else
+ F_UNINITIALIZED := $(firstword $(call CHECKCC,-Wmaybe-uninitialized) \
+ $(call CHECKCC,-Wuninitialized))
+ F_SET_NOT_USED := $(call CHECKCC,-Wunused-but-set-variable)
+
+ F_UNINITIALIZED := $(patsubst -W%,-Wno-%,$(F_UNINITIALIZED))
+ F_SET_NOT_USED := $(patsubst -W%,-Wno-%,$(F_SET_NOT_USED))
+
+ CFLAGS += $(F_UNINITIALIZED) $(F_SET_NOT_USED)
+ CXXFLAGS += $(F_UNINITIALIZED) $(F_SET_NOT_USED)
+ endif
endif
+
+