COMPFLAGS = -Wall
KDIR:=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
fbtest_INCLUDES = -D_REENTRANT -I/usr/include/directfb
fbtest_CFLAGS = -Wall -O3 -pipe
fbtest_LDADD = -ldirectfb

libdir.x86_64 = /usr/lib64
libdir.i686   = /usr/lib
MACHINE := $(shell uname -m)
libdir = $(libdir.$(MACHINE))
spi_CFLAGS += -I/usr/include/at-spi-2.0 -I/usr/include/glib-2.0 -I$(libdir)/glib-2.0/include -I/usr/include/dbus-1.0 -I$(libdir)/dbus-1.0/include/
spi_LDADD += -latspi -lgobject-2.0 -lglib-2.0
snmp_CFLAGS += -I/usr/include/net-snmp
snmp_LDADD += -lnetsnmp

KMODULES= nlkm memfreetest pcietest

getpeercon_server: getpeercon_server.c
	$(CC) $(CFLAGS) -g -o $@ -lselinux $<

semtest: semtest.c
	gcc -o semtest $(COMPFLAGS) semtest.c

signaltest: signaltest.c signals.h
	gcc -o signaltest -D_LINUX_ $(COMPFLAGS) signaltest.c

npttest: npttest.c
	gcc -o npttest -lpthread -lrt -D_LINUX_ $(COMPFLAGS) npttest.c

shmemtest: shmemtest.c
	gcc -o shmemtest $(COMPFLAGS) shmemtest.c

netlinktest: netlinktest.c
	gcc -o netlinktest $(COMPFLAGS) netlinktest.c

#fbtest: fbtest.c
#	gcc -o fbtest $(fbtest_INCLUDES) $(fbtest_LDADD) $(fbtest_CFLAGS) fbtest.c

fb_test: fb_test.cpp
	clang++ -Wall --debug -o fb_test -std=c++17 fb_test.cpp

testusb: testusb.c
	gcc -o testusb -lpthread $(COMPFLAGS) testusb.c

ffstest: ffs-test.c
	gcc -o ffstest -lpthread $(COMPFLAGS) ffs-test.c

netlabel_client: netlabel_client.c
	gcc -o netlabel_client -lselinux $(COMPFLAGS) -DMYPORT=3490 netlabel_client.c

netlabel_server: netlabel_server.c
	gcc -o netlabel_server -lselinux $(COMPFLAGS) -DMYPORT=3490 netlabel_server.c

ipsec_client: netlabel_client.c
	gcc -o ipsec_client -lselinux $(COMPFLAGS) -DMYPORT=4490 netlabel_client.c

ipsec_server: netlabel_server.c
	gcc -o ipsec_server -lselinux $(COMPFLAGS) -DMYPORT=4490 netlabel_server.c

test_firefox: spi/test_firefox.c spi/spi_utils.c spi/spi_utils.h
	gcc -o test_firefox $(COMPFLAGS) $(spi_CFLAGS) $(spi_LDADD) spi/test_firefox.c spi/spi_utils.c

test_lowriter: spi/test_lowriter.c spi/spi_utils.c spi/spi_utils.h
	gcc -o test_lowriter $(COMPFLAGS) $(spi_CFLAGS) $(spi_LDADD) spi/test_lowriter.c spi/spi_utils.c

test_localc: spi/test_localc.c spi/spi_utils.c spi/spi_utils.h
	gcc -o test_localc $(COMPFLAGS) $(spi_CFLAGS) $(spi_LDADD) spi/test_localc.c spi/spi_utils.c

test_loimpress: spi/test_loimpress.c spi/spi_utils.c spi/spi_utils.h
	gcc -o test_loimpress $(COMPFLAGS) $(spi_CFLAGS) $(spi_LDADD) spi/test_loimpress.c spi/spi_utils.c

test_app_title: spi/test_app_title.c spi/spi_utils.c spi/spi_utils.h
	gcc -o test_app_title $(COMPFLAGS) $(spi_CFLAGS) $(spi_LDADD) spi/test_app_title.c spi/spi_utils.c

#test_app_title_x11: test_app_title_x11.c
#	gcc -o test_app_title_x11 -lX11 $(COMPFLAGS) test_app_title_x11.c

xtool: xtool.cpp
	clang++ --debug -o xtool -lX11 -stdlib=libstdc++ -std=c++17 xtool.cpp
	
test_vnc: test_vnc.c
	gcc -o test_vnc $(COMPFLAGS) -lvncclient test_vnc.c

test_snmp: test_snmp.c
	gcc -o test_snmp $(COMPFLAGS) $(snmp_CFLAGS) $(snmp_LDADD) test_snmp.c

test_forceclose: test_forceclose.c
	gcc -o test_forceclose -lX11 $(COMPFLAGS) test_forceclose.c

#test_kolourpaint: test_kolourpaint.c
#	gcc -o test_kolourpaint -lX11 $(COMPFLAGS) test_kolourpaint.c

#test_kolourpaint: test_kolourpaint.cpp
#	g++ -o test_kolourpaint -lX11 -std=c++14 $(COMPFLAGS) test_kolourpaint.cpp
	
clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean
	rm -f *.mod.c *.ko *.symvers *.order *.o

modules: $(KMODULES)

obj-m := nlkm.o memfreetest.o pcietest.o unsignedmod.o
nlkm: nlkm.c
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

memfreetest: memfreetest.c
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

pcietest: pcietest.c
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
