PWD                = $(realpath $(shell pwd))
MODULE_NAME       ?= $(shell basename "$(PWD)")

ifneq ($(KERNELRELEASE),)
	# call from kernel build system
	obj-m := $(MODULE_NAME).o
else
	ARCH            ?= aarch64
	KERNEL_ARCH     ?= arm64
	CROSS_COMPILE   ?= $(ARCH)-linux-gnu-
	KVER            ?= $(shell ls "$(PWD)/../../kernel" | grep 'linux-' | sed 's/linux-//')
	KERNELDIR       ?= $(PWD)/../../kernel/linux-$(KVER)
	MODDESTDIR      ?= /lib/modules/$(KVER)/kernel/drivers/syso

default:
	ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) MODULE_NAME=$(MODULE_NAME) $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

test: $(MODULE_NAME).ko.test

$(MODULE_NAME).ko.test: $(MODULE_NAME).test.o
	$(CROSS_COMPILE)$(CC) $(LDFLAGS) -pthread $^ -o $@

%.o: %.c
	$(CROSS_COMPILE)$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

clean:
	rm -rf *.ko *.o *.mod.c *~ core .depend .*.cmd .tmp_versions *.symvers *.order

depend .depend dep:
	$(CROSS_COMPILE)$(CC) $(CFLAGS) -M *.c > .depend

install:
	install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR)
	/sbin/depmod -a ${KVER}

uninstall:
	rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
	/sbin/depmod -a ${KVER}

ifeq (.depend,$(wildcard .depend))
	include .depend
endif
