Re: compiling external modules
From: Axel Weiss
Date: Fri Apr 16 2004 - 15:18:57 EST
Am Freitag, 16. April 2004 18:54 schrieb Sam Ravnborg:
> On Fri, Apr 16, 2004 at 05:41:07PM +0200, Axel Weiss wrote:
> What about testing for the precense of Rules.make.
> If present we know it is 2.4, if not it's 2.6.
>
> Something like:
> KERNEL_26 := $(if $(wildcard $(TOPDIR)/Rules.make),0,1)
> Much simpler than all the above.
Sure, but compilation with 2.6.5 would fail again, missing export-objs.
If I got you right, we should simplify things so that 2.6 means >= 2.6.6?
So, the following is tested on 2.6.6-rc1 and suse-2.4.21-199:
# Template Makefile for external module compilation
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
KERNEL_24 := $(if $(wildcard $(KDIR)/Rules.make),1,0)
ifneq ($(KERNELRELEASE),)
obj-m := <mod-name>.o
<mod-name>-objs := <mod-object-list>
endif # ifneq ($(KERNELRELEASE),)
.PHONY: all clean
ifeq ($(KERNEL_24),1)
ifneq ($(KERNELRELEASE),)
export-objs := <mod-export-list>
include $(KDIR)/Rules.make
adc64_bm.o: $(<mod-name>-objs)
$(Q)$(LD) $(LD_RFLAG) -r -o $@ $(<mod-name>-objs)
else # ifneq ($(KERNELRELEASE),)
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -f *.ko *.o .*.cmd .*.o.flags *.mod.c
endif # ifneq ($(KERNELRELEASE),)
else #################### ifeq ($(KERNEL_24),1)
ifeq ($(KERNELRELEASE),)
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
$(MAKE) -C $(KDIR) M=$(PWD) $@
endif # ifeq ($(KERNELRELEASE),)
endif #################### ifeq ($(KERNEL_24),1)
# end of Makefile Template
I reordered the cases a bit so that
1. kernel-version dependend branches stay together
2. <mod-object-list> needs only be written once
Now everything fits on a single screen-page :)
Sam, please note two things:
1. the clean rule must be explicit to be recognized (GNU Make 3.80).
2. 2.6 compilation requires root privileges for compilation, 2.4 does not.
Can we relax some file accesses (e.g. $(KDIR)/.__modpost.cmd and the
local .tmp_versions) to allow non-privileged users to compile external
modules and to be able to make clean?
Regards,
Axel
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/