Re: Kbuild Makefile output

Previous thread: [PATCH] slob: record page flag overlays explicitly v2 by Andy Whitcroft on Thursday, May 15, 2008 - 10:42 am. (1 message)

Next thread: [RFCLUE4] scatterlist changes by William D Waddington on Thursday, May 15, 2008 - 9:51 am. (1 message)
From: murtuja bharmal
Date: Thursday, May 15, 2008 - 10:37 am

Hello All.
I want to collect all my object file in onedirectory and then want to create a kernel module.
For example: This my directory structure.
dir
|
--------------------------------------
|            |        |        |
dir1    dir2       dir3   dir4
This is my makefile in 'dir'.
obj-m := test.o
test-objs += \
                dir1/test1.o  \
                dir2/test2.o  \
                dir3/test3.o
all:
            make -C /usr/src/linux M=`pwd` modules

Now I want to save all output objectfile test1.o test2.o test3.o in one directory
called 'dir4' not in source directory. 'test.o' should look all this object file in 'dir4' for linking, not in the source directory and 'test.ko' should also be create in 'dir4'.
Can any one tell me, what is require changes in Kernel Makefile for the same.

Thanks
Murtuja



      Share files, take polls, and make new friends - all under one roof. Go to http://in.promos.yahoo.com/groups/
--

From: Sam Ravnborg
Date: Thursday, May 15, 2008 - 10:42 am

Do not do that...

If you really need to do so - please explain why so we can understand the rationale.
There are ~2000 modules that does not need this so what makes your maodule so special?

[Added kbuild@vger to cc as you also asked there]

	Sam
--

From: murtuja bharmal
Date: Thursday, May 15, 2008 - 11:01 am

Hello Sam,

Thanks for reply.
Actually Problem is.
As I told you I have near near about 1000 file that
compiles for single module creation which spread in
multiple directies in 2.4 with lots of makefile.

Now I have created single makefile to compile all this
file and able to create kernel module.

But now the problem is lots of file included in kernel
module, compiled twice or even more then twice for
user space (whithou kernel flag set) and kernel space
and this userspace binary is not a part of kbuild
makefile.

Previously in 2.4 we use to put all output object file
in different directories for kernel module and user
binaries based in their compilation Flags.

Now after attaching kbuild makefile with this system,
kbuild make all object file in source directory itself
becasue of that userspace makefiles not able to
compile those file again. Because one object file is
already there by kbuild. So I am not able create
userspace binary.

Now either solution is generate kbuild object file in
different directory not in source directory as per our
previous design or make a copy of exsisting file with
some other name. One for kernel and one for user
space.

So I thought lets check the possibility of generating
all kernel related object file in some other directory
not in source directory.


Thanks 
Murtuja




      Connect with friends all over the world. Get Yahoo! India Messenger at http://in.messenger.yahoo.com/?wm=n/
--

From: murtuja bharmal
Date: Thursday, May 15, 2008 - 11:31 am

Hello Sam,

Thanks for reply.
Actually Problem is.
As I told you I have near near about 1000 file that
compiles for single module creation which spread in
multiple directies in 2.4 with lots of makefile.

Now I have created single makefile to compile all this
file and able to create kernel module.

But now the problem is lots of file included in kernel
module, compiled twice or even more then twice for
user space (whithou kernel flag set) and kernel space
as well.

Previously in 2.4 we use to put all output object file
in different directories for kernel module and user
binaries based on their compilation Flags.

Now after attaching kbuild makefile with this system,
kbuild make all object file in source directory itself
becasue of that userspace makefiles not able to
compile those file again. Because one object file is
already there by kbuild. So I am not able create
userspace binary.

Now either solution is generate kbuild object file in
different directory not in source directory as per our
previous design or make a copy of exsisting file with
some other name. One for kernel and one for user
space but this is also not a good approach.

So I thought lets check the possibility of generating
all kernel related object file in some other directory
not in source directory.
So I just want to know whether it is possible or not
and if possible how.


Thanks 
Murtuja




      Forgot the famous last words? Access your message archive online at http://in.messenger.yahoo.com/webmessengerpromo.php
--

From: Joel Becker
Date: Thursday, May 15, 2008 - 1:58 pm

Two solutions.

1) Have the build name the output files appropritately.  That is,
compile foo.c to foo-kernel.o and foo-userspace.o.  Then link as needed.
The makefile dependencies Just Work.

2) Better - create a kbuild symlink farm.  That is, lay out your sources
however you want, but in a single directory that is not the parent put
your kbuild makefile.  Have it symlink all .c files for kernel building
into this directory.

toplevel
	dir1
		Makefile
		foo.c
	dir2
		Makefile
		bar.c
	dir3
		Makefile
		baz.c
	kbuild
		Makefile

The kbuild/Makefile does something like:

obj-$(CONFIG_MYMODULE) += mymodule.o
mymodule-objs := foo.o bar.o baz.o
mymodule-sources = $(patsubst %.o,%.c,$(mymodule-objs))

obj-sources = $(foreach obj,$(mymodule-sources),$(wildcard ../*/$(obj)))

$(mymodule-sources): $(obj-sources)
	for f in $(obj-sources); do	\
	  -ln -s $$f .;			\
	done

Joel

-- 

Life's Little Instruction Book #232

	"Keep your promises."

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker@oracle.com
Phone: (650) 506-8127
--

Previous thread: [PATCH] slob: record page flag overlays explicitly v2 by Andy Whitcroft on Thursday, May 15, 2008 - 10:42 am. (1 message)

Next thread: [RFCLUE4] scatterlist changes by William D Waddington on Thursday, May 15, 2008 - 9:51 am. (1 message)