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/