]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/Makefile
update
[l4.git] / l4 / Makefile
index 1192a005c99bbcb5a33c21c31bb9f5a286e15702..4c2eca205df2cc25716302da92e08dc447e7f789 100644 (file)
@@ -11,7 +11,7 @@ cleanall-dirs = tool pkg doc
 
 BUILD_TOOLS    = gawk gcc g++ ld perl pkg-config
 
-CMDS_WITHOUT_OBJDIR := checkbuild up update check_build_tools
+CMDS_WITHOUT_OBJDIR := help checkbuild up update check_build_tools
 
 # our default target is all::
 all::
@@ -62,7 +62,7 @@ include $(L4DIR)/mk/Makeconf
 export DROPS_STDDIR
 
 # after having absfilename, we can export BID_ROOT_CONF
-ifneq ($(filter config oldconfig gconfig qconfig xconfig, $(MAKECMDGOALS)),)
+ifneq ($(filter config oldconfig gconfig nconfig xconfig, $(MAKECMDGOALS)),)
 export BID_ROOT_CONF=$(call absfilename,$(OBJ_BASE))/.config.all
 endif
 endif
@@ -158,14 +158,14 @@ generate_l4defs_files = \
        $(RM) -r $$tmpdir
 
 $(L4DEF_FILE_MK): $(BUILD_DIRS) $(DROPSCONF_CONFIG_MK) $(L4DIR)/mk/export_defs.inc
-       $(call generate_l4defs_files,prog)
-       $(call generate_l4defs_files,lib)
+       $(call generate_l4defs_files,static)
+       $(call generate_l4defs_files,shared)
 
 $(L4DEF_FILE_SH): $(L4DEF_FILE_MK)
 
 regen_l4defs:
-       $(call generate_l4defs_files,prog)
-       $(call generate_l4defs_files,lib)
+       $(call generate_l4defs_files,static)
+       $(call generate_l4defs_files,shared)
 
 .PHONY: l4defs regen_l4defs
 
@@ -290,15 +290,18 @@ check_build_tools:
          echo "All checked ok.";                                  \
        fi
 
+define set_ml
+       unset ml; ml=$(L4DIR_ABS)/conf/modules.list;             \
+          [ -n "$(MODULES_LIST)" ] && ml=$(MODULES_LIST)
+endef
 define entryselection
-       unset e; unset ml;                                       \
-          ml=$(L4DIR_ABS)/conf/modules.list;                    \
-          [ -n "$(MODULES_LIST)" ] && ml=$(MODULES_LIST);       \
+       unset e;                                                 \
+          $(set_ml);                                            \
           [ -n "$(ENTRY)"       ] && e="$(ENTRY)";              \
           [ -n "$(E)"           ] && e="$(E)";                  \
           if [ -z "$$e" ]; then                                 \
             BACKTITLE="No entry given. Use 'make $@ E=entryname' to avoid menu." \
-              L4DIR=$(L4DIR) $(L4DIR)/tool/bin/entry-selector $$ml 2> $(OBJ_BASE)/.entry-selector.tmp; \
+              L4DIR=$(L4DIR) $(L4DIR)/tool/bin/entry-selector menu $$ml 2> $(OBJ_BASE)/.entry-selector.tmp; \
             if [ $$? != 0 ]; then                               \
               cat $(OBJ_BASE)/.entry-selector.tmp;              \
               exit 1;                                           \
@@ -306,38 +309,77 @@ define entryselection
             e=$$(cat $(OBJ_BASE)/.entry-selector.tmp);          \
           fi
 endef
+define checkx86amd64build
+       $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
+         echo "This mode can only be used with architectures x86 and amd64."; \
+         exit 1;                                                              \
+       fi
+endef
+define genimage
+       $(VERBOSE)$(entryselection);                                      \
+       PWD=$(PWD)/pkg/bootstrap/server/src                               \
+           $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e"               \
+                   BOOTSTRAP_MODULES_LIST=$$ml $(1)                      \
+                   BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
+                   BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
+endef
 
 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)
 
 -include $(L4DIR)/conf/Makeconf.boot
 -include $(OBJ_BASE)/conf/Makeconf.boot
 
