]> rtime.felk.cvut.cz Git - l4.git/blob - l4/Makefile
aab5e2c8b19f54fedbc806c9d9a96be63d85118a
[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 txtconfig 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 txtconfig 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 doc:  pkgdoc
99
100 ifneq ($(CONFIG_BID_BUILD_DOC),)
101 install-dirs += doc
102 all:: doc
103 endif
104
105 up update:
106         $(VERBOSE)svn up -N
107         $(VERBOSE)svn up mk tool/gendep tool/kconfig tool/elf-patcher doc/source conf $(wildcard tool/bin)
108         $(VERBOSE)$(MAKE) -C pkg up
109
110 tool ../kernel/fiasco pkg: ../dice
111         $(VERBOSE)if [ -r $@/Makefile ]; then PWD=$(PWD)/$@ $(MAKE) -C $@; fi
112
113 ../dice:
114         $(VERBOSE)if [ -r $@/Makefile.drops ]; then                \
115            $(MAKE) -C $@ -f Makefile.drops;                        \
116         fi
117
118 doc:
119         $(VERBOSE)for d in tool doc ; do \
120                 test ! -r $$d/Makefile || PWD=$(PWD)/$$d $(MAKE) -C $$d $@ ; done
121
122 pkgdoc:
123         $(VERBOSE)test ! -r pkg/Makefile || PWD=$(PWD)/pkg $(MAKE) -C pkg doc
124
125 cont:
126         $(VERBOSE)$(MAKE) -C pkg cont
127
128 .PHONY: all clean cleanall install hello pkgdoc up update
129 .PHONY: $(BUILD_DIRS) doc/html check_build_tools cont cleanfast
130
131 cleanall::
132         $(VERBOSE)rm -f *~
133
134 clean cleanall install::
135         $(VERBOSE)set -e; for i in $($@-dirs) ; do \
136           if [ -r $$i/Makefile -o -r $$i/GNUmakefile ] ; then \
137                 PWD=$(PWD)/$$i $(MAKE) -C $$i $@ ; fi ; done
138
139 cleanfast:
140         $(VERBOSE)$(RM) -r $(OBJ_BASE)/{bin,include,pkg,doc,ext-pkg,pc,lib,l4defs.mk.inc,l4defs.sh.inc,images}
141
142
143 L4DEF_FILE_MK ?= $(OBJ_BASE)/l4defs.mk.inc
144 L4DEF_FILE_SH ?= $(OBJ_BASE)/l4defs.sh.inc
145
146 l4defs: $(L4DEF_FILE_MK) $(L4DEF_FILE_SH)
147
148 generate_l4defs_files = \
149         $(VERBOSE)tmpdir=$(OBJ_BASE)/l4defs.gen.dir &&                 \
150         mkdir -p $$tmpdir &&                                           \
151         echo "L4DIR = $(L4DIR_ABS)"                      > $$tmpdir/Makefile && \
152         echo "OBJ_BASE = $(OBJ_BASE)"                   >> $$tmpdir/Makefile && \
153         echo "L4_BUILDDIR = $(OBJ_BASE)"                >> $$tmpdir/Makefile && \
154         echo "SRC_DIR = $$tmpdir"                       >> $$tmpdir/Makefile && \
155         echo "PKGDIR_ABS = $(L4DIR_ABS)/l4defs.gen.dir" >> $$tmpdir/Makefile && \
156         cat $(L4DIR)/mk/export_defs.inc                 >> $$tmpdir/Makefile && \
157         PWD=$$tmpdir $(MAKE) -C $$tmpdir -f $$tmpdir/Makefile          \
158           CALLED_FOR=$(1) L4DEF_FILE_MK=$(L4DEF_FILE_MK) L4DEF_FILE_SH=$(L4DEF_FILE_SH) && \
159         $(RM) -r $$tmpdir
160
161 $(L4DEF_FILE_MK): $(BUILD_DIRS) $(DROPSCONF_CONFIG_MK) $(L4DIR)/mk/export_defs.inc
162         $(call generate_l4defs_files,prog)
163         $(call generate_l4defs_files,lib)
164
165 $(L4DEF_FILE_SH): $(L4DEF_FILE_MK)
166
167 regen_l4defs:
168         $(call generate_l4defs_files,prog)
169         $(call generate_l4defs_files,lib)
170
171 .PHONY: l4defs regen_l4defs
172
173 #####################
174 # config-rules follow
175
176 HOST_SYSTEM := $(shell uname | tr 'A-Z' 'a-z')
177 export HOST_SYSTEM
178
179 # it becomes a bit confusing now: 'make config' results in a config file, which
180 # must be postprocessed. This is done in config.inc. Then,
181 # we evaluate some variables that depend on the postprocessed config file.
182 # The variables are defined in mk/Makeconf, which sources Makeconf.bid.local.
183 # Hence, we have to 1) postprocess, 2) call make again to get the variables.
184 DROPSCONF_CONFIG_MK_POST_HOOK:: check_build_tools $(OBJ_DIR)/Makefile
185         # libgendep must be done before calling make with the local helper
186         $(VERBOSE)$(MAKE) libgendep
187         $(VERBOSE)$(MAKE) Makeconf.bid.local-helper || \
188                 (rm -f $(DROPSCONF_CONFIG_MK) $(CONFIG_MK_REAL) $(CONFIG_MK_INDEP); false)
189         $(VEROBSE)$(LN) -snf $(L4DIR_ABS) $(OBJ_BASE)/source
190         $(VERBOSE)$(MAKE) checkconf
191
192 checkconf:
193         $(VERBOSE)if [ ! -e $(GCCDIR)/include/stddef.h ]; then \
194           $(ECHO); \
195           $(ECHO) "$(GCCDIR) seems wrong (stddef.h not found)."; \
196           $(ECHO) "Does it exist?"; \
197           $(ECHO); \
198           exit 1; \
199         fi
200
201 # caching of some variables. Others are determined directly.
202 # The contents of the variables to cache is already defined in mk/Makeconf.
203 .PHONY: Makeconf.bid.local-helper Makeconf.bid.local-internal-names \
204         libgendep checkconf
205 ARCH = $(BUILD_ARCH)
206 Makeconf.bid.local-helper:
207         $(VERBOSE)echo BUILD_SYSTEMS="$(strip $(ARCH)_$(CPU)            \
208                        $(ARCH)_$(CPU)-$(BUILD_ABI))" >> $(DROPSCONF_CONFIG_MK)
209         $(VERBOSE)$(foreach v, GCCLIBDIR GCCDIR GCCLIB GCCLIB_EH GCCVERSION \
210                         GCCMAJORVERSION GCCMINORVERSION GCCSUBVERSION   \
211                         GCCNOSTACKPROTOPT LDVERSION GCCSYSLIBDIRS,      \
212                         echo $(v)=$(call $(v)_f,$(ARCH))                \
213                         >>$(DROPSCONF_CONFIG_MK);)
214         $(VERBOSE)$(foreach v, LD_GENDEP_PREFIX, echo $v=$($(v)) >>$(DROPSCONF_CONFIG_MK);)
215         $(VERBOSE)echo "HOST_SYSTEM=$(HOST_SYSTEM)" >>$(DROPSCONF_CONFIG_MK)
216         $(VERBOSE)echo "COLOR_TERMINAL=$(shell if [ $$(tput colors || echo -1) = '-1' ]; then echo n; else echo y; fi)" >>$(DROPSCONF_CONFIG_MK)
217         $(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)
218         $(VERBOSE)# we need to call make again, because HOST_SYSTEM (set above) must be
219         $(VERBOSE)# evaluated for LD_PRELOAD to be set, which we need in the following
220         $(VERBOSE)$(MAKE) Makeconf.bid.local-internal-names
221         $(VERBOSE)sort <$(DROPSCONF_CONFIG_MK) >$(CONFIG_MK_REAL).tmp
222         $(VERBOSE)echo -e "# Automatically generated. Don't edit\n" >$(CONFIG_MK_INDEP)
223         $(VERBOSE)grep $(addprefix -e ^,$(CONFIG_MK_INDEPOPTS) ) \
224                 <$(CONFIG_MK_REAL).tmp >>$(CONFIG_MK_INDEP)
225         $(VERBOSE)echo -e "# Automatically generated. Don't edit\n" >$(CONFIG_MK_REAL).tmp2
226         $(VERBOSE)grep -v $(addprefix -e ^,$$ # $(CONFIG_MK_INDEPOPTS) ) \
227                 <$(CONFIG_MK_REAL).tmp >>$(CONFIG_MK_REAL).tmp2
228         $(VERBOSE)echo -e 'include $(call absfilename,$(CONFIG_MK_INDEP))' >>$(CONFIG_MK_REAL).tmp2
229         $(VERBOSE)if [ -e "$(CONFIG_MK_REAL)" ]; then                        \
230                     diff --brief $(CONFIG_MK_REAL) $(CONFIG_MK_REAL).tmp2 || \
231                       mv $(CONFIG_MK_REAL).tmp2 $(CONFIG_MK_REAL);           \
232                   else                                                       \
233                     mv $(CONFIG_MK_REAL).tmp2 $(CONFIG_MK_REAL);             \
234                   fi
235         $(VERBOSE)$(RM) $(CONFIG_MK_REAL).tmp $(CONFIG_MK_REAL).tmp2
236
237 Makeconf.bid.local-internal-names:
238 ifneq ($(CONFIG_INT_CPP_NAME_SWITCH),)
239         $(VERBOSE) set -e; X="tmp.$$$$$$RANDOM.c" ; echo 'int main(void){}'>$$X ; \
240                 rm -f $$X.out ; $(LD_GENDEP_PREFIX) GENDEP_SOURCE=$$X \
241                 GENDEP_OUTPUT=$$X.out $(CC) -c $$X -o $$X.o; \
242                 test -e $$X.out; echo INT_CPP_NAME=`cat $$X.out` \
243                         >>$(DROPSCONF_CONFIG_MK); \
244                 rm -f $$X $$X.{o,out};
245         $(VERBOSE)set -e; X="tmp.$$$$$$RANDOM.cc" ; echo 'int main(void){}'>$$X; \
246                 rm -f $$X.out; $(LD_GENDEP_PREFIX) GENDEP_SOURCE=$$X \
247                 GENDEP_OUTPUT=$$X.out $(CXX) -c $$X -o $$X.o; \
248                 test -e $$X.out; echo INT_CXX_NAME=`cat $$X.out` \
249                         >>$(DROPSCONF_CONFIG_MK); \
250                 rm -f $$X $$X.{o,out};
251 endif
252 ifneq ($(CONFIG_INT_LD_NAME_SWITCH),)
253         $(VERBOSE) set -e; echo INT_LD_NAME=$$($(LD) 2>&1 | perl -p -e 's,^(.+/)?(.+):.+,$$2,') >> $(DROPSCONF_CONFIG_MK)
254 endif
255         $(VERBOSE)emulations=$$(LANG= $(LD) --help |                     \
256                                 grep -i "supported emulations:" |        \
257                                 sed -e 's/.*supported emulations: //') ; \
258         unset found_it;                                                  \
259         for e in $$emulations; do                                        \
260           for c in $(LD_EMULATION_CHOICE_$(ARCH)); do                    \
261             if [ "$$e" = "$$c" ]; then                                   \
262               echo LD_EMULATION=$$e >> $(DROPSCONF_CONFIG_MK);           \
263               found_it=1;                                                \
264               break;                                                     \
265             fi;                                                          \
266           done;                                                          \
267         done;                                                            \
268         if [ "$$found_it" != "1" ]; then                                 \
269           echo "No known ld emulation found"; exit 1;                    \
270         fi
271
272 libgendep:
273         $(VERBOSE)if [ ! -r tool/gendep/Makefile ]; then        \
274                     echo "=== l4/tool/gendep missing! ===";     \
275                     exit 1;                                     \
276                   fi
277         $(VERBOSE)PWD=$(PWD)/tool/gendep $(MAKE) -C tool/gendep
278
279 check_build_tools:
280         @unset mis;                                                \
281         for i in $(BUILD_TOOLS); do                                \
282           if ! command -v $$i >/dev/null 2>&1; then                \
283             [ -n "$$mis" ] && mis="$$mis ";                        \
284             mis="$$mis$$i";                                        \
285           fi                                                       \
286         done;                                                      \
287         if [ -n "$$mis" ]; then                                    \
288           echo -e "\033[1;31mProgram(s) \"$$mis\" not found, please install!\033[0m"; \
289           exit 1;                                                  \
290         else                                                       \
291           echo "All checked ok.";                                  \
292         fi
293
294 define entryselection
295         unset e; unset ml;                                       \
296            ml=$(L4DIR_ABS)/conf/modules.list;                    \
297            [ -n "$(MODULES_LIST)" ] && ml=$(MODULES_LIST);       \
298            [ -n "$(ENTRY)"       ] && e="$(ENTRY)";              \
299            [ -n "$(E)"           ] && e="$(E)";                  \
300            if [ -z "$$e" ]; then                                 \
301              BACKTITLE="No entry given. Use 'make $@ E=entryname' to avoid menu." \
302                L4DIR=$(L4DIR) $(L4DIR)/tool/bin/entry-selector $$ml 2> $(OBJ_BASE)/.entry-selector.tmp; \
303              if [ $$? != 0 ]; then                               \
304                cat $(OBJ_BASE)/.entry-selector.tmp;              \
305                exit 1;                                           \
306              fi;                                                 \
307              e=$$(cat $(OBJ_BASE)/.entry-selector.tmp);          \
308            fi
309 endef
310
311 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)
312
313 -include $(L4DIR)/conf/Makeconf.boot
314 -include $(OBJ_BASE)/conf/Makeconf.boot
315
316 image:
317         $(VERBOSE)$(entryselection);                                      \
318         PWD=$(PWD)/pkg/bootstrap/server/src                               \
319             $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e"               \
320                     BOOTSTRAP_MODULES_LIST=$$ml                           \
321                     BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
322                     BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
323
324 qemu:
325         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
326           echo "This mode can only be used with architectures x86 and amd64."; \
327           exit 1;                                                              \
328         fi
329         $(VERBOSE)$(entryselection);                                  \
330            qemu=$(QEMU_PATH);                                         \
331            if [ -z "$$qemu" ]; then                                   \
332              [ "$(ARCH)" = "amd64" ] && qemu=qemu-system-x86_64;      \
333              [ "$(ARCH)" = "x86" ] && qemu=qemu;                      \
334            fi;                                                        \
335          QEMU=$$qemu L4DIR=$(L4DIR)                                   \
336           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
337           $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
338
339 kexec:
340         $(VERBOSE)$(entryselection);                                  \
341          L4DIR=$(L4DIR)                                   \
342           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
343           $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
344
345 ux:
346         $(VERBOSE)if [ "$(ARCH)" != "x86" ]; then                   \
347           echo "This mode can only be used with architecture x86."; \
348           exit 1;                                                   \
349         fi
350         $(VERBOSE)$(entryselection);                                 \
351         L4DIR=$(L4DIR)                                               \
352           $(if $(UX_GFX),UX_GFX=$(UX_GFX))                           \
353           $(if $(UX_GFX_CMD),UX_GFX_CMD=$(UX_GFX_CMD))               \
354           $(if $(UX_NET),UX_NET=$(UX_NET))                           \
355           $(if $(UX_NET_CMD),UX_NET_CMD=$(UX_NET_CMD))               \
356           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"  \
357           $(L4DIR)/tool/bin/ux-launch $$ml "$$e" $(UX_OPTIONS)
358
359 grub1iso:
360         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
361           echo "This mode can only be used with architectures x86 and amd64."; \
362           exit 1;                                                              \
363         fi
364         $(VERBOSE)$(entryselection);                                   \
365          $(MKDIR) $(OBJ_BASE)/images;                                  \
366          L4DIR=$(L4DIR)                                                \
367           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
368           $(L4DIR)/tool/bin/gengrub1iso --timeout=0 $$ml               \
369              $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
370
371 grub2iso:
372         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
373           echo "This mode can only be used with architectures x86 and amd64."; \
374           exit 1;                                                              \
375         fi
376         $(VERBOSE)$(entryselection);                                   \
377          $(MKDIR) $(OBJ_BASE)/images;                                  \
378          L4DIR=$(L4DIR)                                                \
379           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
380           $(L4DIR)/tool/bin/gengrub2iso --timeout=0 $$ml               \
381              $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
382
383 .PHONY: image qemu ux switch_ram_base grub1iso grub2iso
384
385 switch_ram_base:
386         @echo "  ... Regenerating RAM_BASE settings"
387         $(VERBOSE)echo "# File semi-automatically generated by 'make switch_ram_base'" > $(OBJ_BASE)/Makeconf.ram_base
388         $(VERBOSE)echo "RAM_BASE := $(RAM_BASE)"                                      >> $(OBJ_BASE)/Makeconf.ram_base
389         PWD=$(PWD)/pkg/sigma0/server/src $(MAKE) -C pkg/sigma0/server/src
390         PWD=$(PWD)/pkg/moe/server/src    $(MAKE) -C pkg/moe/server/src
391
392 checkbuild:
393         @if [ -z "$(CHECK_BASE_DIR)" ]; then                                  \
394           echo "Need to set CHECK_BASE_DIR variable";                         \
395           exit 1;                                                             \
396         fi
397         set -e; for i in $(if $(USE_CONFIGS),$(addprefix mk/defconfig/config.,$(USE_CONFIGS)),mk/defconfig/config.*); do \
398           p=$(CHECK_BASE_DIR)/$$(basename $$i);                               \
399           rm -rf $$p;                                                         \
400           mkdir -p $$p;                                                       \
401           cp $$i $$p/.kconfig;                                                \
402           $(MAKE) O=$$p oldconfig;                                            \
403           $(MAKE) O=$$p tool;                                                 \
404           $(MAKE) O=$$p USE_CCACHE=$(USE_CCACHE) $(CHECK_MAKE_ARGS);          \
405         done
406
407 report:
408         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
409         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
410         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
411         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
412         @echo
413         @echo "make -v:"
414         @make -v || true
415         @echo
416         @echo "CC: $(CC) -v:"
417         @$(CC) -v || true
418         @echo
419         @echo "CXX: $(CXX) -v:"
420         @$(CXX) -v || true
421         @echo
422         @echo "HOST_CC: $(HOST_CC) -v:"
423         @$(HOST_CC) -v || true
424         @echo
425         @echo "HOST_CXX: $(HOST_CXX) -v:"
426         @$(HOST_CXX) -v || true
427         @echo
428         @echo -n "ld: $(LD) -v: "
429         @$(LD) -v || true
430         @echo
431         @echo -n "perl -v:"
432         @perl -v || true
433         @echo
434         @echo -n "python -V: "
435         @python -V || true
436         @echo
437         @echo "svn --version: "
438         @svn --version || true
439         @echo
440         @echo "Shell is:"
441         @ls -la /bin/sh || true
442         @echo
443         @echo "uname -a: "; uname -a
444         @echo
445         @echo "Distribution"
446         @if [ -e "/etc/debian_version" ]; then                 \
447           if grep -qi ubuntu /etc/issue; then                  \
448             echo -n "Ubuntu: ";                                \
449             cat /etc/issue;                                    \
450           else                                                 \
451             echo -n "Debian: ";                                \
452           fi;                                                  \
453           cat /etc/debian_version;                             \
454         elif [ -e /etc/gentoo-release ]; then                  \
455           echo -n "Gentoo: ";                                  \
456           cat /etc/gentoo-release;                             \
457         elif [ -e /etc/SuSE-release ]; then                    \
458           echo -n "SuSE: ";                                    \
459           cat /etc/SuSE-release;                               \
460         elif [ -e /etc/fedora-release ]; then                  \
461           echo -n "Fedora: ";                                  \
462           cat /etc/fedora-release;                             \
463         elif [ -e /etc/redhat-release ]; then                  \
464           echo -n "Redhat: ";                                  \
465           cat /etc/redhat-release;                             \
466           [ -e /etc/redhat_version ]                           \
467             && echo "  Version: `cat /etc/redhat_version`";    \
468         elif [ -e /etc/slackware-release ]; then               \
469           echo -n "Slackware: ";                               \
470           cat /etc/slackware-release;                          \
471           [ -e /etc/slackware-version ]                        \
472             && echo "  Version: `cat /etc/slackware-version`"; \
473         elif [ -e /etc/mandrake-release ]; then                \
474           echo -n "Mandrake: ";                                \
475           cat /etc/mandrake-release;                           \
476         else                                                   \
477           echo "Unknown distribution";                         \
478         fi
479         @lsb_release -a || true
480         @echo
481         @echo "Running as PID"
482         @id -u || true
483         @echo
484         @echo "Archive information:"
485         @svn info || true
486         @echo
487         @echo "CC       = $(CC)"
488         @echo "CXX      = $(CXX)"
489         @echo "HOST_CC  = $(HOST_CC)"
490         @echo "HOST_CXX = $(HOST_CXX)"
491         @echo "LD       = $(LD)"
492         @echo "Paths"
493         @echo "Current:   $$(pwd)"
494         @echo "L4DIR:     $(L4DIR)"
495         @echo "L4DIR_ABS: $(L4DIR_ABS)"
496         @echo "OBJ_BASE:  $(OBJ_BASE)"
497         @echo "OBJ_DIR:   $(OBJ_DIR)"
498         @echo
499         @for i in pkg \
500                   ../kernel/fiasco/src/kern/ia32 \
501                   ../tools/preprocess/src/preprocess; do \
502           if [ -e $$i ]; then \
503             echo Path $$i found ; \
504           else                \
505             echo PATH $$i IS NOT AVAILABLE; \
506           fi \
507         done
508         @echo
509         @echo Configuration:
510         @for i in $(OBJ_DIR)/.config.all $(OBJ_DIR)/.kconfig   \
511                   $(OBJ_DIR)/Makeconf.local                    \
512                   $(L4DIR_ABS)/Makeconf.local                  \
513                   $(OBJ_DIR)/conf/Makeconf.boot                \
514                   $(L4DIR_ABS)/conf/Makeconf.boot; do          \
515           if [ -e "$$i" ]; then                                \
516             echo "______start_______________________________:";\
517             echo "$$i:";                                       \
518             cat $$i;                                           \
519             echo "____________________________end___________"; \
520           else                                                 \
521             echo "$$i not found";                              \
522           fi                                                   \
523         done
524         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
525         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
526         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
527         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)