]> rtime.felk.cvut.cz Git - l4.git/blob - l4/Makefile
2dcdc8c11c726c5d7616599c21904f351e082369
[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 := help 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 nconfig 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 define checkx86amd64build
310         $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
311           echo "This mode can only be used with architectures x86 and amd64."; \
312           exit 1;                                                              \
313         fi
314 endef
315 define genimage
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)"
322 endef
323
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)
325
326 -include $(L4DIR)/conf/Makeconf.boot
327 -include $(OBJ_BASE)/conf/Makeconf.boot
328
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
333
334 image:
335         $(genimage)
336
337 elfimage:
338         $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=)
339
340 uimage:
341         $(call genimage,BOOTSTRAP_DO_UIMAGE=y BOOTSTRAP_DO_RAW_IMAGE=)
342
343 rawimage:
344         $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=y)
345
346 ifneq ($(filter $(ARCH),x86 amd64),)
347 qemu:
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)
353 else
354 qemu: elfimage
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)
359 endif
360
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'.";   \
365           exit 1;                                                              \
366         fi
367         $(VERBOSE)VBoxSDL                              \
368             --startvm $(VBOX_VM)                       \
369             --cdrom $(OBJ_BASE)/images/.current.iso    \
370             --boot d                                   \
371             $(VBOX_OPTIONS)
372
373 kexec:
374         $(VERBOSE)$(entryselection);                                  \
375          L4DIR=$(L4DIR)                                               \
376           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
377           $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
378
379 ux:
380         $(VERBOSE)if [ "$(ARCH)" != "x86" ]; then                   \
381           echo "This mode can only be used with architecture x86."; \
382           exit 1;                                                   \
383         fi
384         $(VERBOSE)$(entryselection);                                 \
385         L4DIR=$(L4DIR)                                               \
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)
392
393 define geniso
394         $(checkx86amd64build)
395         $(VERBOSE)$(entryselection);                                   \
396          $(MKDIR) $(OBJ_BASE)/images;                                  \
397          ISONAME=$(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso; \
398          L4DIR=$(L4DIR)                                                \
399           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
400           $(L4DIR)/tool/bin/gengrub$(1)iso --timeout=0 $$ml            \
401              $$ISONAME "$$e";                       \
402          $(LN) -f $$ISONAME $(OBJ_BASE)/images/.current.iso || true
403 endef
404
405 grub1iso:
406         $(call geniso,1)
407
408 grub2iso:
409         $(call geniso,2)
410
411 help::
412         @echo
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."
426
427
428 .PHONY: image elfimage rawimage uimage qemu vbox ux switch_ram_base grub1iso grub2iso
429
430 switch_ram_base:
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
436
437 checkbuild:
438         @if [ -z "$(CHECK_BASE_DIR)" ]; then                                  \
439           echo "Need to set CHECK_BASE_DIR variable";                         \
440           exit 1;                                                             \
441         fi
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);                               \
444           rm -rf $$p;                                                         \
445           mkdir -p $$p;                                                       \
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;)                            \
451         done
452
453 report:
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)
458         @echo
459         @echo "make -v:"
460         @make -v || true
461         @echo
462         @echo "CC: $(CC) -v:"
463         @$(CC) -v || true
464         @echo
465         @echo "CXX: $(CXX) -v:"
466         @$(CXX) -v || true
467         @echo
468         @echo "HOST_CC: $(HOST_CC) -v:"
469         @$(HOST_CC) -v || true
470         @echo
471         @echo "HOST_CXX: $(HOST_CXX) -v:"
472         @$(HOST_CXX) -v || true
473         @echo
474         @echo -n "ld: $(LD) -v: "
475         @$(LD) -v || true
476         @echo
477         @echo -n "perl -v:"
478         @perl -v || true
479         @echo
480         @echo -n "python -V: "
481         @python -V || true
482         @echo
483         @echo "svn --version: "
484         @svn --version || true
485         @echo
486         @echo "Shell is:"
487         @ls -la /bin/sh || true
488         @echo
489         @echo "uname -a: "; uname -a
490         @echo
491         @echo "Distribution"
492         @if [ -e "/etc/debian_version" ]; then                 \
493           if grep -qi ubuntu /etc/issue; then                  \
494             echo -n "Ubuntu: ";                                \
495             cat /etc/issue;                                    \
496           else                                                 \
497             echo -n "Debian: ";                                \
498           fi;                                                  \
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                    \
504           echo -n "SuSE: ";                                    \
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;                           \
522         else                                                   \
523           echo "Unknown distribution";                         \
524         fi
525         @lsb_release -a || true
526         @echo
527         @echo "Running as PID"
528         @id -u || true
529         @echo
530         @echo "Archive information:"
531         @svn info || true
532         @echo
533         @echo "CC       = $(CC)"
534         @echo "CXX      = $(CXX)"
535         @echo "HOST_CC  = $(HOST_CC)"
536         @echo "HOST_CXX = $(HOST_CXX)"
537         @echo "LD       = $(LD)"
538         @echo "Paths"
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)"
544         @echo
545         @for i in pkg \
546                   ../kernel/fiasco/src/kern/ia32 \
547                   ../tools/preprocess/src/preprocess; do \
548           if [ -e $$i ]; then \
549             echo Path $$i found ; \
550           else                \
551             echo PATH $$i IS NOT AVAILABLE; \
552           fi \
553         done
554         @echo
555         @echo Configuration:
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_______________________________:";\
563             echo "$$i:";                                       \
564             cat $$i;                                           \
565             echo "____________________________end___________"; \
566           else                                                 \
567             echo "$$i not found";                              \
568           fi                                                   \
569         done
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)
574
575 help::
576         @echo
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."