]> rtime.felk.cvut.cz Git - l4.git/blob - l4/Makefile
update
[l4.git] / l4 / Makefile
1 #
2 # GLOBAL Makefile for the whole L4 tree
3 #
4
5 L4DIR           ?= .
6
7 BUILD_DIRS    = tool pkg
8 install-dirs  = tool pkg
9 clean-dirs    = tool pkg doc
10 cleanall-dirs = tool pkg doc
11
12 BUILD_TOOLS     = gawk gcc g++ ld perl pkg-config
13
14 CMDS_WITHOUT_OBJDIR := checkbuild up update check_build_tools
15
16 # our default target is all::
17 all::
18
19 #####################
20 # config-tool
21
22 DROPSCONF               = y
23 DROPSCONF_DEFCONFIG     ?= $(L4DIR)/mk/defconfig/config.x86
24 #DROPSCONF_CONFIG_IN    = $(L4DIR)/mk/config.in
25 DROPSCONF_CONFIG        = $(OBJ_BASE)/.kconfig.auto
26 DROPSCONF_CONFIG_H      = $(OBJ_BASE)/include/l4/bid_config.h
27 DROPSCONF_CONFIG_MK     = $(OBJ_BASE)/.config.all
28 DROPSCONF_DONTINC_MK    = y
29 DROPSCONF_HELPFILE      = $(L4DIR)/mk/config.help
30
31 # separation in "dependent" (ie opts the build output depends on) and
32 # "independent" (ie opts the build output does not depend on) opts
33 CONFIG_MK_INDEPOPTS     = CONFIG_BID_GENERATE_MAPFILE \
34                           CONFIG_DEPEND_VERBOSE \
35                           CONFIG_VERBOSE_SWITCH \
36                           CONFIG_BID_COLORED_PHASES CONFIG_HAVE_LDSO \
37                           CONFIG_INT_CPP_NAME_SWITCH BID_LIBGENDEP_PATHS CONFIG_INT_CPP_.*_NAME \
38                           CONFIG_INT_CXX_.*_NAME CONFIG_VERBOSE CONFIG_BID_STRIP_PROGS \
39                           CONFIG_INT_LD_NAME_SWITCH CONFIG_INT_LD_.*_NAME
40 CONFIG_MK_REAL          = $(OBJ_BASE)/.config
41 CONFIG_MK_INDEP         = $(OBJ_BASE)/.config.indep
42
43
44 ifneq ($(filter $(CMDS_WITHOUT_OBJDIR),$(MAKECMDGOALS)),)
45 IGNORE_MAKECONF_INCLUDE=1
46 endif
47
48 ifneq ($(B)$(BUILDDIR_TO_CREATE),)
49 IGNORE_MAKECONF_INCLUDE=1
50 endif
51
52 ifeq ($(IGNORE_MAKECONF_INCLUDE),)
53 ifneq ($(filter help config oldconfig,$(MAKECMDGOALS)),)
54 # tweek $(L4DIR)/mk/Makeconf to use the intermediate file
55 export BID_IGN_ROOT_CONF=y
56 BID_ROOT_CONF=$(DROPSCONF_CONFIG_MK)
57 endif
58
59 # $(L4DIR)/mk/Makeconf shouln't include Makeconf.local twice
60 MAKECONFLOCAL           = /dev/null
61 include $(L4DIR)/mk/Makeconf
62 export DROPS_STDDIR
63
64 # after having absfilename, we can export BID_ROOT_CONF
65 ifneq ($(filter config oldconfig gconfig qconfig xconfig, $(MAKECMDGOALS)),)
66 export BID_ROOT_CONF=$(call absfilename,$(OBJ_BASE))/.config.all
67 endif
68 endif
69
70 #####################
71 # rules follow
72
73 ifneq ($(strip $(B)),)
74 BUILDDIR_TO_CREATE := $(B)
75 endif
76 ifneq ($(strip $(BUILDDIR_TO_CREATE)),)
77 all:: check_build_tools
78         @echo "Creating build directory \"$(BUILDDIR_TO_CREATE)\"..."
79         @if [ -e "$(BUILDDIR_TO_CREATE)" ]; then        \
80                 echo "Already exists, aborting.";       \
81                 exit 1;                                 \
82         fi
83         @mkdir -p "$(BUILDDIR_TO_CREATE)"
84         @cp $(DROPSCONF_DEFCONFIG) $(BUILDDIR_TO_CREATE)/.kconfig
85         @$(MAKE) B= BUILDDIR_TO_CREATE= O=$(BUILDDIR_TO_CREATE) oldconfig
86         @echo "done."
87 else
88
89 all:: l4defs
90
91 endif
92
93
94
95 # some more dependencies
96 tool: $(DROPSCONF_CONFIG_MK)
97 pkg:  $(DROPSCONF_CONFIG_MK) tool
98
99 ifneq ($(CONFIG_BID_BUILD_DOC),)
100 install-dirs += doc
101 all:: doc
102 endif
103
104 up update:
105         $(VERBOSE)svn up -N
106         $(VERBOSE)svn up mk tool/gendep tool/kconfig tool/elf-patcher doc/source conf $(wildcard tool/bin)
107         $(VERBOSE)$(MAKE) -C pkg up
108
109 tool ../kernel/fiasco pkg: ../dice
110         $(VERBOSE)if [ -r $@/Makefile ]; then PWD=$(PWD)/$@ $(MAKE) -C $@; fi
111
112 ../dice:
113         $(VERBOSE)if [ -r $@/Makefile.drops ]; then                \
114            $(MAKE) -C $@ -f Makefile.drops;                        \
115         fi
116
117 doc:
118         $(VERBOSE)for d in tool doc ; do \
119                 test ! -r $$d/Makefile || PWD=$(PWD)/$$d $(MAKE) -C $$d $@ ; done
120
121 pkgdoc:
122         $(VERBOSE)test ! -r pkg/Makefile || PWD=$(PWD)/pkg $(MAKE) -C pkg doc
123
124 cont:
125         $(VERBOSE)$(MAKE) -C pkg cont
126
127 .PHONY: all clean cleanall install hello pkgdoc up update
128 .PHONY: $(BUILD_DIRS) doc check_build_tools cont cleanfast
129
130 cleanall::
131         $(VERBOSE)rm -f *~
132
133 clean cleanall install::
134         $(VERBOSE)set -e; for i in $($@-dirs) ; do \
135           if [ -r $$i/Makefile -o -r $$i/GNUmakefile ] ; then \
136                 PWD=$(PWD)/$$i $(MAKE) -C $$i $@ ; fi ; done
137
138 cleanfast:
139         $(VERBOSE)$(RM) -r $(OBJ_BASE)/{bin,include,pkg,doc,ext-pkg,pc,lib,l4defs.mk.inc,l4defs.sh.inc,images}
140
141
142 L4DEF_FILE_MK ?= $(OBJ_BASE)/l4defs.mk.inc
143 L4DEF_FILE_SH ?= $(OBJ_BASE)/l4defs.sh.inc
144
145 l4defs: $(L4DEF_FILE_MK) $(L4DEF_FILE_SH)
146
147 generate_l4defs_files = \
148         $(VERBOSE)tmpdir=$(OBJ_BASE)/l4defs.gen.dir &&                 \
149         mkdir -p $$tmpdir &&                                           \
150         echo "L4DIR = $(L4DIR_ABS)"                      > $$tmpdir/Makefile && \
151         echo "OBJ_BASE = $(OBJ_BASE)"                   >> $$tmpdir/Makefile && \
152         echo "L4_BUILDDIR = $(OBJ_BASE)"                >> $$tmpdir/Makefile && \
153         echo "SRC_DIR = $$tmpdir"                       >> $$tmpdir/Makefile && \
154         echo "PKGDIR_ABS = $(L4DIR_ABS)/l4defs.gen.dir" >> $$tmpdir/Makefile && \
155         cat $(L4DIR)/mk/export_defs.inc                 >> $$tmpdir/Makefile && \
156         PWD=$$tmpdir $(MAKE) -C $$tmpdir -f $$tmpdir/Makefile          \
157           CALLED_FOR=$(1) L4DEF_FILE_MK=$(L4DEF_FILE_MK) L4DEF_FILE_SH=$(L4DEF_FILE_SH) && \
158         $(RM) -r $$tmpdir
159
160 $(L4DEF_FILE_MK): $(BUILD_DIRS) $(DROPSCONF_CONFIG_MK) $(L4DIR)/mk/export_defs.inc
161         $(call generate_l4defs_files,prog)
162         $(call generate_l4defs_files,lib)
163
164 $(L4DEF_FILE_SH): $(L4DEF_FILE_MK)
165
166 regen_l4defs:
167         $(call generate_l4defs_files,prog)
168         $(call generate_l4defs_files,lib)
169
170 .PHONY: l4defs regen_l4defs
171
172 #####################
173 # config-rules follow
174
175 HOST_SYSTEM := $(shell uname | tr 'A-Z' 'a-z')
176 export HOST_SYSTEM
177
178 # it becomes a bit confusing now: 'make config' results in a config file, which
179 # must be postprocessed. This is done in config.inc. Then,
180 # we evaluate some variables that depend on the postprocessed config file.
181 # The variables are defined in mk/Makeconf, which sources Makeconf.bid.local.
182 # Hence, we have to 1) postprocess, 2) call make again to get the variables.
183 DROPSCONF_CONFIG_MK_POST_HOOK:: check_build_tools $(OBJ_DIR)/Makefile
184         # libgendep must be done before calling make with the local helper
185         $(VERBOSE)$(MAKE) libgendep
186         $(VERBOSE)$(MAKE) Makeconf.bid.local-helper || \
187                 (rm -f $(DROPSCONF_CONFIG_MK) $(CONFIG_MK_REAL) $(CONFIG_MK_INDEP); false)
188         $(VEROBSE)$(LN) -snf $(L4DIR_ABS) $(OBJ_BASE)/source
189         $(VERBOSE)$(MAKE) checkconf
190
191 checkconf:
192         $(VERBOSE)if [ ! -e $(GCCDIR)/include/stddef.h ]; then \
193           $(ECHO); \
194           $(ECHO) "$(GCCDIR) seems wrong (stddef.h not found)."; \
195           $(ECHO) "Does it exist?"; \
196           $(ECHO); \
197           exit 1; \
198         fi
199
200 # caching of some variables. Others are determined directly.
201 # The contents of the variables to cache is already defined in mk/Makeconf.
202 .PHONY: Makeconf.bid.local-helper Makeconf.bid.local-internal-names \
203         libgendep checkconf
204 ARCH = $(BUILD_ARCH)
205 Makeconf.bid.local-helper:
206         $(VERBOSE)echo BUILD_SYSTEMS="$(strip $(ARCH)_$(CPU)            \
207                        $(ARCH)_$(CPU)-$(BUILD_ABI))" >> $(DROPSCONF_CONFIG_MK)
208         $(VERBOSE)$(foreach v, GCCLIBDIR GCCDIR GCCLIB GCCLIB_EH GCCVERSION \
209                         GCCMAJORVERSION GCCMINORVERSION GCCSUBVERSION   \
210                         GCCNOSTACKPROTOPT LDVERSION GCCSYSLIBDIRS,      \
211                         echo $(v)=$(call $(v)_f,$(ARCH))                \
212                         >>$(DROPSCONF_CONFIG_MK);)
213         $(VERBOSE)$(foreach v, LD_GENDEP_PREFIX, echo $v=$($(v)) >>$(DROPSCONF_CONFIG_MK);)
214         $(VERBOSE)echo "HOST_SYSTEM=$(HOST_SYSTEM)" >>$(DROPSCONF_CONFIG_MK)
215         $(VERBOSE)echo "COLOR_TERMINAL=$(shell if [ $$(tput colors || echo -1) = '-1' ]; then echo n; else echo y; fi)" >>$(DROPSCONF_CONFIG_MK)
216         $(VERBOSE)echo "LD_HAS_HASH_STYLE_OPTION=$(shell if $(LD) --help 2>&1 | grep -q ' --hash-style='; then echo y; else echo n; fi)" >>$(DROPSCONF_CONFIG_MK)
217         $(VERBOSE)# we need to call make again, because HOST_SYSTEM (set above) must be
218         $(VERBOSE)# evaluated for LD_PRELOAD to be set, which we need in the following
219         $(VERBOSE)$(MAKE) Makeconf.bid.local-internal-names
220         $(VERBOSE)sort <$(DROPSCONF_CONFIG_MK) >$(CONFIG_MK_REAL).tmp
221         $(VERBOSE)echo -e "# Automatically generated. Don't edit\n" >$(CONFIG_MK_INDEP)
222         $(VERBOSE)grep $(addprefix -e ^,$(CONFIG_MK_INDEPOPTS) ) \
223                 <$(CONFIG_MK_REAL).tmp >>$(CONFIG_MK_INDEP)
224         $(VERBOSE)echo -e "# Automatically generated. Don't edit\n" >$(CONFIG_MK_REAL).tmp2
225         $(VERBOSE)grep -v $(addprefix -e ^,$$ # $(CONFIG_MK_INDEPOPTS) ) \
226                 <$(CONFIG_MK_REAL).tmp >>$(CONFIG_MK_REAL).tmp2
227         $(VERBOSE)echo -e 'include $(call absfilename,$(CONFIG_MK_INDEP))' >>$(CONFIG_MK_REAL).tmp2
228         $(VERBOSE)if [ -e "$(CONFIG_MK_REAL)" ]; then                        \
229                     diff --brief -I ^COLOR_TERMINAL $(CONFIG_MK_REAL) $(CONFIG_MK_REAL).tmp2 || \
230                       mv $(CONFIG_MK_REAL).tmp2 $(CONFIG_MK_REAL);           \
231                   else                                                       \
232                     mv $(CONFIG_MK_REAL).tmp2 $(CONFIG_MK_REAL);             \
233                   fi
234         $(VERBOSE)$(RM) $(CONFIG_MK_REAL).tmp $(CONFIG_MK_REAL).tmp2
235
236 Makeconf.bid.local-internal-names:
237 ifneq ($(CONFIG_INT_CPP_NAME_SWITCH),)
238         $(VERBOSE) set -e; X="tmp.$$$$$$RANDOM.c" ; echo 'int main(void){}'>$$X ; \
239                 rm -f $$X.out ; $(LD_GENDEP_PREFIX) GENDEP_SOURCE=$$X \
240                 GENDEP_OUTPUT=$$X.out $(CC) -c $$X -o $$X.o; \
241                 test -e $$X.out; echo INT_CPP_NAME=`cat $$X.out` \
242                         >>$(DROPSCONF_CONFIG_MK); \
243                 rm -f $$X $$X.{o,out};
244         $(VERBOSE)set -e; X="tmp.$$$$$$RANDOM.cc" ; echo 'int main(void){}'>$$X; \
245                 rm -f $$X.out; $(LD_GENDEP_PREFIX) GENDEP_SOURCE=$$X \
246                 GENDEP_OUTPUT=$$X.out $(CXX) -c $$X -o $$X.o; \
247                 test -e $$X.out; echo INT_CXX_NAME=`cat $$X.out` \
248                         >>$(DROPSCONF_CONFIG_MK); \
249                 rm -f $$X $$X.{o,out};
250 endif
251 ifneq ($(CONFIG_INT_LD_NAME_SWITCH),)
252         $(VERBOSE) set -e; echo INT_LD_NAME=$$($(LD) 2>&1 | perl -p -e 's,^(.+/)?(.+):.+,$$2,') >> $(DROPSCONF_CONFIG_MK)
253 endif
254         $(VERBOSE)emulations=$$(LANG= $(LD) --help |                     \
255                                 grep -i "supported emulations:" |        \
256                                 sed -e 's/.*supported emulations: //') ; \
257         unset found_it;                                                  \
258         for e in $$emulations; do                                        \
259           for c in $(LD_EMULATION_CHOICE_$(ARCH)); do                    \
260             if [ "$$e" = "$$c" ]; then                                   \
261               echo LD_EMULATION=$$e >> $(DROPSCONF_CONFIG_MK);           \
262               found_it=1;                                                \
263               break;                                                     \
264             fi;                                                          \
265           done;                                                          \
266         done;                                                            \
267         if [ "$$found_it" != "1" ]; then                                 \
268           echo "No known ld emulation found"; exit 1;                    \
269         fi
270
271 libgendep:
272         $(VERBOSE)if [ ! -r tool/gendep/Makefile ]; then        \
273                     echo "=== l4/tool/gendep missing! ===";     \
274                     exit 1;                                     \
275                   fi
276         $(VERBOSE)PWD=$(PWD)/tool/gendep $(MAKE) -C tool/gendep
277
278 check_build_tools:
279         @unset mis;                                                \
280         for i in $(BUILD_TOOLS); do                                \
281           if ! command -v $$i >/dev/null 2>&1; then                \
282             [ -n "$$mis" ] && mis="$$mis ";                        \
283             mis="$$mis$$i";                                        \
284           fi                                                       \
285         done;                                                      \
286         if [ -n "$$mis" ]; then                                    \
287           echo -e "\033[1;31mProgram(s) \"$$mis\" not found, please install!\033[0m"; \
288           exit 1;                                                  \
289         else                                                       \
290           echo "All checked ok.";                                  \
291         fi
292
293 define entryselection
294         unset e; unset ml;                                       \
295            ml=$(L4DIR_ABS)/conf/modules.list;                    \
296            [ -n "$(MODULES_LIST)" ] && ml=$(MODULES_LIST);       \
297            [ -n "$(ENTRY)"       ] && e="$(ENTRY)";              \
298            [ -n "$(E)"           ] && e="$(E)";                  \
299            if [ -z "$$e" ]; then                                 \
300              BACKTITLE="No entry given. Use 'make $@ E=entryname' to avoid menu." \
301                L4DIR=$(L4DIR) $(L4DIR)/tool/bin/entry-selector $$ml 2> $(OBJ_BASE)/.entry-selector.tmp; \
302              if [ $$? != 0 ]; then                               \
303                cat $(OBJ_BASE)/.entry-selector.tmp;              \
304                exit 1;                                           \
305              fi;                                                 \
306              e=$$(cat $(OBJ_BASE)/.entry-selector.tmp);          \
307            fi
308 endef
309
310 BUILDDIR_SEARCHPATH = $(OBJ_BASE)/bin/$(ARCH)_$(CPU):$(OBJ_BASE)/bin/$(ARCH)_$(CPU)/$(BUILD_ABI):$(OBJ_BASE)/lib/$(ARCH)_$(CPU):$(OBJ_BASE)/lib/$(ARCH)_$(CPU)/$(BUILD_ABI)
311
312 -include $(L4DIR)/conf/Makeconf.boot
313 -include $(OBJ_BASE)/conf/Makeconf.boot
314
315 image:
316         $(VERBOSE)$(entryselection);                                      \
317         PWD=$(PWD)/pkg/bootstrap/server/src                               \
318             $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e"               \
319                     BOOTSTRAP_MODULES_LIST=$$ml                           \
320                     BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
321                     BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
322
323 qemu:
324         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
325           echo "This mode can only be used with architectures x86 and amd64."; \
326           exit 1;                                                              \
327         fi
328         $(VERBOSE)$(entryselection);                                  \
329            qemu=$(QEMU_PATH);                                         \
330            if [ -z "$$qemu" ]; then                                   \
331              [ "$(ARCH)" = "amd64" ] && qemu=qemu-system-x86_64;      \
332              [ "$(ARCH)" = "x86" ] && qemu=qemu;                      \
333            fi;                                                        \
334          QEMU=$$qemu L4DIR=$(L4DIR)                                   \
335           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
336           $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
337
338 kexec:
339         $(VERBOSE)$(entryselection);                                  \
340          L4DIR=$(L4DIR)                                   \
341           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
342           $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
343
344 ux:
345         $(VERBOSE)if [ "$(ARCH)" != "x86" ]; then                   \
346           echo "This mode can only be used with architecture x86."; \
347           exit 1;                                                   \
348         fi
349         $(VERBOSE)$(entryselection);                                 \
350         L4DIR=$(L4DIR)                                               \
351           $(if $(UX_GFX),UX_GFX=$(UX_GFX))                           \
352           $(if $(UX_GFX_CMD),UX_GFX_CMD=$(UX_GFX_CMD))               \
353           $(if $(UX_NET),UX_NET=$(UX_NET))                           \
354           $(if $(UX_NET_CMD),UX_NET_CMD=$(UX_NET_CMD))               \
355           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"  \
356           $(L4DIR)/tool/bin/ux-launch $$ml "$$e" $(UX_OPTIONS)
357
358 grub1iso:
359         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
360           echo "This mode can only be used with architectures x86 and amd64."; \
361           exit 1;                                                              \
362         fi
363         $(VERBOSE)$(entryselection);                                   \
364          $(MKDIR) $(OBJ_BASE)/images;                                  \
365          L4DIR=$(L4DIR)                                                \
366           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
367           $(L4DIR)/tool/bin/gengrub1iso --timeout=0 $$ml               \
368              $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
369
370 grub2iso:
371         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
372           echo "This mode can only be used with architectures x86 and amd64."; \
373           exit 1;                                                              \
374         fi
375         $(VERBOSE)$(entryselection);                                   \
376          $(MKDIR) $(OBJ_BASE)/images;                                  \
377          L4DIR=$(L4DIR)                                                \
378           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
379           $(L4DIR)/tool/bin/gengrub2iso --timeout=0 $$ml               \
380              $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
381
382 help::
383         @echo
384         @echo "Image generation targets:"
385         @echo "  image            - Generate images containing all modules."
386         @echo "                     Supported formats include ELF, uimage and raw."
387         @echo "  grub1iso         - Generate an ISO using GRUB1 in images/name.iso [x86, amd64]" 
388         @echo "  grub2iso         - Generate an ISO using GRUB2 in images/name.iso [x86, amd64]" 
389         @echo "  qemu             - Use Qemu to run 'name'. [x86, amd64]" 
390         @echo "  ux               - Run 'name' under Fiasco/UX. [x86]" 
391         @echo "  kexec            - Issue a kexec call to start the entry." 
392         @echo " Add 'E=name' to directly select the entry without using the menu."
393         @echo " Modules are defined in conf/modules.list."
394
395
396 .PHONY: image qemu ux switch_ram_base grub1iso grub2iso
397
398 switch_ram_base:
399         @echo "  ... Regenerating RAM_BASE settings"
400         $(VERBOSE)echo "# File semi-automatically generated by 'make switch_ram_base'" > $(OBJ_BASE)/Makeconf.ram_base
401         $(VERBOSE)echo "RAM_BASE := $(RAM_BASE)"                                      >> $(OBJ_BASE)/Makeconf.ram_base
402         PWD=$(PWD)/pkg/sigma0/server/src $(MAKE) -C pkg/sigma0/server/src
403         PWD=$(PWD)/pkg/moe/server/src    $(MAKE) -C pkg/moe/server/src
404
405 checkbuild:
406         @if [ -z "$(CHECK_BASE_DIR)" ]; then                                  \
407           echo "Need to set CHECK_BASE_DIR variable";                         \
408           exit 1;                                                             \
409         fi
410         set -e; for i in $(if $(USE_CONFIGS),$(addprefix mk/defconfig/config.,$(USE_CONFIGS)),mk/defconfig/config.*); do \
411           p=$(CHECK_BASE_DIR)/$$(basename $$i);                               \
412           rm -rf $$p;                                                         \
413           mkdir -p $$p;                                                       \
414           cp $$i $$p/.kconfig;                                                \
415           $(MAKE) O=$$p oldconfig;                                            \
416           $(MAKE) O=$$p tool;                                                 \
417           $(MAKE) O=$$p USE_CCACHE=$(USE_CCACHE) $(CHECK_MAKE_ARGS);          \
418         done
419
420 report:
421         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
422         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
423         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
424         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
425         @echo
426         @echo "make -v:"
427         @make -v || true
428         @echo
429         @echo "CC: $(CC) -v:"
430         @$(CC) -v || true
431         @echo
432         @echo "CXX: $(CXX) -v:"
433         @$(CXX) -v || true
434         @echo
435         @echo "HOST_CC: $(HOST_CC) -v:"
436         @$(HOST_CC) -v || true
437         @echo
438         @echo "HOST_CXX: $(HOST_CXX) -v:"
439         @$(HOST_CXX) -v || true
440         @echo
441         @echo -n "ld: $(LD) -v: "
442         @$(LD) -v || true
443         @echo
444         @echo -n "perl -v:"
445         @perl -v || true
446         @echo
447         @echo -n "python -V: "
448         @python -V || true
449         @echo
450         @echo "svn --version: "
451         @svn --version || true
452         @echo
453         @echo "Shell is:"
454         @ls -la /bin/sh || true
455         @echo
456         @echo "uname -a: "; uname -a
457         @echo
458         @echo "Distribution"
459         @if [ -e "/etc/debian_version" ]; then                 \
460           if grep -qi ubuntu /etc/issue; then                  \
461             echo -n "Ubuntu: ";                                \
462             cat /etc/issue;                                    \
463           else                                                 \
464             echo -n "Debian: ";                                \
465           fi;                                                  \
466           cat /etc/debian_version;                             \
467         elif [ -e /etc/gentoo-release ]; then                  \
468           echo -n "Gentoo: ";                                  \
469           cat /etc/gentoo-release;                             \
470         elif [ -e /etc/SuSE-release ]; then                    \
471           echo -n "SuSE: ";                                    \
472           cat /etc/SuSE-release;                               \
473         elif [ -e /etc/fedora-release ]; then                  \
474           echo -n "Fedora: ";                                  \
475           cat /etc/fedora-release;                             \
476         elif [ -e /etc/redhat-release ]; then                  \
477           echo -n "Redhat: ";                                  \
478           cat /etc/redhat-release;                             \
479           [ -e /etc/redhat_version ]                           \
480             && echo "  Version: `cat /etc/redhat_version`";    \
481         elif [ -e /etc/slackware-release ]; then               \
482           echo -n "Slackware: ";                               \
483           cat /etc/slackware-release;                          \
484           [ -e /etc/slackware-version ]                        \
485             && echo "  Version: `cat /etc/slackware-version`"; \
486         elif [ -e /etc/mandrake-release ]; then                \
487           echo -n "Mandrake: ";                                \
488           cat /etc/mandrake-release;                           \
489         else                                                   \
490           echo "Unknown distribution";                         \
491         fi
492         @lsb_release -a || true
493         @echo
494         @echo "Running as PID"
495         @id -u || true
496         @echo
497         @echo "Archive information:"
498         @svn info || true
499         @echo
500         @echo "CC       = $(CC)"
501         @echo "CXX      = $(CXX)"
502         @echo "HOST_CC  = $(HOST_CC)"
503         @echo "HOST_CXX = $(HOST_CXX)"
504         @echo "LD       = $(LD)"
505         @echo "Paths"
506         @echo "Current:   $$(pwd)"
507         @echo "L4DIR:     $(L4DIR)"
508         @echo "L4DIR_ABS: $(L4DIR_ABS)"
509         @echo "OBJ_BASE:  $(OBJ_BASE)"
510         @echo "OBJ_DIR:   $(OBJ_DIR)"
511         @echo
512         @for i in pkg \
513                   ../kernel/fiasco/src/kern/ia32 \
514                   ../tools/preprocess/src/preprocess; do \
515           if [ -e $$i ]; then \
516             echo Path $$i found ; \
517           else                \
518             echo PATH $$i IS NOT AVAILABLE; \
519           fi \
520         done
521         @echo
522         @echo Configuration:
523         @for i in $(OBJ_DIR)/.config.all $(OBJ_DIR)/.kconfig   \
524                   $(OBJ_DIR)/Makeconf.local                    \
525                   $(L4DIR_ABS)/Makeconf.local                  \
526                   $(OBJ_DIR)/conf/Makeconf.boot                \
527                   $(L4DIR_ABS)/conf/Makeconf.boot; do          \
528           if [ -e "$$i" ]; then                                \
529             echo "______start_______________________________:";\
530             echo "$$i:";                                       \
531             cat $$i;                                           \
532             echo "____________________________end___________"; \
533           else                                                 \
534             echo "$$i not found";                              \
535           fi                                                   \
536         done
537         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
538         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
539         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
540         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
541
542 help::
543         @echo
544         @echo "Miscellaneous targets:"
545         @echo "  switch_ram_base RAM_BASE=0xaddr"
546         @echo "                   - Switch physical RAM base of build to 'addr'." 
547         @echo "  update           - Update working copy by using SVN." 
548         @echo "  cont             - Continue building after fixing a build error." 
549         @echo "  clean            - Call 'clean' target recursively." 
550         @echo "  cleanfast        - Delete all directories created during build." 
551         @echo "  report           - Print out host configuration information." 
552         @echo "  help             - Print this help text."