summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Schieli <cschieli@gmail.com>2010-04-11 14:21:09 +0000
committerCedric Schieli <cschieli@gmail.com>2010-04-11 14:21:09 +0000
commit06eb06270e98e294457a128d3a4f97c2289cfa40 (patch)
tree030f34274dbd98f8b0bb80d64963ef8464781cc6
parentde0ecc9a3fcea3fef737b4f731d799eff9c960e2 (diff)
downloadalpine-iso-06eb06270e98e294457a128d3a4f97c2289cfa40.tar.bz2
alpine-iso-06eb06270e98e294457a128d3a4f97c2289cfa40.tar.xz
Makefile: allow multiple kernel on iso
-rwxr-xr-xMakefile118
1 files changed, 70 insertions, 48 deletions
diff --git a/Makefile b/Makefile
index aca76e8..cf85a5c 100755
--- a/Makefile
+++ b/Makefile
@@ -30,12 +30,12 @@ find_apk = $(addprefix $(ISO_PKGDIR)/,$(call find_apk_file,$(1)))
get_apk = $(addsuffix .apk,$(shell apk fetch --simulate $(APK_OPTS) $(1) 2>&1 | sed 's:^Downloading :$(ISO_PKGDIR)/:'))
expand_apk = $(shell apk search --quiet $(APK_OPTS) $(1) | sort | uniq)
-KERNEL_FLAVOR ?= grsec
-KERNEL_PKGNAME ?= linux-$(KERNEL_FLAVOR)
-KERNEL_NAME := $(KERNEL_FLAVOR)
-KERNEL_APK := $(call get_apk,$(KERNEL_PKGNAME))
+KERNEL_FLAVOR_DEFAULT ?= grsec
+KERNEL_FLAVOR ?= $(KERNEL_FLAVOR_DEFAULT)
+KERNEL_PKGNAME = linux-$*
+KERNEL_APK = $(call get_apk,$(KERNEL_PKGNAME))
-KERNEL := $(word 3,$(subst -, ,$(notdir $(KERNEL_APK))))-$(word 2,$(subst -, ,$(notdir $(KERNEL_APK))))
+KERNEL = $(word 3,$(subst -, ,$(notdir $(KERNEL_APK))))-$(word 2,$(subst -, ,$(notdir $(KERNEL_APK))))
ALPINEBASELAYOUT_APK := $(call find_apk,alpine-baselayout)
UCLIBC_APK := $(call get_apk,uclibc)
@@ -73,10 +73,9 @@ endif
@echo "KERNEL: $(KERNEL)"
@echo
-clean:
- rm -rf $(MODLOOP) $(MODLOOP_DIR) $(MODLOOP_DIRSTAMP) \
- $(INITFS) $(INITFS_DIRSTAMP) $(INITFS_DIR) \
- $(ISO_DIR) $(ISO_REPOS_DIRSTAMP)
+clean: clean-modloop clean-initfs
+ rm -rf $(ISO_DIR) $(ISO_REPOS_DIRSTAMP) $(ISOFS_DIRSTAMP) \
+ $(ALL_ISO_KERNEL)
$(APK_FILES):
@@ -89,14 +88,20 @@ $(APK_FILES):
#
# Modloop
#
-MODLOOP := $(ISO_DIR)/boot/$(KERNEL_NAME).cmg
-MODLOOP_DIR := $(DESTDIR)/modloop
-MODLOOP_KERNELSTAMP := $(DESTDIR)/stamp.modloop.kernel
-MODLOOP_DIRSTAMP := $(DESTDIR)/stamp.modloop
-MODLOOP_EXTRA ?= $(addsuffix -$(KERNEL_FLAVOR), dahdi-linux iscsitarget xtables-addons)
+MODLOOP := $(ISO_DIR)/boot/%.cmg
+MODLOOP_DIR = $(DESTDIR)/modloop.$*
+MODLOOP_KERNELSTAMP := $(DESTDIR)/stamp.modloop.kernel.%
+MODLOOP_DIRSTAMP := $(DESTDIR)/stamp.modloop.%
+MODLOOP_EXTRA ?= $(addsuffix -$*, dahdi-linux iscsitarget xtables-addons)
MODLOOP_PKGS = $(KERNEL_PKGNAME) $(MODLOOP_EXTRA)
-modloop: $(MODLOOP)
+modloop-%: $(MODLOOP)
+ @:
+
+ALL_MODLOOP = $(foreach flavor,$(KERNEL_FLAVOR),$(subst %,$(flavor),$(MODLOOP)))
+ALL_MODLOOP_DIRSTAMP = $(foreach flavor,$(KERNEL_FLAVOR),$(subst %,$(flavor),$(MODLOOP_DIRSTAMP)))
+
+modloop: $(ALL_MODLOOP)
$(MODLOOP_KERNELSTAMP):
@echo "==> modloop: Unpacking kernel modules";
@@ -106,22 +111,24 @@ $(MODLOOP_KERNELSTAMP):
apk fetch $(APK_OPTS) --stdout $$i \
| tar -C $(MODLOOP_DIR) -xz; \
done
- @cp $(MODLOOP_DIR)/usr/share/kernel/$(KERNEL_FLAVOR)/kernel.release $@
+ @cp $(MODLOOP_DIR)/usr/share/kernel/$*/kernel.release $@
-MODLOOP_KERNEL_RELEASE = $(shell cat $(MODLOOP_KERNELSTAMP))
+MODLOOP_KERNEL_RELEASE = $(shell cat $(subst %,$*,$(MODLOOP_KERNELSTAMP)))
$(MODLOOP_DIRSTAMP): $(MODLOOP_KERNELSTAMP)
@rm -rf $(addprefix $(MODLOOP_DIR)/lib/modules/*/, source build)
@depmod $(MODLOOP_KERNEL_RELEASE) -b $(MODLOOP_DIR)
- @touch $(MODLOOP_DIRSTAMP)
+ @touch $@
$(MODLOOP): $(MODLOOP_DIRSTAMP)
- @echo "==> modloop: building image $(notdir $(MODLOOP))"
- @mkdir -p $(dir $(MODLOOP))
- @$(MKCRAMFS) $(MODLOOP_DIR)/lib $(MODLOOP)
+ @echo "==> modloop: building image $(notdir $@)"
+ @mkdir -p $(dir $@)
+ @$(MKCRAMFS) $(MODLOOP_DIR)/lib $@
-clean-modloop:
- @rm -rf $(MODLOOP_DIR) $(MODLOOP_DIRSTAMP) $(MODLOOP_PKGSTAMP) $(MODLOOP)
+clean-modloop-%:
+ @rm -rf $(MODLOOP_DIR) $(subst %,$*,$(MODLOOP_DIRSTAMP) $(MODLOOP_KERNELSTAMP) $(MODLOOP))
+
+clean-modloop: $(addprefix clean-modloop-,$(KERNEL_FLAVOR))
#
# Initramfs rules
@@ -129,16 +136,21 @@ clean-modloop:
# isolinux cannot handle - in filenames
#INITFS_NAME := initramfs-$(MODLOOP_KERNEL_RELEASE)
-INITFS_NAME := $(KERNEL_FLAVOR).gz
+INITFS_NAME := %.gz
INITFS := $(ISO_DIR)/boot/$(INITFS_NAME)
-INITFS_DIR := $(DESTDIR)/initfs
-INITFS_TMP := $(DESTDIR)/tmp.initfs
-INITFS_DIRSTAMP := $(DESTDIR)/stamp.initfs
+INITFS_DIR = $(DESTDIR)/initfs.$*
+INITFS_TMP = $(DESTDIR)/tmp.initfs.$*
+INITFS_DIRSTAMP := $(DESTDIR)/stamp.initfs.%
INITFS_FEATURES := ata base bootchart cdrom cramfs ext3 floppy raid scsi usb
-INITFS_PKGS := $(MODLOOP_PKGS) alpine-base acct
+INITFS_PKGS = $(MODLOOP_PKGS) alpine-base acct
+
+initfs-%: $(INITFS)
+ @:
-initfs: $(INITFS)
+ALL_INITFS = $(foreach flavor,$(KERNEL_FLAVOR),$(subst %,$(flavor),$(INITFS)))
+
+initfs: $(ALL_INITFS)
$(INITFS_DIRSTAMP):
@rm -rf $(INITFS_DIR) $(INITFS_TMP)
@@ -156,8 +168,10 @@ $(INITFS): $(INITFS_DIRSTAMP) $(MODLOOP_DIRSTAMP)
@mkinitfs -F "$(INITFS_FEATURES)" -t $(INITFS_TMP) \
-b $(INITFS_DIR) -o $@ $(MODLOOP_KERNEL_RELEASE)
-clean-initfs:
- @rm -rf $(INITFS) $(INITFS_DIRSTAMP) $(INITFS_DIR)
+clean-initfs-%:
+ @rm -rf $(subst %,$*,$(INITFS) $(INITFS_DIRSTAMP)) $(INITFS_DIR)
+
+clean-initfs: $(addprefix clean-initfs-,$(KERNEL_FLAVOR))
#
# Vserver template rules
@@ -196,26 +210,31 @@ $(ISOLINUX_BIN):
$(ISOLINUX_CFG):
@echo "==> iso: configure isolinux"
@mkdir -p $(dir $(ISOLINUX_BIN))
- @echo "timeout 20" >$(ISOLINUX_CFG)
- @echo "prompt 1" >>$(ISOLINUX_CFG)
- @echo "default $(KERNEL_NAME)" >>$(ISOLINUX_CFG)
- @echo "label $(KERNEL_NAME)" >>$(ISOLINUX_CFG)
- @echo " kernel /boot/$(KERNEL_NAME)" >>$(ISOLINUX_CFG)
- @echo " append initrd=/boot/$(INITFS_NAME) alpine_dev=cdrom:iso9660 modules=loop,cramfs,sd-mod,usb-storage,floppy quiet" >>$(ISOLINUX_CFG)
-
-$(SYSLINUX_CFG): $(MODLOOP_DIRSTAMP)
+ @echo "timeout 20" >$@
+ @echo "prompt 1" >>$@
+ @echo "default $(KERNEL_FLAVOR_DEFAULT)" >>$@
+ @for flavor in $(KERNEL_FLAVOR); do \
+ echo "label $$flavor"; \
+ echo " kernel /boot/$$flavor"; \
+ echo " append initrd=/boot/$$flavor.gz alpine_dev=cdrom:iso9660 modules=loop,cramfs,sd-mod,usb-storage,floppy quiet"; \
+ done >>$@
+
+$(SYSLINUX_CFG): $(ALL_MODLOOP_DIRSTAMP)
@echo "==> iso: configure syslinux"
@echo "timeout 20" >$@
@echo "prompt 1" >>$@
- @echo "default $(KERNEL_NAME)" >>$@
- @echo "label $(KERNEL_NAME)" >>$@
- @echo " kernel /boot/$(KERNEL_NAME)" >>$@
- @echo " append initrd=/boot/$(INITFS_NAME) alpine_dev=usbdisk:vfat modules=loop,cramfs,sd-mod,usb-storage quiet" >>$@
+ @echo "default $(KERNEL_FLAVOR_DEFAULT)" >>$@
+ @for flavor in $(KERNEL_FLAVOR); do \
+ echo "label $$flavor"; \
+ echo " kernel /boot/$$flavor"; \
+ echo " append initrd=/boot/$$flavor.gz alpine_dev=usbdisk:vfat modules=loop,cramfs,sd-mod,usb-storage quiet"; \
+ done >>$@
clean-syslinux:
@rm -f $(SYSLINUX_CFG) $(ISOLINUX_CFG) $(ISOLINUX_BIN)
-ISO_KERNEL := $(ISO_DIR)/boot/$(KERNEL_NAME)
+ISO_KERNEL_STAMP := $(DESTDIR)/stamp.kernel.%
+ISO_KERNEL = $(ISO_DIR)/boot/$*
ISO_REPOS_DIRSTAMP := $(DESTDIR)/stamp.isorepos
ISOFS_DIRSTAMP := $(DESTDIR)/stamp.isofs
@@ -230,17 +249,19 @@ $(ISO_PKGDIR)/APKINDEX.tar.gz: $(APK_FILES)
-o $@ $(ISO_PKGDIR)/*.apk
@abuild-sign $@
-$(ISO_KERNEL): $(MODLOOP_DIRSTAMP)
+$(ISO_KERNEL_STAMP): $(MODLOOP_DIRSTAMP)
@echo "==> iso: install kernel $(KERNEL)"
@mkdir -p $(dir $(ISO_KERNEL))
@apk fetch $(APK_OPTS) --stdout $(KERNEL_PKGNAME) \
| tar -C $(ISO_DIR) -xz boot
- @rm -f $(ISO_DIR)/boot/$(KERNEL_NAME)
- @ln -s vmlinuz-$(MODLOOP_KERNEL_RELEASE) $@
+ @rm -f $(ISO_KERNEL)
+ @ln -s vmlinuz-$(MODLOOP_KERNEL_RELEASE) $(ISO_KERNEL)
@rm -rf $(ISO_DIR)/.[A-Z]* $(ISO_DIR)/.[a-z]* $(ISO_DIR)/lib
@touch $@
-$(ISOFS_DIRSTAMP): $(MODLOOP) $(INITFS) $(ISOLINUX_CFG) $(ISOLINUX_BIN) $(ISO_KERNEL) $(ISO_REPOS_DIRSTAMP) $(SYSLINUX_CFG)
+ALL_ISO_KERNEL = $(foreach flavor,$(KERNEL_FLAVOR),$(subst %,$(flavor),$(ISO_KERNEL_STAMP)))
+
+$(ISOFS_DIRSTAMP): $(ALL_MODLOOP) $(ALL_INITFS) $(ISOLINUX_CFG) $(ISOLINUX_BIN) $(ALL_ISO_KERNEL) $(ISO_REPOS_DIRSTAMP) $(SYSLINUX_CFG)
@echo "$(ALPINE_NAME)-$(ALPINE_RELEASE) $(BUILD_DATE)" \
> $(ISO_DIR)/.alpine-release
@touch $@
@@ -343,3 +364,4 @@ all-release: current previous $(profiles)
PROFILE=$$p release || break; \
done
+.PRECIOUS: $(MODLOOP_KERNELSTAMP) $(MODLOOP_DIRSTAMP) $(INITFS_DIRSTAMP) $(INITFS) $(ISO_KERNEL_STAMP)