#!/usr/bin/make

KERNEL_DIR=/usr/src/linux

ifdef APPSONLY
CFLAGS:=-Wall -Wstrict-prototypes -Wno-trigraphs -O2 -s -I. -fno-strict-aliasing -fno-common -fomit-frame-pointer 
else
include $(KERNEL_DIR)/.config
include $(KERNEL_DIR)/conf.vars
endif

CKERNOPS:=-D__KERNEL__ -DMODULE -fno-builtin -nostdlib -DKBUILD_MODNAME="cloop" -DKBUILD_BASENAME="cloop"

ifdef CONFIG_MODVERSIONS
MODVERSIONS:= -DMODVERSIONS -include $(KERNEL_DIR)/include/linux/modversions.h
CKERNOPS += $(MODVERSIONS)
endif

# Check for SMP in config and #define __SMP__ if necessary.
# This is ESSENTIAL when compiling a SMP version of cloop.o
# Otherwise, the module will block the entire block buffer management on read.

ifdef CONFIG_SMP
CKERNOPS += -D__SMP__
endif

KERNOBJ:=compressed_loop.o

# Name of module
ifeq ($(PATCHLEVEL),6)
MODULE:=cloop.ko
else
MODULE:=cloop.o
endif

ALL_TARGETS = create_compressed_fs extract_compressed_fs
ifndef APPSONLY
ALL_TARGETS += $(MODULE)
endif

all: $(ALL_TARGETS)

$(MODULE): compressed_loop.o
	@echo "Building for Kernel Patchlevel $(PATCHLEVEL)"
	$(LD) -r -o $@ $^
#Old:	$(CC) -o $@ $< -lz

create_compressed_fs: advancecomp-1.9_create_compressed_fs/advfs
	ln -f $< $@

advancecomp-1.9_create_compressed_fs/advfs:
	( $(MAKE) -C advancecomp-1.9_create_compressed_fs advfs )


extract_compressed_fs: extract_compressed_fs.o
	$(CC) -o $@ $< -lz

clean:
	rm -f $(KERNOBJ) create_compressed_fs extract_compressed_fs zoom *.o *.ko
	$(MAKE) -C advancecomp-1.9_create_compressed_fs clean

dist: clean
	cd .. ; \
	tar -cf - cloop/{Makefile,*.[ch],CHANGELOG,README} | \
	bzip2 -9 > $(HOME)/redhat/SOURCES/cloop.tar.bz2

# There must be a better way to handle this
$(KERNOBJ): %.o : %.c
	$(CC) -I$(KERNEL_DIR)/include -I$(KERNEL_DIR)/include/asm/mach-default $(CFLAGS) $(CKERNOPS) $< -c -o $@

compressed_loop.o create_compressed_fs.o: compressed_loop.h
