
ARCH = i386
#ARCH = x86_64

# values must be separeted by ' ' and  last character must be ' '
KNOWN_ARCH = "i386 x86_64 "

XEN =
#XEN = 0
#XEN = U

MKFS_EXT2 = /sbin/mkfs.ext2
TUNE2FS   = /sbin/tune2fs
SPLASH    = /sbin/splash

RDSIZE = 25M

MODULES_i386   = modules/modules.squash-2.6.12.6-viver14
MODULES_x86_64 = modules/dummy_does_not_exist
MODULES_xen0   = modules/dummy_does_not_exist
MODULES_xenU   = modules/modules.squash-2.6.12.1-xenUts4
MODULES_Unknown_Architecture = modules/dummy_Unknown_Architecture

SPLASH_CFG_IN = bootsplash/bootsplash-viver.cfg.in
SPLASH_CFG    = bootsplash/bootsplash-viver.cfg

CUTOUT_CHAR = .

ifeq ($(findstring $(ARCH) ,$(KNOWN_ARCH)),)
	override ARCH = Unknown_Architecture
endif

ifeq ($(XEN),U)
	MODULES = $(MODULES_xenU)
	LIBXEN = _xen
endif
ifeq ($(XEN),0)
	MODULES = $(MODULES_xen0)
	LIBXEN = _xen
endif
ifndef XEN
	MODULES = $(MODULES_$(ARCH))
	LIBXEN = 
endif

TOPLEVEL = COPYING \
	   VIVER \
	   bin$(CUTOUT_CHAR)$(ARCH) \
	   cow \
	   cowbase \
	   dev \
	   disk \
	   empty \
	   errormsg \
	   etc \
	   lib$(CUTOUT_CHAR)$(ARCH)$(LIBXEN) \
	   linuxrc \
	   looproot \
	   proc \
	   run \
	   sparse \
	   sys \
	   sysroot \
	   usr \
	   viver
#	   sbin  # make in viverrd.gz:

NODE  = 600,console,c,5,1 \
	660,nbd0,b,43,0 666,null,c,1,3 \
	666,random,c,1,8 \
	640,cow/ctol,b,241,255 \
	660,mapper/control,c,10,63 \
	660,loop{"0,b,7,0","1,b,7,1","2,b,7,2"} \
	600,tty{"1,c,4,1","2,c,4,2","3,c,4,3","4,c,4,4"}

OWNER = root:root,. \
	root:disk,dev/nbd0 \
	root:disk,dev/loop{0,1,2}

usage:
	@echo "To make initrd(viverrd.gz), run \`sudo make viverrd.gz\`."

viverrd.gz: $(TOPLEVEL) $(MODULES) $(SPLASH_CFG_IN)
	mkdir viverrd.d || true  # ignore error
	dd if=/dev/null of=viverrd bs=1 count=1 seek=$(RDSIZE)
	$(MKFS_EXT2) -q -m0 -F -s 1 viverrd
	$(TUNE2FS) -i0 viverrd
	mount viverrd viverrd.d -o loop
	tar --exclude=".svn" -cf - $(TOPLEVEL) | (cd viverrd.d && tar -xf -)
	for f in $(TOPLEVEL);do \
		if [ "$$f" != "$${f%%$(CUTOUT_CHAR)*}" ];then mv viverrd.d/$$f viverrd.d/$${f%%$(CUTOUT_CHAR)*}; fi; \
		done
	cp $(MODULES) viverrd.d/modules.squash
	(cd viverrd.d && ln -s bin sbin)
	(cd viverrd.d/dev && \
		for n in $(NODE);do mknod -m `echo $$n | tr ',' ' '`;done)
	(cd viverrd.d && \
		for w in $(OWNER);do chown -R `echo $$w | tr ',' ' '`; done)
	umount viverrd.d
	gzip -9 viverrd
	sed -e "s|@@PWD@@|`pwd`|g" $(SPLASH_CFG_IN) > $(SPLASH_CFG)
	$(SPLASH) -s -f $(SPLASH_CFG) >> viverrd.gz

.PHONY: clean
clean:
	rm -f $(SPLASH_CFG)
	rm -rf viverrd.d viverrd.gz viverrd

