diff options
-rw-r--r-- | rules/other/Definitions.make | 14 | ||||
-rw-r--r-- | rules/other/Toplevel.make | 419 | ||||
-rw-r--r-- | rules/post/dump.make | 43 | ||||
-rw-r--r-- | rules/post/export.make | 3 | ||||
-rw-r--r-- | rules/post/get.make | 10 | ||||
-rw-r--r-- | rules/post/images.make | 242 | ||||
-rw-r--r-- | rules/post/mk-devnodes.make | 44 | ||||
-rw-r--r-- | rules/post/plugins.make | 20 | ||||
-rw-r--r-- | rules/post/simulation.make | 32 | ||||
-rw-r--r-- | rules/post/world.make | 35 |
10 files changed, 440 insertions, 422 deletions
diff --git a/rules/other/Definitions.make b/rules/other/Definitions.make index 7af55f115..8626ed019 100644 --- a/rules/other/Definitions.make +++ b/rules/other/Definitions.make @@ -16,12 +16,13 @@ M2B=$(STATEDIR)/environment # # Select make variables for export to shell (by full name) # -M2B_DUMP_VARIABLES := PTXCONF_CONFIGFILE_VERSION -M2B_DUMP_VARIABLES += PTXCONFIG PTXCONF_SYSROOT_TARGET PTXCONF_PROJECT PTXCONF_PROJECT_VERSION -M2B_DUMP_VARIABLES += PTXDIST_WORKSPACE PTXDIST_TOPDIR -M2B_DUMP_VARIABLES += PTXDIST PTXDIST_FULLVERSION -M2B_DUMP_VARIABLES += RULESDIR SCRIPTSDIR STATEDIR SYSROOT WORKDIR -M2B_DUMP_VARIABLES += PACKAGES- PACKAGES-y PACKAGES-m +M2B_DUMP_VARIABLES := \ + PTXCONF_CONFIGFILE_VERSION \ + PTXCONFIG PTXCONF_SYSROOT_TARGET PTXCONF_PROJECT PTXCONF_PROJECT_VERSION \ + PTXDIST_WORKSPACE PTXDIST_TOPDIR \ + PTXDIST PTXDIST_FULLVERSION \ + RULESDIR SCRIPTSDIR STATEDIR SYSROOT WORKDIR \ + PACKAGES- PACKAGES-y PACKAGES-m # # Select make variables for export to shell (by suffix) @@ -39,3 +40,4 @@ add_quote = $(subst $(quote),\$(quote),$(1)) tr_sh = $(strip $(shell echo $(1) | sed 'y%*+%pp%;s%[^_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]%_%g')) uppercase = $(shell echo $(strip $(1)) | tr "a-z.-" "A-Z__") + diff --git a/rules/other/Toplevel.make b/rules/other/Toplevel.make index 6cd369b04..180a7dede 100644 --- a/rules/other/Toplevel.make +++ b/rules/other/Toplevel.make @@ -23,23 +23,6 @@ include $(RULESDIR)/other/Definitions.make -include $(PLATFORMCONFIG) # ---------------------------------------------------------------------------- -# Packets for host, cross and target -# ---------------------------------------------------------------------------- - -PACKAGES := -PACKAGES- := -PACKAGES-y := -PACKAGES-m := -CROSS_PACKAGES := -CROSS_PACKAGES- := -CROSS_PACKAGES-y := -HOST_PACKAGES := -HOST_PACKAGES- := -HOST_PACKAGES-y := -VIRTUAL := - - -# ---------------------------------------------------------------------------- # Include all rule files # ---------------------------------------------------------------------------- @@ -58,17 +41,17 @@ include $(PACKAGE_DEP_PRE) include $(RULESFILES_ALL_MAKE) include $(PACKAGE_DEP_POST) -PACKAGES := $(PACKAGES-y) $(PACKAGES-m) +PACKAGES := $(PACKAGES-y) $(PACKAGES-m) CROSS_PACKAGES := $(CROSS_PACKAGES-y) HOST_PACKAGES := $(HOST_PACKAGES-y) ALL_PACKAGES := \ - $(PACKAGES-) $(PACKAGES-y) $(PACKAGES-m) \ - $(CROSS_PACKAGES-) $(CROSS_PACKAGES-y) \ - $(HOST_PACKAGES-) $(HOST_PACKAGES) + $(PACKAGES-) $(PACKAGES-y) $(PACKAGES-m) \ + $(CROSS_PACKAGES-) $(CROSS_PACKAGES-y) \ + $(HOST_PACKAGES-) $(HOST_PACKAGES) SELECTED_PACKAGES := \ - $(PACKAGES-y) $(PACKAGES-m) \ + $(PACKAGES-y) $(PACKAGES-m) \ $(CROSS_PACKAGES-y) \ $(HOST_PACKAGES-y) @@ -76,339 +59,6 @@ ifneq ($(wildcard $(POSTRULESDIR)/*.make),) include $(wildcard $(POSTRULESDIR)/*.make) endif -# ---------------------------------------------------------------------------- -# Install targets -# ---------------------------------------------------------------------------- - -PACKAGES_GET := $(addsuffix _get,$(PACKAGES)) -PACKAGES_EXTRACT := $(addsuffix _extract,$(PACKAGES)) -PACKAGES_PREPARE := $(addsuffix _prepare,$(PACKAGES)) -PACKAGES_COMPILE := $(addsuffix _compile,$(PACKAGES)) -PACKAGES_TARGETINSTALL := $(addsuffix _targetinstall,$(PACKAGES)) - -HOST_PACKAGES_GET := $(addsuffix _get,$(HOST_PACKAGES)) -HOST_PACKAGES_EXTRACT := $(addsuffix _extract,$(HOST_PACKAGES)) -HOST_PACKAGES_PREPARE := $(addsuffix _prepare,$(HOST_PACKAGES)) -HOST_PACKAGES_COMPILE := $(addsuffix _compile,$(HOST_PACKAGES)) -HOST_PACKAGES_INSTALL := $(addsuffix _install,$(HOST_PACKAGES)) - -CROSS_PACKAGES_GET := $(addsuffix _get,$(CROSS_PACKAGES)) -CROSS_PACKAGES_EXTRACT := $(addsuffix _extract,$(CROSS_PACKAGES)) -CROSS_PACKAGES_PREPARE := $(addsuffix _prepare,$(CROSS_PACKAGES)) -CROSS_PACKAGES_COMPILE := $(addsuffix _compile,$(CROSS_PACKAGES)) -CROSS_PACKAGES_INSTALL := $(addsuffix _install,$(CROSS_PACKAGES)) - -# FIXME: should probably go somewhere else (separate images.make?) -ifdef PTXCONF_MKNBI_NBI -MKNBI_EXT = nbi -else -MKNBI_EXT = elf -endif - -MKNBI_KERNEL = $(KERNEL_TARGET_PATH) - -MKNBI_ROOTFS = $(IMAGEDIR)/root.ext2 -ifdef PTXCONF_IMAGE_EXT2_GZIP -MKNBI_ROOTFS = $(IMAGEDIR)/root.ext2.gz -endif - -# ---------------------------------------------------------------------------- -# Targets -# ---------------------------------------------------------------------------- - -get: $(PACKAGES_GET) $(HOST_PACKAGES_GET) $(CROSS_PACKAGES_GET) - -dep_output_clean: - touch $(DEP_OUTPUT) - -dep_tree: $(STATEDIR)/dep_tree - -$(STATEDIR)/dep_tree: - @if dot -V 2> /dev/null; then \ - echo "creating dependency graph..."; \ - sort $(DEP_OUTPUT) | uniq | $(PTXDIST_TOPDIR)/scripts/makedeptree | $(DOT) -Tps > $(DEP_TREE_PS); \ - if [ -x "`which poster`" ]; then \ - echo "creating A4 version..."; \ - poster -v -c0\% -mA4 -o$(DEP_TREE_A4_PS) $(DEP_TREE_PS); \ - fi;\ - else \ - echo "Install 'dot' from graphviz packet if you want to have a nice dependency tree"; \ - fi - @$(call touch, $@) - -dep_world: $(HOST_PACKAGES_INSTALL) \ - $(CROSS_PACKAGES_INSTALL) \ - $(PACKAGES_TARGETINSTALL) - @echo $@ : $^ | sed -e 's/\([^ ]*\)_\([^_]*\)/\1.\2/g' >> $(DEP_OUTPUT) - -world: dep_output_clean dep_world dep_tree - -host-tools: dep_output_clean $(HOST_PACKAGES_INSTALL) dep_tree -host-get: getclean $(HOST_PACKAGES_GET) -host-extract: $(HOST_PACKAGES_EXTRACT) -host-prepare: $(HOST_PACKAGES_PREPARE) -host-compile: $(HOST_PACKAGES_COMPILE) -host-install: $(HOST_PACKAGES_INSTALL) - -cross-tools: dep_output_clean $(CROSS_PACKAGES_INSTALL) dep_tree -cross-get: getclean $(CROSS_PACKAGES_GET) -cross-extract: $(CROSS_PACKAGES_EXTRACT) -cross-prepare: $(CROSS_PACKAGES_PREPARE) -cross-compile: $(CROSS_PACKAGES_COMPILE) -cross-install: $(CROSS_PACKAGES_INSTALL) - -# ---------------------------------------------------------------------------- -# Images -# ---------------------------------------------------------------------------- - -DOPERMISSIONS = '{ \ - if ($$1 == "f") \ - printf("chmod %s .%s; chown %s.%s .%s;\n", $$5, $$2, $$3, $$4, $$2); \ - if ($$1 == "n") \ - printf("mkdir -p .`dirname %s`; mknod -m %s .%s %s %s %s; chown %s.%s .%s;\n", $$2, $$5, $$2, $$6, $$7, $$8, $$3, $$4, $$2);}' - - -images: $(STATEDIR)/images - -ipkg-push: $(STATEDIR)/ipkg-push - -$(STATEDIR)/ipkg-push: $(STATEDIR)/host-ipkg-utils.install - @$(call targetinfo, $@) - ( \ - PATH=$(PTXCONF_SYSROOT_CROSS)/bin:$(PTXCONF_SYSROOT_CROSS)/usr/bin:$$PATH; \ - PATH=$(PTXCONF_SYSROOT_HOST)/bin:$(PTXCONF_SYSROOT_HOST)/usr/bin:$$PATH; \ - export $$PATH; \ - $(PTXDIST_TOPDIR)/scripts/ipkg-push \ - --ipkgdir $(call remove_quotes,$(IMAGEDIR)) \ - --repodir $(call remove_quotes,$(PTXCONF_SETUP_IPKG_REPOSITORY)) \ - --revision $(call remove_quotes,$(FULLVERSION)) \ - --project $(call remove_quotes,$(PTXCONF_PROJECT)) \ - --dist $(call remove_quotes,$(PTXCONF_PROJECT)$(PTXCONF_PROJECT_VERSION)); \ - echo; \ - ) - $(call touch, $@) - -images_deps = world -ifdef PTXCONF_IMAGE_IPKG_IMAGE_FROM_REPOSITORY -images_deps += $(STATEDIR)/ipkg-push -endif - -ifdef PTXCONF_IMAGE_HD_PART1 - GENHDIMARGS = -p $(PTXCONF_IMAGE_HD_PART1_START):$(PTXCONF_IMAGE_HD_PART1_END):$(PTXCONF_IMAGE_HD_PART1_TYPE):$(IMAGEDIR)/root.ext2 -endif -ifdef PTXCONF_IMAGE_HD_PART2 - GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART2_START):$(PTXCONF_IMAGE_HD_PART2_END):$(PTXCONF_IMAGE_HD_PART2_TYPE): -endif -ifdef PTXCONF_IMAGE_HD_PART3 - GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART3_START):$(PTXCONF_IMAGE_HD_PART3_END):$(PTXCONF_IMAGE_HD_PART3_TYPE): -endif -ifdef PTXCONF_IMAGE_HD_PART4 - GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART4_START):$(PTXCONF_IMAGE_HD_PART4_END):$(PTXCONF_IMAGE_HD_PART4_TYPE): -endif -ifdef PTXCONF_GRUB - GENHDIMARGS += -m $(GRUB_DIR)/stage1/stage1 - GENHDIMARGS += -n $(GRUB_DIR)/stage2/stage2 -endif - -# -# generate the list of source permission files -# -PERMISSION_FILES := $(foreach pkg, $(PACKAGES-y), $(wildcard $(STATEDIR)/$(pkg)*.perms)) - -# -# list of all ipkgs being selected for the root image -# -IPKG_FILES := $(foreach pkg, $(PACKAGES-y), $(wildcard $(PKGDIR)/$(pkg)*.ipk)) - -# -# create one file with all permissions from all permission source files -# -$(IMAGEDIR)/permissions: $(PERMISSION_FILES) $(PTXDIST_WORKSPACE)/ptxconfig - @cat $^ > $@ - -# -# to extract the ipkgs we need a dummy config file -# -$(IMAGEDIR)/ipkg.conf: - @echo -e "dest root /\narch $(PTXCONF_ARCH_STRING) 10\narch all 1\narch noarch 1\n" > $@ - -# -# Working directory to create any kind of image -# -WORKDIR := $(IMAGEDIR)/work_dir - -# -# Create architecture type for mkimge -# Most architectures are working with label $(PTXCONF_ARCH_STRING) -# but the i386 family needs "x86" instead! -# -ifeq ($(PTXCONF_ARCH_STRING),"i386") -MKIMAGE_ARCH := x86 -else -MKIMAGE_ARCH := $(PTXCONF_ARCH_STRING) -endif - -# -# Define what images should be build -# -SEL_ROOTFS-y := -SEL_ROOTFS-$(PTXCONF_IMAGE_TGZ) += $(IMAGEDIR)/root.tgz -SEL_ROOTFS-$(PTXCONF_IMAGE_JFFS2) += $(IMAGEDIR)/root.jffs2 -SEL_ROOTFS-$(PTXCONF_IMAGE_EXT2) += $(IMAGEDIR)/root.ext2 -SEL_ROOTFS-$(PTXCONF_IMAGE_HD) += $(IMAGEDIR)/hd.img -SEL_ROOTFS-$(PTXCONF_IMAGE_EXT2_GZIP) += $(IMAGEDIR)/root.ext2.gz -SEL_ROOTFS-$(PTXCONF_IMAGE_UIMAGE) += $(IMAGEDIR)/uRamdisk -SEL_ROOTFS-$(PTXCONF_IMAGE_CPIO) += $(IMAGEDIR)/initrd.gz - -# -# extract all current ipkgs into the working directory -# -$(STATEDIR)/image_working_dir: $(IPKG_FILES) $(IMAGEDIR)/permissions $(IMAGEDIR)/ipkg.conf - @rm -rf $(WORKDIR) - @mkdir $(WORKDIR) - @echo -n "Extracting ipkg packages into working directory..." - @DESTDIR=$(WORKDIR) $(FAKEROOT) -- $(PTXCONF_SYSROOT_HOST)/bin/ipkg-cl -f $(IMAGEDIR)/ipkg.conf -o $(WORKDIR) install $(IPKG_FILES) 2>&1 >/dev/null - @$(call touch, $@) - -# -# create the root.tgz image -# -$(IMAGEDIR)/root.tgz: $(STATEDIR)/image_working_dir - @echo -n "Creating root.tgz from working dir..." - @cd $(WORKDIR); \ - ($(AWK) -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ - ( echo -n "tar -zcf "; \ - echo -n "$@ ." ) \ - ) | $(FAKEROOT) -- - @echo "done." - -# -# create the JFFS2 image -# -$(IMAGEDIR)/root.jffs2: $(STATEDIR)/image_working_dir - @echo -n "Creating root.jffs2 from working dir..." - @cd $(WORKDIR); \ - ($(AWK) -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ - ( \ - echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mkfs.jffs2 "; \ - echo -n "-d $(WORKDIR) "; \ - echo -n "--eraseblock=$(PTXCONF_IMAGE_JFFS2_BLOCKSIZE) "; \ - echo -n "$(PTXCONF_IMAGE_JFFS2_EXTRA_ARGS) "; \ - echo -n "-o $@" ) \ - ) | $(FAKEROOT) -- - @echo "done." - -# -# create the ext2 image -# -$(IMAGEDIR)/root.ext2: $(STATEDIR)/image_working_dir - @echo -n "Creating root.ext2 from working dir..." - @cd $(WORKDIR); \ - ($(AWK) -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ - ( \ - echo -n "$(PTXCONF_SYSROOT_HOST)/bin/genext2fs "; \ - echo -n "-b $(PTXCONF_IMAGE_EXT2_SIZE) "; \ - echo -n "$(PTXCONF_IMAGE_EXT2_EXTRA_ARGS) "; \ - echo -n "-d $(WORKDIR) "; \ - echo "$@" ) \ - ) | $(FAKEROOT) -- - @echo "done." - -# -# TODO -# -$(IMAGEDIR)/hd.img: $(IMAGEDIR)/root.ext2 - @echo -n "Creating hdimg from root.ext2"; \ - PATH=$(PTXCONF_SYSROOT_HOST)/bin:$$PATH $(PTXDIST_TOPDIR)/scripts/genhdimg \ - -o $@ $(GENHDIMARGS) - @echo "done." - -# -# TODO -# -$(IMAGEDIR)/root.ext2.gz: $(IMAGEDIR)/root.ext2 - @echo -n "Creating root.ext2.gz from root.ext2..."; - @rm -f $@ - @cat $< | gzip -v9 > $@ - @echo "done." - -# -# TODO -# -$(IMAGEDIR)/uRamdisk: $(IMAGEDIR)/root.ext2.gz - @echo -n "Creating U-Boot ramdisk from root.ext2.gz..."; - @$(PTXCONF_SYSROOT_HOST)/bin/mkimage \ - -A $(MKIMAGE_ARCH) \ - -O Linux \ - -T ramdisk \ - -C gzip \ - -n $(PTXCONF_IMAGE_UIMAGE_NAME) \ - -d $< \ - $@ - @echo "done." - -# -# create traditional initrd.gz, to be used -# as initramfs (-> "-H newc") -# -$(IMAGEDIR)/initrd.gz: $(STATEDIR)/image_working_dir - @echo -n "Creating initrd.gz from working dir..." - @cd $(WORKDIR); \ - ($(AWK) -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ - ( \ - echo "find . | "; \ - echo "cpio --quiet -H newc -o | "; \ - echo "gzip -9 -n > $@" ) \ - ) | $(FAKEROOT) -- - @echo "done." - -# -# TODO: Find a way to always find the correct zipped kernel image on every -# architecture. -# -#$(IMAGEDIR)/muimage: $(IMAGEDIR)/initrd.gz $(KERNEL_DIR)/??????? -# @echo -n "Creating multi content uimage..." -# @$(PTXCONF_SYSROOT_HOST)/bin/mkimage -A $(PTXCONF_ARCH_STRING) \ -# -O Linux -T multi -C gzip -a 0 -e 0 \ -# -n 'Multi-File Image' \ -# -d $(KERNEL_DIR)/vmlinux.bin.gz:$(IMAGEDIR)/initrd.img \ -# $(IMAGEDIR)/muimage -# @echo "done." - -# -# create all requested images and clean up when done -# -$(STATEDIR)/images: $(SEL_ROOTFS-y) $(images_deps) - @echo "Clean up temp working directory" - @rm -rf $(WORKDIR) $(STATEDIR)/image_working_dir - @$(call touch, $@) - -# ---------------------------------------------------------------------------- -# Simulation -# ---------------------------------------------------------------------------- - -uml_cmdline= -ifdef PTXCONF_KERNEL_HOST_ROOT_HOSTFS -uml_cmdline += root=/dev/root rootflags=$(ROOTDIR) rootfstype=hostfs -endif -ifdef PTXCONF_KERNEL_HOST_CONSOLE_STDSERIAL -uml_cmdline += ssl0=fd:0,fd:1 -endif -#uml_cmdline += eth0=slirp -uml_cmdline += $(PTXCONF_KERNEL_HOST_CMDLINE) - -run: world - @$(call targetinfo, "Run Simulation") -ifdef NATIVE - @echo "starting Linux..." - @echo - @$(ROOTDIR)/boot/linux $(call remove_quotes,$(uml_cmdline)) -else - @echo - @echo "cannot run simulation if not in NATIVE=1 mode" - @echo - @exit 1 -endif # ---------------------------------------------------------------------------- # Misc other targets @@ -417,64 +67,5 @@ endif print-%: @echo "$* is \"$($*)\"" -plugins: - @echo "Installed Plugins:" - @echo $(wildcard $(PTXDIST_TOPDIR)/plugins/*) - -plugin-%: dump - @echo "trying plugin $(*)" - @if [ -x "$(PTXDIST_WORKSPACE)/plugins/$(*)/main" ]; then \ - echo "local plugin found."; \ - $(PTXDIST_WORKSPACE)/plugins/$(*)/main; \ - elif [ -x "$(PTXDIST_TOPDIR)/plugins/$(*)/main" ]; then \ - echo "generic plugin found."; \ - $(PTXDIST_TOPDIR)/plugins/$(*)/main; \ - else \ - echo "sorry, plugin not found"; \ - fi - -# ---------------------------------------------------------------------------- -# environment export to plugins and shell scripts -# ---------------------------------------------------------------------------- -# If you run 'ptxdist make dump', you will get two files: -# $(STATEDIR)/environment.symbols <- A list of all internal Variable -# Symbols in the main PTXdist Makefile -# $(STATEDIR)/environment.bash <- A selection of Variables in bash -# syntax. Please adjust M2B_DUMP_VARIABLES -# and M2B_DUMP_SUFFIXES to your needs. -# See rules/other/Definitions.make -# ---------------------------------------------------------------------------- -# -# dump all internal make symbols -# -$(M2B).symbols: - @echo "$(.VARIABLES)" \ - | sed s/\ /\\n/g \ - | egrep -v "[^A-Z0-9_-]|^_$$" \ - | sort -u > $@ - -dump-symbols: $(M2B).symbols ; -# -# dump selected symbols with value -# -packages := $(PACKAGES-) $(PACKAGES-y) $(PACKAGES-m) -prefixes := $(shell echo $(packages) | tr "a-z-" "A-Z_") -symbols := $(foreach prefix,$(prefixes),$(foreach suffix,$(M2B_DUMP_SUFFIXES),$(prefix)$(suffix))) -allsymbols := $(prefixes) $(shell echo $(symbols) | tr "a-z-" "A-Z_") $(M2B_DUMP_VARIABLES) -sources := $(addsuffix _SOURCE,$(shell echo $(SELECTED_PACKAGES) | tr "a-z-" "A-Z_")) - -dump-%: $(M2B).symbols - @echo 'M2B_$(call remove_quotes,$(*))="$(call remove_quotes,$($(*)))"' >> $(M2B).bash.tmp - @echo '$(call remove_quotes,$(*)) $(call remove_quotes,$($(*)))' >> $(M2B).tmp - -dump: $(addprefix dump-,$(allsymbols)) - @mv $(M2B).bash.tmp $(M2B).bash - @mv $(M2B).tmp $(M2B) - -# -# ---------------------------------------------------------------------------- - -.PHONY: dep_output_clean dep_tree dep_world before_config - # vim600:set foldmethod=marker: # vim600:set syntax=make: diff --git a/rules/post/dump.make b/rules/post/dump.make new file mode 100644 index 000000000..266913d59 --- /dev/null +++ b/rules/post/dump.make @@ -0,0 +1,43 @@ +# -*-makefile-*- + +# ---------------------------------------------------------------------------- +# environment export to plugins and shell scripts +# ---------------------------------------------------------------------------- +# If you run 'ptxdist make dump', you will get two files: +# $(STATEDIR)/environment.symbols <- A list of all internal Variable +# Symbols in the main PTXdist Makefile +# $(STATEDIR)/environment.bash <- A selection of Variables in bash +# syntax. Please adjust M2B_DUMP_VARIABLES +# and M2B_DUMP_SUFFIXES to your needs. +# See rules/other/Definitions.make +# ---------------------------------------------------------------------------- +# +# dump all internal make symbols +# +$(M2B).symbols: + @echo "$(.VARIABLES)" \ + | sed s/\ /\\n/g \ + | egrep -v "[^A-Z0-9_-]|^_$$" \ + | sort -u > $@ + +dump-symbols: $(M2B).symbols + +# +# dump selected symbols with value +# +packages := $(PACKAGES-) $(PACKAGES-y) $(PACKAGES-m) +prefixes := $(shell echo $(packages) | tr "a-z-" "A-Z_") +symbols := $(foreach prefix,$(prefixes),$(foreach suffix,$(M2B_DUMP_SUFFIXES),$(prefix)$(suffix))) +allsymbols := $(prefixes) $(shell echo $(symbols) | tr "a-z-" "A-Z_") $(M2B_DUMP_VARIABLES) +sources := $(addsuffix _SOURCE,$(shell echo $(SELECTED_PACKAGES) | tr "a-z-" "A-Z_")) + +dump-%: $(M2B).symbols + @echo 'M2B_$(call remove_quotes,$(*))="$(call remove_quotes,$($(*)))"' >> $(M2B).bash.tmp + @echo '$(call remove_quotes,$(*)) $(call remove_quotes,$($(*)))' >> $(M2B).tmp + +dump: $(addprefix dump-,$(allsymbols)) + @mv $(M2B).bash.tmp $(M2B).bash + @mv $(M2B).tmp $(M2B) + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: diff --git a/rules/post/export.make b/rules/post/export.make index 217aefba7..e9e9052f8 100644 --- a/rules/post/export.make +++ b/rules/post/export.make @@ -7,9 +7,8 @@ get_source = $(if $($(source)), $($(source)), $($(subst CROSS_,,$(subst HOST_,,$ #FIXME? now copies files twice if selected for host _and_ target. export: @for i in $(foreach source,$(sources),$(get_source)); do \ - cp $$i $(EXPORTDIR); \ + cp -v "$${i}" "$(EXPORTDIR)"; \ done - # vim600:set foldmethod=marker: # vim600:set syntax=make: diff --git a/rules/post/get.make b/rules/post/get.make new file mode 100644 index 000000000..78dd3a7e7 --- /dev/null +++ b/rules/post/get.make @@ -0,0 +1,10 @@ +# -*-makefile-*- + +GET_PACKAGES := $(addsuffix _get,$(PACKAGES)) +GET_HOST_PACKAGES := $(addsuffix _get,$(HOST_PACKAGES)) +GET_CROSS_PACKAGES := $(addsuffix _get,$(CROSS_PACKAGES)) + +get: $(GET_PACKAGES) $(GET_HOST_PACKAGES) $(GET_CROSS_PACKAGES) + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: diff --git a/rules/post/images.make b/rules/post/images.make new file mode 100644 index 000000000..95480ec19 --- /dev/null +++ b/rules/post/images.make @@ -0,0 +1,242 @@ +# -*-makefile-*- + +# ---------------------------------------------------------------------------- +# Images +# ---------------------------------------------------------------------------- + +DOPERMISSIONS := '{ \ + if ($$1 == "f") \ + printf("chmod %s .%s; chown %s.%s .%s;\n", $$5, $$2, $$3, $$4, $$2); \ + if ($$1 == "n") \ + printf("mkdir -p .`dirname %s`; mknod -m %s .%s %s %s %s; chown %s.%s .%s;\n", $$2, $$5, $$2, $$6, $$7, $$8, $$3, $$4, $$2);}' + +ifdef PTXCONF_MKNBI_NBI +MKNBI_EXT = nbi +else +MKNBI_EXT = elf +endif + +MKNBI_KERNEL = $(KERNEL_TARGET_PATH) + +MKNBI_ROOTFS = $(IMAGEDIR)/root.ext2 +ifdef PTXCONF_IMAGE_EXT2_GZIP +MKNBI_ROOTFS = $(IMAGEDIR)/root.ext2.gz +endif + +images: $(STATEDIR)/images + +ipkg-push: $(STATEDIR)/ipkg-push + +$(STATEDIR)/ipkg-push: $(STATEDIR)/host-ipkg-utils.install + @$(call targetinfo, $@) + ( \ + PATH=$(PTXCONF_SYSROOT_CROSS)/bin:$(PTXCONF_SYSROOT_CROSS)/usr/bin:$$PATH; \ + PATH=$(PTXCONF_SYSROOT_HOST)/bin:$(PTXCONF_SYSROOT_HOST)/usr/bin:$$PATH; \ + export $$PATH; \ + $(PTXDIST_TOPDIR)/scripts/ipkg-push \ + --ipkgdir $(call remove_quotes,$(IMAGEDIR)) \ + --repodir $(call remove_quotes,$(PTXCONF_SETUP_IPKG_REPOSITORY)) \ + --revision $(call remove_quotes,$(FULLVERSION)) \ + --project $(call remove_quotes,$(PTXCONF_PROJECT)) \ + --dist $(call remove_quotes,$(PTXCONF_PROJECT)$(PTXCONF_PROJECT_VERSION)); \ + echo; \ + ) + $(call touch, $@) + +images_deps = world +ifdef PTXCONF_IMAGE_IPKG_IMAGE_FROM_REPOSITORY +images_deps += $(STATEDIR)/ipkg-push +endif + +ifdef PTXCONF_IMAGE_HD_PART1 + GENHDIMARGS = -p $(PTXCONF_IMAGE_HD_PART1_START):$(PTXCONF_IMAGE_HD_PART1_END):$(PTXCONF_IMAGE_HD_PART1_TYPE):$(IMAGEDIR)/root.ext2 +endif +ifdef PTXCONF_IMAGE_HD_PART2 + GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART2_START):$(PTXCONF_IMAGE_HD_PART2_END):$(PTXCONF_IMAGE_HD_PART2_TYPE): +endif +ifdef PTXCONF_IMAGE_HD_PART3 + GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART3_START):$(PTXCONF_IMAGE_HD_PART3_END):$(PTXCONF_IMAGE_HD_PART3_TYPE): +endif +ifdef PTXCONF_IMAGE_HD_PART4 + GENHDIMARGS += -p $(PTXCONF_IMAGE_HD_PART4_START):$(PTXCONF_IMAGE_HD_PART4_END):$(PTXCONF_IMAGE_HD_PART4_TYPE): +endif +ifdef PTXCONF_GRUB + GENHDIMARGS += -m $(GRUB_DIR)/stage1/stage1 + GENHDIMARGS += -n $(GRUB_DIR)/stage2/stage2 +endif + +# +# generate the list of source permission files +# +PERMISSION_FILES := $(foreach pkg, $(PACKAGES-y), $(wildcard $(STATEDIR)/$(pkg)*.perms)) + +# +# list of all ipkgs being selected for the root image +# +IPKG_FILES := $(foreach pkg, $(PACKAGES-y), $(wildcard $(PKGDIR)/$(pkg)*.ipk)) + +# +# create one file with all permissions from all permission source files +# +$(IMAGEDIR)/permissions: $(PERMISSION_FILES) $(PTXCONFIG) + @cat $^ > $@ + +# +# to extract the ipkgs we need a dummy config file +# +$(IMAGEDIR)/ipkg.conf: + @echo -e "dest root /\narch $(PTXCONF_ARCH_STRING) 10\narch all 1\narch noarch 1\n" > $@ + +# +# Working directory to create any kind of image +# +WORKDIR := $(IMAGEDIR)/work_dir + +# +# Create architecture type for mkimge +# Most architectures are working with label $(PTXCONF_ARCH_STRING) +# but the i386 family needs "x86" instead! +# +ifeq ($(PTXCONF_ARCH_STRING),"i386") +MKIMAGE_ARCH := x86 +else +MKIMAGE_ARCH := $(PTXCONF_ARCH_STRING) +endif + +# +# Define what images should be build +# +SEL_ROOTFS-y := +SEL_ROOTFS-$(PTXCONF_IMAGE_TGZ) += $(IMAGEDIR)/root.tgz +SEL_ROOTFS-$(PTXCONF_IMAGE_JFFS2) += $(IMAGEDIR)/root.jffs2 +SEL_ROOTFS-$(PTXCONF_IMAGE_EXT2) += $(IMAGEDIR)/root.ext2 +SEL_ROOTFS-$(PTXCONF_IMAGE_HD) += $(IMAGEDIR)/hd.img +SEL_ROOTFS-$(PTXCONF_IMAGE_EXT2_GZIP) += $(IMAGEDIR)/root.ext2.gz +SEL_ROOTFS-$(PTXCONF_IMAGE_UIMAGE) += $(IMAGEDIR)/uRamdisk +SEL_ROOTFS-$(PTXCONF_IMAGE_CPIO) += $(IMAGEDIR)/initrd.gz + +# +# extract all current ipkgs into the working directory +# +$(STATEDIR)/image_working_dir: $(IPKG_FILES) $(IMAGEDIR)/permissions $(IMAGEDIR)/ipkg.conf + @rm -rf $(WORKDIR) + @mkdir $(WORKDIR) + @echo -n "Extracting ipkg packages into working directory..." + @DESTDIR=$(WORKDIR) $(FAKEROOT) -- $(PTXCONF_SYSROOT_HOST)/bin/ipkg-cl -f $(IMAGEDIR)/ipkg.conf -o $(WORKDIR) install $(IPKG_FILES) 2>&1 >/dev/null + @$(call touch, $@) + +# +# create the root.tgz image +# +$(IMAGEDIR)/root.tgz: $(STATEDIR)/image_working_dir + @echo -n "Creating root.tgz from working dir..." + @cd $(WORKDIR); \ + (awk -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ + ( echo -n "tar -zcf "; \ + echo -n "$@ ." ) \ + ) | $(FAKEROOT) -- + @echo "done." + +# +# create the JFFS2 image +# +$(IMAGEDIR)/root.jffs2: $(STATEDIR)/image_working_dir + @echo -n "Creating root.jffs2 from working dir..." + @cd $(WORKDIR); \ + (awk -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ + ( \ + echo -n "$(PTXCONF_SYSROOT_HOST)/sbin/mkfs.jffs2 "; \ + echo -n "-d $(WORKDIR) "; \ + echo -n "--eraseblock=$(PTXCONF_IMAGE_JFFS2_BLOCKSIZE) "; \ + echo -n "$(PTXCONF_IMAGE_JFFS2_EXTRA_ARGS) "; \ + echo -n "-o $@" ) \ + ) | $(FAKEROOT) -- + @echo "done." + +# +# create the ext2 image +# +$(IMAGEDIR)/root.ext2: $(STATEDIR)/image_working_dir + @echo -n "Creating root.ext2 from working dir..." + @cd $(WORKDIR); \ + (awk -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ + ( \ + echo -n "$(PTXCONF_SYSROOT_HOST)/bin/genext2fs "; \ + echo -n "-b $(PTXCONF_IMAGE_EXT2_SIZE) "; \ + echo -n "$(PTXCONF_IMAGE_EXT2_EXTRA_ARGS) "; \ + echo -n "-d $(WORKDIR) "; \ + echo "$@" ) \ + ) | $(FAKEROOT) -- + @echo "done." + +# +# TODO +# +$(IMAGEDIR)/hd.img: $(IMAGEDIR)/root.ext2 + @echo -n "Creating hdimg from root.ext2"; \ + PATH=$(PTXCONF_SYSROOT_HOST)/bin:$$PATH $(PTXDIST_TOPDIR)/scripts/genhdimg \ + -o $@ $(GENHDIMARGS) + @echo "done." + +# +# TODO +# +$(IMAGEDIR)/root.ext2.gz: $(IMAGEDIR)/root.ext2 + @echo -n "Creating root.ext2.gz from root.ext2..."; + @rm -f $@ + @cat $< | gzip -v9 > $@ + @echo "done." + +# +# TODO +# +$(IMAGEDIR)/uRamdisk: $(IMAGEDIR)/root.ext2.gz + @echo -n "Creating U-Boot ramdisk from root.ext2.gz..."; + @$(PTXCONF_SYSROOT_HOST)/bin/mkimage \ + -A $(MKIMAGE_ARCH) \ + -O Linux \ + -T ramdisk \ + -C gzip \ + -n $(PTXCONF_IMAGE_UIMAGE_NAME) \ + -d $< \ + $@ + @echo "done." + +# +# create traditional initrd.gz, to be used +# as initramfs (-> "-H newc") +# +$(IMAGEDIR)/initrd.gz: $(STATEDIR)/image_working_dir + @echo -n "Creating initrd.gz from working dir..." + @cd $(WORKDIR); \ + (awk -F: $(DOPERMISSIONS) $(IMAGEDIR)/permissions && \ + ( \ + echo "find . | "; \ + echo "cpio --quiet -H newc -o | "; \ + echo "gzip -9 -n > $@" ) \ + ) | $(FAKEROOT) -- + @echo "done." + +# +# TODO: Find a way to always find the correct zipped kernel image on every +# architecture. +# +#$(IMAGEDIR)/muimage: $(IMAGEDIR)/initrd.gz $(KERNEL_DIR)/??????? +# @echo -n "Creating multi content uimage..." +# @$(PTXCONF_SYSROOT_HOST)/bin/mkimage -A $(PTXCONF_ARCH_STRING) \ +# -O Linux -T multi -C gzip -a 0 -e 0 \ +# -n 'Multi-File Image' \ +# -d $(KERNEL_DIR)/vmlinux.bin.gz:$(IMAGEDIR)/initrd.img \ +# $(IMAGEDIR)/muimage +# @echo "done." + +# +# create all requested images and clean up when done +# +$(STATEDIR)/images: $(SEL_ROOTFS-y) $(images_deps) + @echo "Clean up temp working directory" + @rm -rf $(WORKDIR) $(STATEDIR)/image_working_dir + @$(call touch, $@) + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: diff --git a/rules/post/mk-devnodes.make b/rules/post/mk-devnodes.make new file mode 100644 index 000000000..a6b7c5108 --- /dev/null +++ b/rules/post/mk-devnodes.make @@ -0,0 +1,44 @@ +# -*-makefile-*- + +PTX_FIXPERM_SCRIPT := $(STATEDIR)/ptxdist-fixperm.sh +PTX_FIXPERM_RUN := $(STATEDIR)/ptxdist-fixperm.done + +ifdef PTXCONF_MKDEVNODES +world: $(PTX_FIXPERM_RUN) +endif + +$(PTX_FIXPERM_RUN): $(PTX_FIXPERM_SCRIPT) + @echo; \ + echo "creating devnodes, for the smooth nfsroot feeling"; \ + echo; \ + read -t 5 -p "(press enter to let sudo to that job)"; \ + if test $$? -eq 0; then \ + for dir in "$(ROOTDIR)" "$(ROOTDIR_DEBUG)"; do \ + pushd "$$dir" > /dev/null; \ + sudo /bin/bash -x "$<"; \ + popd > /dev/null; \ + done; \ + else \ + echo; \ + echo "watch out for missing initial consoles..."; \ + echo; \ + fi + + +$(PTX_FIXPERM_SCRIPT): world_packages + @echo "#/bin/bash" > "$@" + @chmod +x "$@" + + @IFS=":"; \ + ( \ + egrep "^n:" -h $(STATEDIR)/*.perms | \ + while read n node uid gid perm type major minor; do \ + node="$${node#/}"; \ + echo "if test -e $$node; then rm -rf $$node; fi"; \ + echo "mknod $$node $$type $$major $$minor"; \ + echo "chown $$uid:$$gid $$node"; \ + echo "chmod $$perm $$node"; \ + done; \ + ) >> "$@" + +# vim: syntax=make diff --git a/rules/post/plugins.make b/rules/post/plugins.make new file mode 100644 index 000000000..b84d21e52 --- /dev/null +++ b/rules/post/plugins.make @@ -0,0 +1,20 @@ +# -*-makefile-*- + +plugins: + @echo "Installed Plugins:" + @echo $(wildcard $(PTXDIST_TOPDIR)/plugins/*) + +plugin-%: dump + @echo "trying plugin $(*)" + @if [ -x "$(PTXDIST_WORKSPACE)/plugins/$(*)/main" ]; then \ + echo "local plugin found."; \ + $(PTXDIST_WORKSPACE)/plugins/$(*)/main; \ + elif [ -x "$(PTXDIST_TOPDIR)/plugins/$(*)/main" ]; then \ + echo "generic plugin found."; \ + $(PTXDIST_TOPDIR)/plugins/$(*)/main; \ + else \ + echo "sorry, plugin not found"; \ + fi + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: diff --git a/rules/post/simulation.make b/rules/post/simulation.make new file mode 100644 index 000000000..169b1fc1a --- /dev/null +++ b/rules/post/simulation.make @@ -0,0 +1,32 @@ +# -*-makefile-*- + +# ---------------------------------------------------------------------------- +# Simulation +# ---------------------------------------------------------------------------- + +uml_cmdline= +ifdef PTXCONF_KERNEL_HOST_ROOT_HOSTFS +uml_cmdline += root=/dev/root rootflags=$(ROOTDIR) rootfstype=hostfs +endif +ifdef PTXCONF_KERNEL_HOST_CONSOLE_STDSERIAL +uml_cmdline += ssl0=fd:0,fd:1 +endif +#uml_cmdline += eth0=slirp +uml_cmdline += $(PTXCONF_KERNEL_HOST_CMDLINE) + +run: world + @$(call targetinfo, "Run Simulation") +ifdef NATIVE + @echo "starting Linux..." + @echo + @$(ROOTDIR)/boot/linux $(call remove_quotes,$(uml_cmdline)) +else + @echo + @echo "cannot run simulation if not in NATIVE=1 mode" + @echo + @exit 1 +endif + + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: diff --git a/rules/post/world.make b/rules/post/world.make new file mode 100644 index 000000000..00afc0d07 --- /dev/null +++ b/rules/post/world.make @@ -0,0 +1,35 @@ +# -*-makefile-*- + +DEP_OUTPUT := $(PTXDIST_PLATFORMDIR)/depend.out +DEP_TREE_PS := $(PTXDIST_PLATFORMDIR)/deptree.ps +DEP_TREE_A4_PS := $(PTXDIST_PLATFORMDIR)/deptree-a4.ps + +WORLD_PACKAGES_TARGETINSTALL := $(addsuffix _targetinstall,$(PACKAGES)) +WORLD_HOST_PACKAGES_INSTALL := $(addsuffix _install,$(HOST_PACKAGES)) +WORLD_CROSS_PACKAGES_INSTALL := $(addsuffix _install,$(CROSS_PACKAGES)) + +ifneq ($(shell which dot),) +world: $(DEP_TREE_PS) + ifneq ($(shell which poster),) +world: $(DEP_TREE_A4_PS) + endif #ifneq ($(shell which poster),) +endif #ifneq ($(shell which dot),) + +$(DEP_TREE_A4_PS): $(DEP_TREE_PS) + @echo "creating A4 version..." + @poster -v -c 0\% -m A4 -o $@ $< + +$(DEP_TREE_PS): $(DEP_OUTPUT) + @echo "creating dependency graph..." + @sort $< | uniq | \ + $(PTXDIST_TOPDIR)/scripts/makedeptree | dot -Tps > $@ + +world_packages: $(WORLD_PACKAGES_TARGETINSTALL) \ + $(WORLD_HOST_PACKAGES_INSTALL) \ + $(WORLD_CROSS_PACKAGES_INSTALL) + @echo $@ : $^ | sed -e 's/\([^ ]*\)_\([^_]*\)/\1.\2/g' >> $(DEP_OUTPUT) + +world: world_packages + +# vim600:set foldmethod=marker: +# vim600:set syntax=make: |