]> 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 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
316 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)
317
318 -include $(L4DIR)/conf/Makeconf.boot
319 -include $(OBJ_BASE)/conf/Makeconf.boot
320
321 QEMU_ARCH_MAP_$(ARCH) = qemu-system-$(ARCH)
322 QEMU_ARCH_MAP_x86     = qemu
323 QEMU_ARCH_MAP_amd64   = qemu-system-x86_64
324 QEMU_ARCH_MAP_ppc32   = qemu-system-ppc
325
326 image:
327         $(VERBOSE)$(entryselection);                                      \
328         PWD=$(PWD)/pkg/bootstrap/server/src                               \
329             $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e"               \
330                     BOOTSTRAP_MODULES_LIST=$$ml                           \
331                     BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
332                     BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
333
334 ifneq ($(filter $(ARCH),x86 amd64),)
335 qemu:
336         $(VERBOSE)$(entryselection);                                      \
337          qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH)));   \
338          QEMU=$$qemu L4DIR=$(L4DIR)                                       \
339           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"       \
340           $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
341 else
342 qemu: image
343         $(VERBOSE)qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH))); \
344         if [ -z "$$qemu" ]; then echo "Set QEMU_PATH!"; exit 1; fi;              \
345         $$qemu -kernel $(OBJ_BASE)/images/bootstrap.elf $(QEMU_OPTIONS)
346 endif
347
348 vbox: $(if $(VBOX_ISOTARGET),$(VBOX_ISOTARGET),grub2iso)
349         $(checkx86amd64build)
350         $(VERBOSE)if [ -z "$(VBOX_VM)" ]; then                                 \
351           echo "Need to set name of configured VirtualBox VM im 'VBOX_VM'.";   \
352           exit 1;                                                              \
353         fi
354         $(VERBOSE)VBoxSDL                                  \
355             --startvm $(VBOX_VM)                           \
356             --cdrom $(OBJ_BASE)/images/.current.iso         \
357             --boot d                                       \
358             $(VBOX_OPTIONS)
359
360 kexec:
361         $(VERBOSE)$(entryselection);                                  \
362          L4DIR=$(L4DIR)                                               \
363           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
364           $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
365
366 ux:
367         $(VERBOSE)if [ "$(ARCH)" != "x86" ]; then                   \
368           echo "This mode can only be used with architecture x86."; \
369           exit 1;                                                   \
370         fi
371         $(VERBOSE)$(entryselection);                                 \
372         L4DIR=$(L4DIR)                                               \
373           $(if $(UX_GFX),UX_GFX=$(UX_GFX))                           \
374           $(if $(UX_GFX_CMD),UX_GFX_CMD=$(UX_GFX_CMD))               \
375           $(if $(UX_NET),UX_NET=$(UX_NET))                           \
376           $(if $(UX_NET_CMD),UX_NET_CMD=$(UX_NET_CMD))               \
377           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"  \
378           $(L4DIR)/tool/bin/ux-launch $$ml "$$e" $(UX_OPTIONS)
379
380 define geniso
381         $(checkx86amd64build)
382         $(VERBOSE)$(entryselection);                                   \
383          $(MKDIR) $(OBJ_BASE)/images;                                  \
384          ISONAME=$(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso; \
385          L4DIR=$(L4DIR)                                                \
386           SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
387           $(L4DIR)/tool/bin/gengrub$(1)iso --timeout=0 $$ml            \
388              $$ISONAME "$$e";                       \
389          $(LN) -f $$ISONAME $(OBJ_BASE)/images/.current.iso || true
390 endef
391
392 grub1iso:
393         $(call geniso,1)
394
395 grub2iso:
396         $(call geniso,2)
397
398 help::
399         @echo
400         @echo "Image generation targets:"
401         @echo "  image            - Generate images containing all modules."
402         @echo "                     Supported formats include ELF, uimage and raw."
403         @echo "  grub1iso         - Generate an ISO using GRUB1 in images/name.iso [x86, amd64]" 
404         @echo "  grub2iso         - Generate an ISO using GRUB2 in images/name.iso [x86, amd64]" 
405         @echo "  qemu             - Use Qemu to run 'name'." 
406         @echo "  vbox             - Use VirtualBox to run 'name'." 
407         @echo "  ux               - Run 'name' under Fiasco/UX. [x86]" 
408         @echo "  kexec            - Issue a kexec call to start the entry." 
409         @echo " Add 'E=name' to directly select the entry without using the menu."
410         @echo " Modules are defined in conf/modules.list."
411
412
413 .PHONY: image qemu vbox ux switch_ram_base grub1iso grub2iso
414
415 switch_ram_base:
416         @echo "  ... Regenerating RAM_BASE settings"
417         $(VERBOSE)echo "# File semi-automatically generated by 'make switch_ram_base'" > $(OBJ_BASE)/Makeconf.ram_base
418         $(VERBOSE)echo "RAM_BASE := $(RAM_BASE)"                                      >> $(OBJ_BASE)/Makeconf.ram_base
419         PWD=$(PWD)/pkg/sigma0/server/src $(MAKE) -C pkg/sigma0/server/src
420         PWD=$(PWD)/pkg/moe/server/src    $(MAKE) -C pkg/moe/server/src
421
422 checkbuild:
423         @if [ -z "$(CHECK_BASE_DIR)" ]; then                                  \
424           echo "Need to set CHECK_BASE_DIR variable";                         \
425           exit 1;                                                             \
426         fi
427         set -e; for i in $(if $(USE_CONFIGS),$(addprefix mk/defconfig/config.,$(USE_CONFIGS)),mk/defconfig/config.*); do \
428           p=$(CHECK_BASE_DIR)/$$(basename $$i);                               \
429           rm -rf $$p;                                                         \
430           mkdir -p $$p;                                                       \
431           cp $$i $$p/.kconfig;                                                \
432           $(MAKE) O=$$p oldconfig;                                            \
433           $(MAKE) O=$$p tool;                                                 \
434           $(MAKE) O=$$p USE_CCACHE=$(USE_CCACHE) $(CHECK_MAKE_ARGS);          \
435         done
436
437 report:
438         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
439         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
440         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
441         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
442         @echo
443         @echo "make -v:"
444         @make -v || true
445         @echo
446         @echo "CC: $(CC) -v:"
447         @$(CC) -v || true
448         @echo
449         @echo "CXX: $(CXX) -v:"
450         @$(CXX) -v || true
451         @echo
452         @echo "HOST_CC: $(HOST_CC) -v:"
453         @$(HOST_CC) -v || true
454         @echo
455         @echo "HOST_CXX: $(HOST_CXX) -v:"
456         @$(HOST_CXX) -v || true
457         @echo
458         @echo -n "ld: $(LD) -v: "
459         @$(LD) -v || true
460         @echo
461         @echo -n "perl -v:"
462         @perl -v || true
463         @echo
464         @echo -n "python -V: "
465         @python -V || true
466         @echo
467         @echo "svn --version: "
468         @svn --version || true
469         @echo
470         @echo "Shell is:"
471         @ls -la /bin/sh || true
472         @echo
473         @echo "uname -a: "; uname -a
474         @echo
475         @echo "Distribution"
476         @if [ -e "/etc/debian_version" ]; then                 \
477           if grep -qi ubuntu /etc/issue; then                  \
478             echo -n "Ubuntu: ";                                \
479             cat /etc/issue;                                    \
480           else                                                 \
481             echo -n "Debian: ";                                \
482           fi;                                                  \
483           cat /etc/debian_version;                             \
484         elif [ -e /etc/gentoo-release ]; then                  \
485           echo -n "Gentoo: ";                                  \
486           cat /etc/gentoo-release;                             \
487         elif [ -e /etc/SuSE-release ]; then                    \
488           echo -n "SuSE: ";                                    \
489           cat /etc/SuSE-release;                               \
490         elif [ -e /etc/fedora-release ]; then                  \
491           echo -n "Fedora: ";                                  \
492           cat /etc/fedora-release;                             \
493         elif [ -e /etc/redhat-release ]; then                  \
494           echo -n "Redhat: ";                                  \
495           cat /etc/redhat-release;                             \
496           [ -e /etc/redhat_version ]                           \
497             && echo "  Version: `cat /etc/redhat_version`";    \
498         elif [ -e /etc/slackware-release ]; then               \
499           echo -n "Slackware: ";                               \
500           cat /etc/slackware-release;                          \
501           [ -e /etc/slackware-version ]                        \
502             && echo "  Version: `cat /etc/slackware-version`"; \
503         elif [ -e /etc/mandrake-release ]; then                \
504           echo -n "Mandrake: ";                                \
505           cat /etc/mandrake-release;                           \
506         else                                                   \
507           echo "Unknown distribution";                         \
508         fi
509         @lsb_release -a || true
510         @echo
511         @echo "Running as PID"
512         @id -u || true
513         @echo
514         @echo "Archive information:"
515         @svn info || true
516         @echo
517         @echo "CC       = $(CC)"
518         @echo "CXX      = $(CXX)"
519         @echo "HOST_CC  = $(HOST_CC)"
520         @echo "HOST_CXX = $(HOST_CXX)"
521         @echo "LD       = $(LD)"
522         @echo "Paths"
523         @echo "Current:   $$(pwd)"
524         @echo "L4DIR:     $(L4DIR)"
525         @echo "L4DIR_ABS: $(L4DIR_ABS)"
526         @echo "OBJ_BASE:  $(OBJ_BASE)"
527         @echo "OBJ_DIR:   $(OBJ_DIR)"
528         @echo
529         @for i in pkg \
530                   ../kernel/fiasco/src/kern/ia32 \
531                   ../tools/preprocess/src/preprocess; do \
532           if [ -e $$i ]; then \
533             echo Path $$i found ; \
534           else                \
535             echo PATH $$i IS NOT AVAILABLE; \
536           fi \
537         done
538         @echo
539         @echo Configuration:
540         @for i in $(OBJ_DIR)/.config.all $(OBJ_DIR)/.kconfig   \
541                   $(OBJ_DIR)/Makeconf.local                    \
542                   $(L4DIR_ABS)/Makeconf.local                  \
543                   $(OBJ_DIR)/conf/Makeconf.boot                \
544                   $(L4DIR_ABS)/conf/Makeconf.boot; do          \
545           if [ -e "$$i" ]; then                                \
546             echo "______start_______________________________:";\
547             echo "$$i:";                                       \
548             cat $$i;                                           \
549             echo "____________________________end___________"; \
550           else                                                 \
551             echo "$$i not found";                              \
552           fi                                                   \
553         done
554         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
555         @echo -e $(EMPHSTART)" Note, this report might disclose private information"$(EMPHSTOP)
556         @echo -e $(EMPHSTART)" Please review (and edit) before sending it to public lists"$(EMPHSTOP)
557         @echo -e $(EMPHSTART)"============================================================="$(EMPHSTOP)
558
559 help::
560         @echo
561         @echo "Miscellaneous targets:"
562         @echo "  switch_ram_base RAM_BASE=0xaddr"
563         @echo "                   - Switch physical RAM base of build to 'addr'." 
564         @echo "  update           - Update working copy by using SVN." 
565         @echo "  cont             - Continue building after fixing a build error." 
566         @echo "  clean            - Call 'clean' target recursively." 
567         @echo "  cleanfast        - Delete all directories created during build." 
568         @echo "  report           - Print out host configuration information." 
569         @echo "  help             - Print this help text."