CONFIG_COMPRESS=yes
#CONFIG_ENCRYPT=yes

ARCH:=$(shell uname -m)

CC_FLAGS=-g -I/usr/local/include
LD_FLAGS=-L/usr/local/lib

ifdef CONFIG_COMPRESS
CC_FLAGS	+= -Ilzf -DCONFIG_COMPRESS
LD_FLAGS	+= -Llzf -llzf
endif
ifdef CONFIG_ENCRYPT
GCRYPT_CC_FLAGS := $(shell libgcrypt-config --cflags)
GCRYPT_LD_FLAGS := $(shell libgcrypt-config --libs)
CC_FLAGS	+= -DCONFIG_ENCRYPT
CC_FLAGS	+= $(GCRYPT_CC_FLAGS)
LD_FLAGS	+= $(GCRYPT_LD_FLAGS)
endif

SPLASHOBJ=splash.o

SUSPEND_DIR=/usr/local/sbin
CONFIG_DIR=/etc
RESUME_DEVICE=<path_to_resume_device_file>
BOOT_DIR=/boot

S2DISK=s2disk
CONFIGFILE=suspend.conf

ifdef CONFIG_ENCRYPT
all: $(S2DISK) suspend-keygen resume
else
all: lzf $(S2DISK) resume
endif

clean:
	rm -f $(S2DISK) suspend-keygen suspend.keys resume s2ram *.o lzf/*.o lzf/*.a 

s2ram:	s2ram.c dmidecode.c whitelist.c radeontool.c $(S2RAMOBJ)
	$(CC) -g -Wall -O2 s2ram.c $(S2RAMOBJ) -lpci -o s2ram

vbetool/vbetool.o:	vbetool/vbetool.c
	$(CC) -Wall -O2 -DS2RAM -c vbetool/vbetool.c -o vbetool/vbetool.o

vbetool/lrmi.o:	vbetool/lrmi.c
	$(CC) -Wall -O2 -c vbetool/lrmi.c -o vbetool/lrmi.o

vbetool/x86-common.o:	vbetool/x86-common.c
	$(CC) -Wall -O2 -c vbetool/x86-common.c -o vbetool/x86-common.o

vbetool/x86emu/libx86emu.a:
	make -C vbetool/x86emu -f makefile.linux

vbetool/thunk.o:	vbetool/thunk.c
	$(CC) -Wall -O2 -c vbetool/thunk.c -o vbetool/thunk.o

dmidecode.o:	dmidecode.c
	$(CC) -Wall -O2 -DS2RAM -c dmidecode.c -o dmidecode.o

radeontool.o:	radeontool.c
	$(CC) -Wall -O2 -DS2RAM -c radeontool.c -o radeontool.o

md5.o:	md5.c md5.h
	$(CC) -Wall -o md5.o -DHAVE_INTTYPES_H -DHAVE_STDINT_H -c md5.c

encrypt.o:	encrypt.c encrypt.h md5.h
	$(CC) -Wall -DHAVE_INTTYPES_H -DHAVE_STDINT_H $(CC_FLAGS) -c encrypt.c

config.o:	config.c config.h
	$(CC) -Wall $(CC_FLAGS) -c config.c

vt.o:	vt.c vt.h
	$(CC) -Wall -c vt.c

lzf/liblzf.a:
	make -C lzf

$(S2DISK):	lzf/liblzf.a vt.o md5.o encrypt.o config.o suspend.c swsusp.h config.h encrypt.h md5.h $(SPLASHOBJ)
	$(CC) -g -O2 -Wall $(CC_FLAGS) vt.o md5.o encrypt.o config.o suspend.c -o $@ $(SPLASHOBJ) $(LD_FLAGS) -lusplash

$(S2BOTH):	md5.o encrypt.o config.o suspend.c swsusp.h config.h encrypt.h md5.h s2ram.c dmidecode.c whitelist.c radeontool.c $(S2RAMOBJ) $(SPLASHOBJ)
	$(CC) -g -O2 -DCONFIG_BOTH -Wall $(CC_FLAGS) md5.o encrypt.o config.o suspend.c s2ram.c -o $@ $(S2RAMOBJ) $(SPLASHOBJ) $(LD_FLAGS) -lpci

resume:	md5.o encrypt.o config.o resume.c swsusp.h config.h encrypt.h md5.h $(SPLASHOBJ)
	$(CC) -Wall $(CC_FLAGS) md5.o encrypt.o config.o vt.o resume.c $(SPLASHOBJ) -o resume $(LD_FLAGS) -lusplash

ifdef CONFIG_ENCRYPT
suspend-keygen:	md5.o keygen.c encrypt.h md5.h
	$(CC) -Wall -DHAVE_INTTYPES_H -DHAVE_STDINT_H $(CC_FLAGS) md5.o keygen.c -o suspend-keygen $(LD_FLAGS)

install-s2disk: $(S2DISK) suspend-keygen conf/$(CONFIGFILE)
	if [ ! -c /dev/snapshot ]; then mknod /dev/snapshot c 10 231; fi
	install --mode=755 suspend-keygen $(DESTDIR)$(SUSPEND_DIR)
	install --mode=755 $(S2DISK) $(DESTDIR)$(SUSPEND_DIR)
	if [ -f $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE) ]; then install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE).new; else install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR); fi

install-suspend: $(S2DISK) $(S2BOTH) suspend-keygen conf/$(CONFIGFILE)
	if [ ! -c /dev/snapshot ]; then mknod /dev/snapshot c 10 231; fi
	install --mode=755 suspend-keygen $(DESTDIR)$(SUSPEND_DIR)
	install --mode=755 $(S2DISK) $(DESTDIR)$(SUSPEND_DIR)
	install --mode=755 $(S2BOTH) $(DESTDIR)$(SUSPEND_DIR)
	if [ -f $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE) ]; then install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE).new; else install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR); fi
	install --mode=755 s2ram $(DESTDIR)$(SUSPEND_DIR)
else
install-s2disk: $(S2DISK) conf/$(CONFIGFILE)
	if [ ! -c /dev/snapshot ]; then mknod /dev/snapshot c 10 231; fi
	install --mode=755 $(S2DISK) $(DESTDIR)$(SUSPEND_DIR)
	if [ -f $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE) ]; then install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE).new; else install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR); fi

install-suspend: $(S2DISK) $(S2BOTH) conf/$(CONFIGFILE)
	if [ ! -c /dev/snapshot ]; then mknod /dev/snapshot c 10 231; fi
	install --mode=755 $(S2DISK) $(DESTDIR)$(SUSPEND_DIR)
	install --mode=755 $(S2BOTH) $(DESTDIR)$(SUSPEND_DIR)
	if [ -f $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE) ]; then install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR)/$(CONFIGFILE).new; else install --mode=644 conf/$(CONFIGFILE) $(DESTDIR)$(CONFIG_DIR); fi
	install --mode=755 s2ram $(DESTDIR)$(SUSPEND_DIR)
endif

install-resume-initrd:	resume conf/$(CONFIGFILE)
	BOOT_DIR=$(DESTDIR)$(BOOT_DIR) ./scripts/create-resume-initrd.sh $(RESUME_DEVICE)

install-resume:		resume 
	./scripts/install-resume.sh

