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::
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
$(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
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; \
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"
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"
$(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: