2 # Fiasco make configuration file
4 # created 1996/04/20 by hohmuth
7 CHECKCC = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \
8 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
10 CHECKCXX = $(shell if $(CXX) $(1) -S -o /dev/null -xc++ /dev/null \
11 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
13 eval_impl = $(if $($(1)_IMPL),$($(1)_IMPL),$(1))
15 include $(objbase)/globalconfig.out
16 # use patsubst here to prevent confusion of syntax highlighting editors :-)
17 CONFIG_XARCH := $(patsubst "%",%,$(CONFIG_XARCH))
18 CONFIG_ABI := $(patsubst "%",%,$(CONFIG_ABI))
20 SYSTEM := $(shell uname)
21 CC := $(patsubst "%",%,$(CONFIG_CC))
22 CXX := $(patsubst "%",%,$(CONFIG_CXX))
23 HOST_CC := $(patsubst "%",%,$(CONFIG_HOST_CC))
24 HOST_CXX := $(patsubst "%",%,$(CONFIG_HOST_CXX))
28 ECHO_E := bash --norc -c 'echo -e "$$0" "$$@"'
30 GREP := GREP_OPTIONS= grep
33 CXXFLAGS := -std=c++0x
40 L4DIR ?= $(srcdir)/../../../l4
41 tooldir := $(srcdir)/../tool
42 MOVE_IF_CHANGE := $(srcdir)/../tool/move-if-change
43 SHOWDEPS := $(srcdir)/../tool/showdeps
44 PREPROCESSDEPS := $(srcdir)/../tool/parsedeps
45 CIRCULAR := $(srcdir)/../tool/circular
47 ifeq ($(SYSTEM),FreeBSD)
53 # The name of this file can be overridden from the command line or in
54 # objdir/Makeconf.local.
55 MODULES_FILE = $(srcdir)/Modules.$(CONFIG_XARCH)
57 PREPROCESS = $(srcdir)/../tool/preprocess/src/preprocess
59 ifeq ($(CONFIG_INLINE),y)
60 PREPROCESS_FLAGS = -i -t
65 AS = $(SYSTEM_TARGET)as
66 LD = $(SYSTEM_TARGET)ld
67 AR = $(SYSTEM_TARGET)ar
68 NM = $(SYSTEM_TARGET)nm
69 RANLIB = $(SYSTEM_TARGET)ranlib
70 SIZE = $(SYSTEM_TARGET)size
71 STRIP = $(SYSTEM_TARGET)strip
72 OBJCOPY = $(SYSTEM_TARGET)objcopy
73 OBJDUMP = $(SYSTEM_TARGET)objdump
75 # Include architecture-specific rules. These may overwrite anything above
76 include $(srcdir)/Makeconf.$(CONFIG_XARCH)
78 # Include user-specific rules. These may overwrite anything above
79 -include $(srcdir)/Makeconf.local
80 -include $(objbase)/Makeconf.local
82 ifneq ($(CCXX_VERSION),)
83 CCXX_SUFFIX := -$(CCXX_VERSION)
86 CPP := $(SYSTEM_TARGET)cpp$(CCXX_SUFFIX)
88 CC := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CC)$(CCXX_SUFFIX)
89 CXX := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CXX)$(CCXX_SUFFIX)
91 CC_TYPE := $(if $(findstring clang,$(shell $(CXX) --version)),clang,gcc)
92 CCVER_MAJOR := $(shell $(CXX) -dumpversion | cut -d . -f 1)
93 CCVER_MINOR := $(shell $(CXX) -dumpversion | cut -d . -f 2)
94 LIBGCC := $(shell $(CXX) -print-libgcc-file-name)
97 L4ALL_INCDIR ?= $(addprefix -I, $(PRIVATE_INCDIR))
98 L4STD_INCDIR ?= -nostdinc
99 L4STD_INCDIR_LAST ?= -I$(wildcard $(dir $(LIBGCC))/include \
100 $(dir $(LIBGCC))/../include)
101 KERNEL_LDFLAGS += -gc-sections
102 SHARED_FLAGS-gcc += -fno-defer-pop -freg-struct-return
103 # prevent a possible gcc 4.4 flaw from hitting us
104 SHARED_FLAGS-gcc += $(if $(filter 4.4,$(CCVER_MAJOR).$(CCVER_MINOR)),-fno-strict-aliasing)
105 SHARED_FLAGS += -g -Wall -W
106 SHARED_FLAGS += -Wno-parentheses
107 SHARED_FLAGS += $(call CHECKCC,-Wformat=2,)
108 SHARED_FLAGS += $(call CHECKCC,-fno-stack-protector,)
109 SHARED_FLAGS += $(call CHECKCC,-fdiagnostics-show-option)
111 OPT_CXXFLAGS-gcc += $(call CHECKCXX,-fweb,)
112 OPT_CFLAGS-gcc += $(call CHECKCC,-fweb,)
113 OPT_SHARED_FLAGS-gcc += $(call CHECKCC,-frename-registers,)
114 OPT_SHARED_FLAGS-gcc += $(call CHECKCC,-fgcse-after-reload,)
115 CXXFLAGS-gcc += -fno-implement-inlines
117 -include $(objbase)/.Host-config
119 # Configuration dependent compile flags
120 SHARED_FLAGS-$(CONFIG_NDEBUG) += -DNDEBUG
121 SHARED_FLAGS-$(CONFIG_NO_FRAME_PTR) += -fomit-frame-pointer
122 SHARED_FLAGS-$(CONFIG_GSTABS) += -gstabs+
123 SHARED_FLAGS-$(CONFIG_UNREACHABLE_CODE) += $(call CHECKCC,-Wunreachable-code,)
125 # Eagerly compute SHARED_FLAGS to avoid calling CHECKCC over and over again.
126 SHARED_FLAGS := $(SHARED_FLAGS) $(SHARED_FLAGS-y)
127 SHARED_FLAGS += $(SHARED_FLAGS-$(CC_TYPE))
128 OPT_SHARED_FLAGS += $(OPT_SHARED_FLAGS-$(CC_TYPE))
129 NOOPT_SHARED_FLAGS += $(NOOPT_SHARED_FLAGS-$(CC_TYPE))
131 # Standard compile flags
132 ASFLAGS += $(SHARED_FLAGS) -DASSEMBLER
133 ASFLAGS-clang += -no-integrated-as
134 CFLAGS += $(SHARED_FLAGS)
135 CXXFLAGS += $(SHARED_FLAGS) -fno-rtti -fno-exceptions
136 OPT_CFLAGS += $(OPT_SHARED_FLAGS)
137 OPT_CXXFLAGS += $(OPT_SHARED_FLAGS)
138 NOOPT_CFLAGS += $(NOOPT_SHARED_FLAGS)
139 NOOPT_CXXFLAGS += $(NOOPT_SHARED_FLAGS)
140 CPPFLAGS += $(L4STD_INCDIR) $(L4ALL_INCDIR) $(L4STD_INCDIR_LAST)
141 CXXFLAGS += $(call CHECKCXX,-fno-threadsafe-statics,)
142 CXXFLAGS += $(call CHECKCXX,-Wno-non-virtual-dtor,)
144 ASFLAGS += $(ASFLAGS-$(CC_TYPE))
145 CXXFLAGS += $(CXXFLAGS-$(CC_TYPE))
146 OPT_CFLAGS += $(OPT_CFLAGS-$(CC_TYPE))
147 OPT_CXXFLAGS += $(OPT_CXXFLAGS-$(CC_TYPE))
148 NOOPT_CFLAGS += $(NOOPT_CFLAGS-$(CC_TYPE))
149 NOOPT_CXXFLAGS += $(NOOPT_CXXFLAGS-$(CC_TYPE))
152 # Output formatting, set V=1 to see command line, V=0 to prevent printing them
156 PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $(filter %.cpp,$^)"
158 AR_MESSAGE ?= @$(ECHO) " ==> Archiving into $@"
159 COMP_MESSAGE ?= @$(ECHO) " ... Making $@"
160 LINK_MESSAGE ?= @$(ECHO) " ==> Linking $@"
161 DEP_MESSAGE ?= @$(ECHO) " ... Building dependencies for $<"
162 PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $*"
163 CHKSUM_MESSAGE ?= @$(ECHO) " ... Generating checksum for "
164 PATCH_MESSAGE ?= @$(ECHO) " ... Writing checksum into "
165 STRIP_MESSAGE ?= @$(ECHO) " ... Stripping $@"
166 GENVER_MESSAGE ?= @$(ECHO) " ... Generating version information"
167 CLEAN_MESSAGE ?= @$(ECHO) "Removing created files"
168 CLEANALL_MESSAGE?= @$(ECHO) "Removing all created files"
169 INST_MESSAGE ?= @$(ECHO) "Installing $(^F)"
172 COMP_MESSAGE_NOOPT ?= $(COMP_MESSAGE)
178 SRC_ALL = $(SRC_S) $(SRC_CPP) $(SRC_C) $(SRC_CC)
179 ifeq ($(filter clean cleanall mrproper,$(MAKECMDGOALS)),)
180 DEPS = $(foreach file,$(SRC_ALL), $(dir $(file)).$(notdir $(file)).d)
185 # To enable all warning ...
186 ENABLE_ALL_WARNINGS ?= n
188 ifeq ($(CC_TYPE),gcc)
189 ifeq ($(ENABLE_ALL_WARNINGS),y)
190 tmp := $(call CHECKCC,-Wframe-larger-than=512)
195 F_UNINITIALIZED := $(firstword $(call CHECKCC,-Wmaybe-uninitialized) \
196 $(call CHECKCC,-Wuninitialized))
197 F_SET_NOT_USED := $(call CHECKCC,-Wunused-but-set-variable)
199 F_UNINITIALIZED := $(patsubst -W%,-Wno-%,$(F_UNINITIALIZED))
200 F_SET_NOT_USED := $(patsubst -W%,-Wno-%,$(F_SET_NOT_USED))
202 CFLAGS += $(F_UNINITIALIZED) $(F_SET_NOT_USED)
203 CXXFLAGS += $(F_UNINITIALIZED) $(F_SET_NOT_USED)