RELEASE := $(shell uname -r) KERNEL := /lib/modules/$(RELEASE)/build # PWD doesn't have to be defined as it's inherited from the current environment # MAKE shouldn't be defined as it's special in GNU make # the names of these variables are required by the kernel's (imo weird) build # system, see [kbuild-obj-var] and [kbuild-module-makefile] in ../readme.md obj-m += lork.o lork-y += main.o # utility ifneq ($(shell id -u),0) AS_ROOT := sudo -n endif .PHONY: FORCE lork.ko: FORCE $(MAKE) -C $(KERNEL) M=$(PWD) modules all: lork.ko FORCE # the generated compile_commands.json needs to be edited to point to the kernel # folder as working directory because the include paths are relative compile_commands.json: compiledb -o $@.tmp make -Bn jq --arg dir $(KERNEL) '.[].directory = $$dir' $@.tmp > $@ $(RM) $@.tmp poke: lork.ko FORCE $(AS_ROOT) insmod $< $(AS_ROOT) rmmod $<