+QEMU_ARCH_MAP_$(ARCH) = qemu-system-$(ARCH)
+QEMU_ARCH_MAP_x86     = qemu
+QEMU_ARCH_MAP_amd64   = qemu-system-x86_64
+QEMU_ARCH_MAP_ppc32   = qemu-system-ppc
+
+list:
+       $(VERBOSE)$(set_ml); \
+         L4DIR=$(L4DIR) $(L4DIR)/tool/bin/entry-selector list $$ml
+
 image:
-       $(VERBOSE)$(entryselection);                                      \
-       PWD=$(PWD)/pkg/bootstrap/server/src                               \
-           $(MAKE) -C pkg/bootstrap/server/src ENTRY="$$e"               \
-                   BOOTSTRAP_MODULES_LIST=$$ml                           \
-                   BOOTSTRAP_MODULE_PATH_BINLIB="$(BUILDDIR_SEARCHPATH)" \
-                   BOOTSTRAP_SEARCH_PATH="$(MODULE_SEARCH_PATH)"
+       $(genimage)
+
+elfimage:
+       $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=)
+
+uimage:
+       $(call genimage,BOOTSTRAP_DO_UIMAGE=y BOOTSTRAP_DO_RAW_IMAGE=)
 
+rawimage:
+       $(call genimage,BOOTSTRAP_DO_UIMAGE= BOOTSTRAP_DO_RAW_IMAGE=y)
+
+ifneq ($(filter $(ARCH),x86 amd64),)
 qemu:
-       $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
-         echo "This mode can only be used with architectures x86 and amd64."; \
+       $(VERBOSE)$(entryselection);                                      \
+        qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH)));   \
+        QEMU=$$qemu L4DIR=$(L4DIR)                                       \
+         SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"       \
+         $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
+else
+qemu: elfimage
+       $(VERBOSE)qemu=$(if $(QEMU_PATH),$(QEMU_PATH),$(QEMU_ARCH_MAP_$(ARCH))); \
+       if [ -z "$$qemu" ]; then echo "Set QEMU_PATH!"; exit 1; fi;              \
+       echo QEmu-cmd: $$qemu -kernel $(OBJ_BASE)/images/bootstrap.elf $(QEMU_OPTIONS);    \
+       $$qemu -kernel $(OBJ_BASE)/images/bootstrap.elf $(QEMU_OPTIONS)
+endif
+
+vbox: $(if $(VBOX_ISOTARGET),$(VBOX_ISOTARGET),grub2iso)
+       $(checkx86amd64build)
+       $(VERBOSE)if [ -z "$(VBOX_VM)" ]; then                                 \
+         echo "Need to set name of configured VirtualBox VM im 'VBOX_VM'.";   \
          exit 1;                                                              \
        fi
-       $(VERBOSE)$(entryselection);                                  \
-          qemu=$(QEMU_PATH);                                         \
-          if [ -z "$$qemu" ]; then                                   \
-            [ "$(ARCH)" = "amd64" ] && qemu=qemu-system-x86_64;      \
-            [ "$(ARCH)" = "x86" ] && qemu=qemu;                      \
-          fi;                                                        \
-        QEMU=$$qemu L4DIR=$(L4DIR)                                   \
-         SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
-         $(L4DIR)/tool/bin/qemu-x86-launch $$ml "$$e" $(QEMU_OPTIONS)
+       $(VERBOSE)VBoxSDL                              \
+           --startvm $(VBOX_VM)                       \
+           --cdrom $(OBJ_BASE)/images/.current.iso    \
+           --boot d                                   \
+           $(VBOX_OPTIONS)
 
 kexec:
        $(VERBOSE)$(entryselection);                                  \
-        L4DIR=$(L4DIR)                                   \
+        L4DIR=$(L4DIR)                                               \
          SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"   \
          $(L4DIR)/tool/bin/kexec-launch $$ml "$$e"
 
@@ -355,45 +397,42 @@ ux:
          SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"  \
          $(L4DIR)/tool/bin/ux-launch $$ml "$$e" $(UX_OPTIONS)
 
