2005-09-08 13:51:22

by Budde, Marco

[permalink] [raw]
Subject: kbuild: libraries and subdirectories

I have a large number of sources files, which I have to
compile into one kernel module. Let's assume I have the
following source organisation:

main/
main_code.c
lib1/
part1/
file_1_1_1.c
part2/
file_1_2_1.c
lib2/
part1/
file_2_1_1.c
part2/
file_2_2_1.c

I would like to build all source files in lib1 into one
lib.a library and all files in lib2 into a second lib.a
library.

At the end I would like to compile the code in main and
link every together (result should be one kernel module).

How can I archieve this with kbuild? Its documentation is not
really deep.

I have added to all subdirectories kbuild files looking like
this:

lib-m = file_1_1_1.c

This works and creates lib.a archives. In fact I have got
two problems:

*) How can I tell kbuild in lib1 and lib2 to descend into
the part directories?

*) How can I link the libraries of the part directories into
libs in the lib directories?

cu, Marco


2005-09-08 15:27:23

by Sam Ravnborg

[permalink] [raw]
Subject: Re: kbuild: libraries and subdirectories

On Thu, Sep 08, 2005 at 03:40:59PM +0200, Budde, Marco wrote:
> I have a large number of sources files, which I have to
> compile into one kernel module. Let's assume I have the
> following source organisation:
>
> main/
> main_code.c
> lib1/
> part1/
> file_1_1_1.c
> part2/
> file_1_2_1.c
> lib2/
> part1/
> file_2_1_1.c
> part2/
> file_2_2_1.c
>
> I would like to build all source files in lib1 into one
> lib.a library and all files in lib2 into a second lib.a
> library.

kbuild is optimised for kernel usage.
And within the kernel only xfs and oprofile (+a few others)
have files spread over more than one directory like in your
example. This is not considered good practice and therefore
kbuild does not document this usage - neither encourage it.

Also kbuild does not support building .a file in the way you
want it to do.

You can do the following:
obj-$(CONFIG_foo) += main/main_code.o
obj-$(CONFIG_foo) += lib1/part1/file_1_1_1.c
obj-$(CONFIG_foo) += lib1/part2/file1_2_1.o

etc.

>
> At the end I would like to compile the code in main and
> link every together (result should be one kernel module).
>
> How can I archieve this with kbuild? Its documentation is not
> really deep.
Please point out in what section you miss information and I will try to
update it.
I for one consider the kbuild syntax well documented, but I may be a bit
biased in this respect.

Sam