CC=gcc

OPT_DEBUG=-Wall -Werror -Wno-unused -O2 -g
OPT_DBG=-DDEBUG_VFS_LOCKS
OPT_DEF=-DKERNEL -DKLD_MODULE -DVFS_LKM -DVFS_KLD -DFISTGEN
OPT_INC=-I. -I$(SYS_SRC)
CFLAGS=$(OPT_DEBUG) $(OPT_DEF) $(OPT_DBG) $(OPT_INC)
UCFLAGS=$(OPT_DEBUG) -DFISTGEN $(OPT_INC)

SYS_SRC=/sys
KLD=/modules

TARGET = wrapfs.ko
BINS = fist_ioctl mount_wrapfs FIST_USER_BINS

SRC = vnode.c vfs.c print.c subr.c fist_wrapfs.c FIST_MOD_SRC FIST_AUX_SRC
OBJ0 = setdef0.o
OBJ = ${SRC:.c=.o}
OBJ1 = setdef1.o

all: $(TARGET) $(BINS)

$(TARGET): $(OBJ0) $(OBJ) $(OBJ1)
	ld -Bshareable -o $(TARGET) $(OBJ0) $(OBJ) $(OBJ1)

vnode_if.c vnode_if.h: /usr/include/sys/vnode.h
	sh $(SYS_SRC)/kern/vnode_if.sh $(SYS_SRC)/kern/vnode_if.src

setdefs.h setdef0.c setdef1.c: $(OBJ)
	gensetdefs $(OBJ)

opt_debug.h:
	touch opt_debug.h
opt_vmpage.h:
	touch opt_vmpage.h

fist_ioctl: fist_ioctl.c
	${CC} -o $@ $? ${UCFLAGS}

mount_wrapfs: mount_wrapfs.c getmntopts.c
	${CC} -o $@ $? ${UCFLAGS}

FIST_UBIN_RULES

$(OBJ): fist.h wrapfs.h opt_debug.h opt_vmpage.h vnode_if.h vnode_if.c

install: $(TARGET)
	install -c -m 775 $(TARGET) $(KLD)

clean:
	rm -f *~ \#* core *.d .*.flags $(OBJ) $(OBJ0) $(OBJ1)
	rm -f $(TARGET) opt_debug.h opt_vmpage.h vnode_if.c vnode_if.h
	rm -f setdefs.h setdef0.c setdef1.c $(BINS)

#-include *.d
