summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--platforms/image-root-ext.in4
-rw-r--r--rules/image-root-ext.make14
2 files changed, 14 insertions, 4 deletions
diff --git a/platforms/image-root-ext.in b/platforms/image-root-ext.in
index e5e8ba766..903bdf33d 100644
--- a/platforms/image-root-ext.in
+++ b/platforms/image-root-ext.in
@@ -14,10 +14,12 @@ if IMAGE_ROOT_EXT
config IMAGE_ROOT_EXT_SIZE
string
- default "20M"
+ default "125%"
prompt "image size"
help
The image size in bytes or with unit, e.g. 42M, 23G, etc.
+ or as a percentage of the content, e.g. 200% will result in a
+ filesystem with about 50% free space.
choice
prompt "ext2fs type "
diff --git a/rules/image-root-ext.make b/rules/image-root-ext.make
index 20b2bfe33..20a417fbd 100644
--- a/rules/image-root-ext.make
+++ b/rules/image-root-ext.make
@@ -21,14 +21,22 @@ IMAGE_ROOT_EXT_DIR := $(BUILDDIR)/$(IMAGE_ROOT_EXT)
IMAGE_ROOT_EXT_IMAGE := $(IMAGEDIR)/root.ext2
IMAGE_ROOT_EXT_FILES := $(IMAGEDIR)/root.tgz
IMAGE_ROOT_EXT_CONFIG := ext.config
+IMAGE_ROOT_EXT_SIZE := $(call remove_quotes,$(PTXCONF_IMAGE_ROOT_EXT_SIZE))
# ----------------------------------------------------------------------------
# Image
# ----------------------------------------------------------------------------
-IMAGE_ROOT_EXT_ENV := \
- SIZE=$(PTXCONF_IMAGE_ROOT_EXT_SIZE) \
- EXT_TYPE=$(PTXCONF_IMAGE_ROOT_EXT_TYPE)
+IMAGE_ROOT_EXT_ENV = EXT_TYPE=$(PTXCONF_IMAGE_ROOT_EXT_TYPE)
+ifeq ($(filter %%,$(IMAGE_ROOT_EXT_SIZE)),)
+IMAGE_ROOT_EXT_ENV += SIZE=$(PTXCONF_IMAGE_ROOT_EXT_SIZE)
+else
+IMAGE_ROOT_EXT_BASE := $$(tar -xOf $(IMAGE_ROOT_EXT_FILES) | wc -c)
+# 80 seems to be a good number to take fs overhead into account
+IMAGE_ROOT_EXT_SCALE := $(subst %,,$(IMAGE_ROOT_EXT_SIZE))/80/1024/1024
+IMAGE_ROOT_EXT_ENV += \
+ SIZE="$(shell echo $$(($(IMAGE_ROOT_EXT_BASE)*$(IMAGE_ROOT_EXT_SCALE)+1))M)"
+endif
ifdef PTXCONF_IMAGE_ROOT_EXT
$(IMAGE_ROOT_EXT_IMAGE):