How to build kernel module spread on subdirectories?
Nikola Knežević
laladelausanne at gmail.com
Tue Nov 25 07:06:28 PST 2008
Hi,
I'm playing with the Click Modular router on my FreeBSD box. Out of
curiosity, I decided to switch its GNU makefile to BSD style. I
managed to do it, but I would like to polish it a bit more (and learn
some things along).
Old GNUmakefile relies heavily on OBJS and *_OBJS, as it fills these
variables. I would like to switch to using SRCS. I managed to do it
partially, for the files which are in the ${.CURDIR}.
Click has a certain dir hierarchy of elements. First, it builds its
elements, where each group of elements is in a different directory.
Then it places all generated .o files in ${.CURDIR}. Finally, it links
the whole shebang. Element building is done in another Makefile, which
is generated by a script. (Main) GNUmakefile calls this script, then
it includes that makefile via '-include'.
The script traverses the dir hierarchy, and based on some variables,
creates a Makefile which outlines like this:
# subdir0
ELEMENT_OBJS__x= \
file0.o \
file1.o
#subdir1
ELEMENT_OBJS__y= \
file2.o \
file3.o \
...
ELEMENT_OBJS= \
$(ELEMENT_OBJS__x) \
$(ELEMENT_OBJS__y)
$(ELEMENT_OBJS__x): %.o: subdir0/%.cc
$(call cxxcompile,-c $< -o $@,CXX)
$(ELEMENT_OBJS__y): %.o: subdir1/%.cc
$(call cxxcompile,-c $< -o $@,CXX)
I'm interested in how can I transfer this into BSD-style makefile?
I tried to move from OBJS into SRCS (main BSDmakefile now has: SRCS+=$
(ELEMENT_SRCS)), by using something like:
# subdir0
ELEMENT_SRCS__x =\
subdir1/file0.cc \
subdir1/file1.cc
...
But this fails during the linking phase, because the linker is called
with subdir1/file0.o, instead of just file0.o.
To make something clear, I didn't just rewrite the GNUmakefile to
BSDmakefile, I also followed some of the logic used to build kernel
modules. I'm including bsd.kmod.ko, list sources in SRCS, don't have
any explicit rule to build .o out of .cc/.c. There is no all: target,
as well.
Thanks,
Nikola
More information about the freebsd-hackers
mailing list