+define geniso
+       $(checkx86amd64build)
+       $(VERBOSE)$(entryselection);                                         \
+        $(MKDIR) $(OBJ_BASE)/images;                                        \
+        ISONAME=$(OBJ_BASE)/images/$$(echo $$e | tr '[ A-Z]' '[_a-z]').iso; \
+        L4DIR=$(L4DIR)                                                      \
+         SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"          \
+         $(L4DIR)/tool/bin/gengrub$(1)iso --timeout=0 $$ml                  \
+            $$ISONAME "$$e"                                                 \
+         && $(LN) -f $$ISONAME $(OBJ_BASE)/images/.current.iso
+endef
+
 grub1iso:
-       $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
-         echo "This mode can only be used with architectures x86 and amd64."; \
-         exit 1;                                                              \
-       fi
-       $(VERBOSE)$(entryselection);                                   \
-        $(MKDIR) $(OBJ_BASE)/images;                                  \
-        L4DIR=$(L4DIR)                                                \
-         SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
-         $(L4DIR)/tool/bin/gengrub1iso --timeout=0 $$ml               \
-            $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
+       $(call geniso,1)
 
 grub2iso:
-       $(VERBOSE)if [ "$(ARCH)" != "x86" -a "$(ARCH)" != "amd64" ]; then      \
-         echo "This mode can only be used with architectures x86 and amd64."; \
-         exit 1;                                                              \
-       fi
-       $(VERBOSE)$(entryselection);                                   \
-        $(MKDIR) $(OBJ_BASE)/images;                                  \
-        L4DIR=$(L4DIR)                                                \
-         SEARCHPATH="$(MODULE_SEARCH_PATH):$(BUILDDIR_SEARCHPATH)"    \
-         $(L4DIR)/tool/bin/gengrub2iso --timeout=0 $$ml               \
-            $(OBJ_BASE)/images/$$(echo $$e | tr '[ ]' '[_]').iso "$$e"
+       $(call geniso,2)
 
 help::
        @echo
        @echo "Image generation targets:"
-       @echo "  image            - Generate images containing all modules."
-       @echo "                     Supported formats include ELF, uimage and raw."
-       @echo "  grub1iso         - Generate an ISO using GRUB1 in images/name.iso [x86, amd64]" 
-       @echo "  grub2iso         - Generate an ISO using GRUB2 in images/name.iso [x86, amd64]" 
-       @echo "  qemu             - Use Qemu to run 'name'. [x86, amd64]" 
-       @echo "  ux               - Run 'name' under Fiasco/UX. [x86]" 
-       @echo "  kexec            - Issue a kexec call to start the entry." 
+       @echo "  image     - Generate images according to config [ELF, raw, uImage]."
+       @echo "  elfimage  - Generate an ELF image, containing all modules."
+       @echo "  rawimage  - Generate a raw image (memory dump), containing all modules."
+       @echo "  uimage    - Generate a uimage for u-boot, containing all modules."
+       @echo "  grub1iso  - Generate an ISO using GRUB1 in images/<name>.iso [x86, amd64]" 
+       @echo "  grub2iso  - Generate an ISO using GRUB2 in images/<name>.iso [x86, amd64]" 
+       @echo "  qemu      - Use Qemu to run 'name'." 
+       @echo "  vbox      - Use VirtualBox to run 'name'." 
+       @echo "  ux        - Run 'name' under Fiasco/UX. [x86]" 
+       @echo "  kexec     - Issue a kexec call to start the entry." 
        @echo " Add 'E=name' to directly select the entry without using the menu."
        @echo " Modules are defined in conf/modules.list."
 
 
-.PHONY: image qemu ux switch_ram_base grub1iso grub2iso
+.PHONY: image elfimage rawimage uimage qemu vbox ux switch_ram_base grub1iso grub2iso
 
 switch_ram_base:
        @echo "  ... Regenerating RAM_BASE settings"
@@ -415,6 +454,7 @@ checkbuild:
          $(MAKE) O=$$p oldconfig;                                            \
          $(MAKE) O=$$p tool;                                                 \
          $(MAKE) O=$$p USE_CCACHE=$(USE_CCACHE) $(CHECK_MAKE_ARGS);          \
+         $(if $(CHCEK_REMOVE_OBJDIR),rm -rf $$p;)                            \
        done
 
 report: