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
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)
58 $(word 1, $(wildcard $(shell cd $(srcdir)/../../../tools/preprocess/src 2>/dev/null; \
60 $(shell cd $(srcdir)/../../tools/preprocess/src 2>/dev/null; \
62 $(DROPS_STDDIR)/tool/bin/preprocess) preprocess)
64 ifeq ($(CONFIG_INLINE),y)
65 PREPROCESS_FLAGS = -i -t
70 AS = $(SYSTEM_TARGET)as
71 LD = $(SYSTEM_TARGET)ld
72 AR = $(SYSTEM_TARGET)ar
73 NM = $(SYSTEM_TARGET)nm
74 RANLIB = $(SYSTEM_TARGET)ranlib
75 SIZE = $(SYSTEM_TARGET)size
76 STRIP = $(SYSTEM_TARGET)strip
77 OBJCOPY = $(SYSTEM_TARGET)objcopy
78 OBJDUMP = $(SYSTEM_TARGET)objdump
80 # Include architecture-specific rules. These may overwrite anything above
81 include $(srcdir)/Makeconf.$(CONFIG_XARCH)
83 # Include user-specific rules. These may overwrite anything above
84 -include $(srcdir)/Makeconf.local
85 -include $(objbase)/Makeconf.local
87 ifneq ($(CCXX_VERSION),)
88 CCXX_SUFFIX := -$(CCXX_VERSION)
91 CC := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CC)$(CCXX_SUFFIX)
92 CXX := $(CCXX_WRAP) $(SYSTEM_TARGET)$(CXX)$(CCXX_SUFFIX)
94 CCVER_MAJOR := $(shell $(CXX) -dumpversion | cut -d . -f 1)
95 CCVER_MINOR := $(shell $(CXX) -dumpversion | cut -d . -f 2)
96 LIBGCC := $(shell $(CXX) -print-libgcc-file-name)
98 L4ALL_INCDIR ?= $(addprefix -I, $(PRIVATE_INCDIR))
99 L4STD_INCDIR ?= -nostdinc
100 L4STD_INCDIR_LAST ?= -I$(wildcard $(dir $(LIBGCC))/include \
101 $(dir $(LIBGCC))/../include)
102 KERNEL_LDFLAGS += -gc-sections
103 SHARED_FLAGS += -fno-defer-pop -freg-struct-return -g -Wall -W
104 SHARED_FLAGS += -Wno-parentheses
105 SHARED_FLAGS += $(call CHECKCC,-Wformat=2,)
106 SHARED_FLAGS += $(call CHECKCC,-fno-stack-protector,)
107 SHARED_FLAGS += $(call CHECKCC,-Wframe-larger-than=512)
108 SHARED_FLAGS += $(call CHECKCC,-fdiagnostics-show-option)
109 OPT_CXXFLAGS += $(call CHECKCXX,-fweb,)
110 OPT_CFLAGS += $(call CHECKCC,-fweb,)
111 OPT_SHARED_FLAGS += $(call CHECKCC,-frename-registers,)
112 OPT_SHARED_FLAGS += $(call CHECKCC,-fgcse-after-reload,)
113 CXXFLAGS += -fno-implement-inlines
115 LD_EMULATION := $(if $(LD_EMULATION-SYSTEM-$(SYSTEM)),\
116 $(LD_EMULATION-SYSTEM-$(SYSTEM)),\
117 $(LD_EMULATION-SYSTEM-default))
119 # Configuration dependent compile flags
120 ifneq ($(CONFIG_PROFILE),y)
121 SHARED_FLAGS += -ffunction-sections
123 ifeq ($(CONFIG_NDEBUG),y)
124 SHARED_FLAGS += -DNDEBUG
126 ifeq ($(CONFIG_NO_FRAME_PTR),y)
127 SHARED_FLAGS += -fomit-frame-pointer
129 ifeq ($(CONFIG_GSTABS),y)
130 SHARED_FLAGS += -gstabs+
132 ifeq ($(CONFIG_PROFILE),y)
135 ifeq ($(CONFIG_UNREACHABLE_CODE),y)
136 SHARED_FLAGS += $(call CHECKCC,-Wunreachable-code,)
139 # Eagerly compute SHARED_FLAGS to avoid calling CHECKCC over and over again.
140 SHARED_FLAGS := $(SHARED_FLAGS) $(SHARED_FLAGS-y)
142 # Standard compile flags
143 ASFLAGS += $(SHARED_FLAGS) -DASSEMBLER
144 CFLAGS += $(SHARED_FLAGS)
145 CXXFLAGS += $(SHARED_FLAGS) -fno-rtti -fno-exceptions
146 OPT_CFLAGS += $(OPT_SHARED_FLAGS)
147 OPT_CXXFLAGS += $(OPT_SHARED_FLAGS)
148 NOOPT_CFLAGS += $(NOOPT_SHARED_FLAGS)
149 NOOPT_CXXFLAGS += $(NOOPT_SHARED_FLAGS)
150 CPPFLAGS += $(L4STD_INCDIR) $(L4ALL_INCDIR) $(L4STD_INCDIR_LAST)
151 CXXFLAGS += $(call CHECKCXX,-fno-threadsafe-statics,)
152 CXXFLAGS += $(call CHECKCXX,-Wno-non-virtual-dtor,)
154 ifneq ($(CONFIG_VERBOSE),y)
156 PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $*"
159 # Output formatting, set V=1 to see command line, V=0 to prevent printing them
167 AR_MESSAGE ?= @$(ECHO) " ==> Archiving into $@"
168 COMP_MESSAGE ?= @$(ECHO) " ... Making $@"
169 LINK_MESSAGE ?= @$(ECHO) " ==> Linking $@"
170 DEP_MESSAGE ?= @$(ECHO) " ... Building dependencies for $<"
171 PREP_MESSAGE ?= @$(ECHO) " ... Preprocessing $(filter %.cpp,$^)"
172 CHKSUM_MESSAGE ?= @$(ECHO) " ... Generating checksum for "
173 PATCH_MESSAGE ?= @$(ECHO) " ... Writing checksum into "
174 STRIP_MESSAGE ?= @$(ECHO) " ... Stripping $@"
175 GENVER_MESSAGE ?= @$(ECHO) " ... Generating version information"
176 CLEAN_MESSAGE ?= @$(ECHO) "Removing created files"
177 CLEANALL_MESSAGE?= @$(ECHO) "Removing all created files"
178 INST_MESSAGE ?= @$(ECHO) "Installing $(^F)"
181 COMP_MESSAGE_NOOPT ?= $(COMP_MESSAGE)
187 SRC_ALL = $(SRC_S) $(SRC_CPP) $(SRC_C) $(SRC_CC)
188 ifeq ($(filter clean cleanall mrproper,$(MAKECMDGOALS)),)
189 DEPS = $(foreach file,$(SRC_ALL), $(dir $(file)).$(notdir $(file)).d)
194 ifeq ("$(CONFIG_ALLOW_RO_TEXT)","y")
195 PREPROCESS_PARTS += rotext