2 # GLOBAL Makefile for the whole L4 tree
8 install-dirs = tool pkg
9 clean-dirs = tool pkg doc
10 cleanall-dirs = tool pkg doc
12 BUILD_TOOLS = gawk gcc g++ ld perl pkg-config
14 CMDS_WITHOUT_OBJDIR := help checkbuild up update check_build_tools
16 # our default target is all::
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
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
44 ifneq ($(filter $(CMDS_WITHOUT_OBJDIR),$(MAKECMDGOALS)),)
45 IGNORE_MAKECONF_INCLUDE=1
48 ifneq ($(B)$(BUILDDIR_TO_CREATE),)
49 IGNORE_MAKECONF_INCLUDE=1
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)
59 # $(L4DIR)/mk/Makeconf shouln't include Makeconf.local twice
60 MAKECONFLOCAL = /dev/null
61 include $(L4DIR)/mk/Makeconf
64 # after having absfilename, we can export BID_ROOT_CONF
65 ifneq ($(filter config oldconfig gconfig nconfig xconfig, $(MAKECMDGOALS)),)
66 export BID_ROOT_CONF=$(call absfilename,$(OBJ_BASE))/.config.all
73 ifneq ($(strip $(B)),)
74 BUILDDIR_TO_CREATE := $(B)
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."; \
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
95 # some more dependencies
96 tool: $(DROPSCONF_CONFIG_MK)
97 pkg: $(DROPSCONF_CONFIG_MK) tool
99 ifneq ($(CONFIG_BID_BUILD_DOC),)
106 $(VERBOSE)svn up mk tool/gendep tool/kconfig tool/elf-patcher doc/source conf $(wildcard tool/bin)
107 $(VERBOSE)$(MAKE) -C pkg up
109 tool ../kernel/fiasco pkg: ../dice
110 $(VERBOSE)if [ -r $@/Makefile ]; then PWD=$(PWD)/$@ $(MAKE) -C $@; fi
113 $(VERBOSE)if [ -r $@/Makefile.drops ]; then \
114 $(MAKE) -C $@ -f Makefile.drops; \
118 $(VERBOSE)for d in tool doc ; do \
119 test ! -r $$d/Makefile || PWD=$(PWD)/$$d $(MAKE) -C $$d $@ ; done
122 $(VERBOSE)test ! -r pkg/Makefile || PWD=$(PWD)/pkg $(MAKE) -C pkg doc
125 $(VERBOSE)$(MAKE) -C pkg cont
127 .PHONY: all clean cleanall install hello pkgdoc up update
128 .PHONY: $(BUILD_DIRS) doc check_build_tools cont cleanfast
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
139 $(VERBOSE)$(RM) -r $(OBJ_BASE)/{bin,include,pkg,doc,ext-pkg,pc,lib,l4defs.mk.inc,l4defs.sh.inc,images}
142 L4DEF_FILE_MK ?= $(OBJ_BASE)/l4defs.mk.inc
143 L4DEF_FILE_SH ?= $(OBJ_BASE)/l4defs.sh.inc
145 l4defs: $(L4DEF_FILE_MK) $(L4DEF_FILE_SH)
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) && \
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)
164 $(L4DEF_FILE_SH): $(L4DEF_FILE_MK)
167 $(call generate_l4defs_files,prog)
168 $(call generate_l4defs_files,lib)
170 .PHONY: l4defs regen_l4defs
172 #####################
173 # config-rules follow
175 HOST_SYSTEM := $(shell uname | tr 'A-Z' 'a-z')
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
192 $(VERBOSE)if [ ! -e $(GCCDIR)/include/stddef.h ]; then \
194 $(ECHO) "$(GCCDIR) seems wrong (stddef.h not found)."; \
195 $(ECHO) "Does it exist?"; \
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 \
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); \
232 mv $(CONFIG_MK_REAL).tmp2 $(CONFIG_MK_REAL); \
234 $(VERBOSE)$(RM) $(CONFIG_MK_REAL).tmp $(CONFIG_MK_REAL).tmp2
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};
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)
254 $(VERBOSE)emulations=$$(LANG= $(LD) --help | \
255 grep -i "supported emulations:" | \
256 sed -e 's/.*supported emulations: //') ; \
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); \
267 if [ "$$found_it" != "1" ]; then \
268 echo "No known ld emulation found"; exit 1; \
272 $(VERBOSE)if [ ! -r tool/gendep/Makefile ]; then \
273 echo "=== l4/tool/gendep missing! ==="; \
276 $(VERBOSE)PWD=$(PWD)/tool/gendep $(MAKE) -C tool/gendep
280 for i in $(BUILD_TOOLS); do \
281 if ! command -v $$i >/dev/null 2>&1; then \
282 [ -n "$$mis" ] && mis="$$mis "; \
286 if [ -n "$$mis" ]; then \
287 echo -e "\033[1;31mProgram(s) \"$$mis\" not found, please install!\033[0m"; \
290 echo "All checked ok."; \
293 define entryselection
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; \
306 e=$$(cat $(OBJ_BASE)/.entry-selector.tmp); \
309 define checkx86amd64build
310 $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then \
311 echo "This mode can only be used with architectures x86 and amd64."; \
316 $(VERBOSE)$(entryselection); \
317 PWD=$(PWD)/pkg/bootstrap/server/src \
318 $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e" \
319 BOOTSTRAP_MODULES_LIST=$$ml $(1) \
320 BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
321 BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
324 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)
326 -include $(L4DIR)/conf/Makeconf.boot
327 -include $(OBJ_BASE)/conf/Makeconf.boot
329 QEMU_ARCH_MAP_$(ARCH) = qemu-system-$(ARCH)
330 QEMU_ARCH_MAP_x86 = qemu
331 QEMU_ARCH_MAP_amd64 = qemu-system-x86_64
332 QEMU_ARCH_MAP_ppc32 = qemu-system-ppc
338 $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=)
341 $(call genimage,BOOTSTRAP_DO_UIMAGE=y BOOTSTRAP_DO_RAW_IMAGE=)
344 $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=y)
346 ifneq ($(filter $(ARCH),x86 amd64),)
348 $(VERBOSE)$(entryselection); \
349 qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH))); \
350 QEMU=$$qemu L4DIR=$(L4DIR) \
351 SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)" \
352 $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
355 $(VERBOSE)qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH))); \
356 if [ -z "$$qemu" ]; then echo "Set QEMU_PATH!"; exit 1; fi; \
357 echo QEmu-cmd: $$qemu -kernel $(OBJ_BASE)/images/bootstrap.elf $(QEMU_OPTIONS); \
358 $$qemu -kernel $(OBJ_BASE)/images/bootstrap.elf $(QEMU_OPTIONS)
361 vbox: $(if $(VBOX_ISOTARGET),$(VBOX_ISOTARGET),grub2iso)
362 $(checkx86amd64build)
363 $(VERBOSE)if [ -z "$(VBOX_VM)" ]; then \
364 echo "Need to set name of configured VirtualBox VM im 'VBOX_VM'."; \
368 --startvm $(VBOX_VM) \
369 --cdrom $(OBJ_BASE)/images/.current.iso \
374 $(VERBOSE)$(entryselection); \
376 SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)" \
377 $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
380 $(VERBOSE)if [ "$(ARCH)" != "x86" ]; then \
381 echo "This mode can only be used with architecture x86."; \
384 $(VERBOSE)$(entryselection); \
386 $(if $(UX_GFX),UX_GFX=$(UX_GFX)) \
387 $(if $(UX_GFX_CMD),UX_GFX_CMD=$(UX_GFX_CMD)) \
388 $(if $(UX_NET),UX_NET=$(UX_NET)) \
389 $(if $(UX_NET_CMD),UX_NET_CMD=$(UX_NET_CMD)) \
390 SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)" \
391 $(L4DIR)/tool/bin/ux-launch $$ml "$$e" $(UX_OPTIONS)
394 $(checkx86amd64build)
395 $(VERBOSE)$(entryselection); \
396 $(MKDIR) $(OBJ_BASE)/images; \
397 ISONAME=$(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso; \
399 SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)" \
400 $(L4DIR)/tool/bin/gengrub$(1)iso --timeout=0 $$ml \
402 $(LN) -f $$ISONAME $(OBJ_BASE)/images/.current.iso || true
413 @echo "Image generation targets:"
414 @echo " image - Generate images according to config [ELF, raw, uImage]."
415 @echo " elfimage - Generate an ELF image, containing all modules."
416 @echo " rawimage - Generate a raw image (memory dump), containing all modules."
417 @echo " uimage - Generate a uimage for u-boot, containing all modules."
418 @echo " grub1iso - Generate an ISO using GRUB1 in images/<name>.iso [x86, amd64]"
419 @echo " grub2iso - Generate an ISO using GRUB2 in images/<name>.iso [x86, amd64]"
420 @echo " qemu - Use Qemu to run 'name'."
421 @echo " vbox - Use VirtualBox to run 'name'."
422 @echo " ux - Run 'name' under Fiasco/UX. [x86]"
423 @echo " kexec - Issue a kexec call to start the entry."
424 @echo " Add 'E=name' to directly select the entry without using the menu."
425 @echo " Modules are defined in conf/modules.list."
428 .PHONY: image elfimage rawimage uimage qemu vbox ux switch_ram_base grub1iso grub2iso
431 @echo " ... Regenerating RAM_BASE settings"
432 $(VERBOSE)echo "# File semi-automatically generated by 'make switch_ram_base'" > $(OBJ_BASE)/Makeconf.ram_base
433 $(VERBOSE)echo "RAM_BASE := $(RAM_BASE)" >> $(OBJ_BASE)/Makeconf.ram_base
434 PWD=$(PWD)/pkg/sigma0/server/src $(MAKE) -C pkg/sigma0/server/src
435 PWD=$(PWD)/pkg/moe/server/src $(MAKE) -C pkg/moe/server/src
438 @if [ -z "$(CHECK_BASE_DIR)" ]; then \
439 echo "Need to set CHECK_BASE_DIR variable"; \
442 set -e; for i in $(if $(USE_CONFIGS),$(addprefix mk/defconfig/config.,$(USE_CONFIGS)),mk/defconfig/config.*); do \
443 p=$(CHECK_BASE_DIR)/$$(basename $$i); \
446 cp $$i $$p/.kconfig; \
447 $(MAKE) O=$$p oldconfig; \
448 $(MAKE) O=$$p tool; \
449 $(MAKE) O=$$p USE_CCACHE=$(USE_CCACHE) $(CHECK_MAKE_ARGS); \
450 $(if $(CHCEK_REMOVE_OBJDIR),rm -rf $$p;) \
454 @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
455 @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
456 @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
457 @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
462 @echo "CC: $(CC) -v:"
465 @echo "CXX: $(CXX) -v:"
468 @echo "HOST_CC: $(HOST_CC) -v:"
469 @$(HOST_CC) -v || true
471 @echo "HOST_CXX: $(HOST_CXX) -v:"
472 @$(HOST_CXX) -v || true
474 @echo -n "ld: $(LD) -v: "
480 @echo -n "python -V: "
483 @echo "svn --version: "
484 @svn --version || true
487 @ls -la /bin/sh || true
489 @echo "uname -a: "; uname -a
492 @if [ -e "/etc/debian_version" ]; then \
493 if grep -qi ubuntu /etc/issue; then \
494 echo -n "Ubuntu: "; \
497 echo -n "Debian: "; \
499 cat /etc/debian_version; \
500 elif [ -e /etc/gentoo-release ]; then \
501 echo -n "Gentoo: "; \
502 cat /etc/gentoo-release; \
503 elif [ -e /etc/SuSE-release ]; then \
505 cat /etc/SuSE-release; \
506 elif [ -e /etc/fedora-release ]; then \
507 echo -n "Fedora: "; \
508 cat /etc/fedora-release; \
509 elif [ -e /etc/redhat-release ]; then \
510 echo -n "Redhat: "; \
511 cat /etc/redhat-release; \
512 [ -e /etc/redhat_version ] \
513 && echo " Version: `cat /etc/redhat_version`"; \
514 elif [ -e /etc/slackware-release ]; then \
515 echo -n "Slackware: "; \
516 cat /etc/slackware-release; \
517 [ -e /etc/slackware-version ] \
518 && echo " Version: `cat /etc/slackware-version`"; \
519 elif [ -e /etc/mandrake-release ]; then \
520 echo -n "Mandrake: "; \
521 cat /etc/mandrake-release; \
523 echo "Unknown distribution"; \
525 @lsb_release -a || true
527 @echo "Running as PID"
530 @echo "Archive information:"
535 @echo "HOST_CC = $(HOST_CC)"
536 @echo "HOST_CXX = $(HOST_CXX)"
539 @echo "Current: $$(pwd)"
540 @echo "L4DIR: $(L4DIR)"
541 @echo "L4DIR_ABS: $(L4DIR_ABS)"
542 @echo "OBJ_BASE: $(OBJ_BASE)"
543 @echo "OBJ_DIR: $(OBJ_DIR)"
546 ../kernel/fiasco/src/kern/ia32 \
547 ../tools/preprocess/src/preprocess; do \
548 if [ -e $$i ]; then \
549 echo Path $$i found ; \
551 echo PATH $$i IS NOT AVAILABLE; \
556 @for i in $(OBJ_DIR)/.config.all $(OBJ_DIR)/.kconfig \
557 $(OBJ_DIR)/Makeconf.local \
558 $(L4DIR_ABS)/Makeconf.local \
559 $(OBJ_DIR)/conf/Makeconf.boot \
560 $(L4DIR_ABS)/conf/Makeconf.boot; do \
561 if [ -e "$$i" ]; then \
562 echo "______start_______________________________:";\
565 echo "____________________________end___________"; \
567 echo "$$i not found"; \
570 @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
571 @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
572 @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
573 @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
577 @echo "Miscellaneous targets:"
578 @echo " switch_ram_base RAM_BASE=0xaddr"
579 @echo " - Switch physical RAM base of build to 'addr'."
580 @echo " update - Update working copy by using SVN."
581 @echo " cont - Continue building after fixing a build error."
582 @echo " clean - Call 'clean' target recursively."
583 @echo " cleanfast - Delete all directories created during build."
584 @echo " report - Print out host configuration information."
585 @echo " help - Print this help text."