public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Kbuild Makefile output
@ 2008-05-15 17:37 murtuja bharmal
  2008-05-15 17:42 ` Sam Ravnborg
  0 siblings, 1 reply; 5+ messages in thread
From: murtuja bharmal @ 2008-05-15 17:37 UTC (permalink / raw)
  To: linux-kernel

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/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Kbuild Makefile output
  2008-05-15 17:37 Kbuild Makefile output murtuja bharmal
@ 2008-05-15 17:42 ` Sam Ravnborg
  2008-05-15 18:01   ` murtuja bharmal
  2008-05-15 18:31   ` murtuja bharmal
  0 siblings, 2 replies; 5+ messages in thread
From: Sam Ravnborg @ 2008-05-15 17:42 UTC (permalink / raw)
  To: murtuja bharmal; +Cc: linux-kernel, linux-kbuild

On Thu, May 15, 2008 at 11:07:19PM +0530, murtuja bharmal wrote:
> 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.

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Kbuild Makefile output
  2008-05-15 17:42 ` Sam Ravnborg
@ 2008-05-15 18:01   ` murtuja bharmal
  2008-05-15 18:31   ` murtuja bharmal
  1 sibling, 0 replies; 5+ messages in thread
From: murtuja bharmal @ 2008-05-15 18:01 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel, linux-kbuild

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

--- Sam Ravnborg <sam@ravnborg.org> wrote:

> On Thu, May 15, 2008 at 11:07:19PM +0530, murtuja
> bharmal wrote:
> > 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.
> 
> 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
> 



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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Kbuild Makefile output
  2008-05-15 17:42 ` Sam Ravnborg
  2008-05-15 18:01   ` murtuja bharmal
@ 2008-05-15 18:31   ` murtuja bharmal
  2008-05-15 20:58     ` Joel Becker
  1 sibling, 1 reply; 5+ messages in thread
From: murtuja bharmal @ 2008-05-15 18:31 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: linux-kernel, linux-kbuild


--- Sam Ravnborg <sam@ravnborg.org> wrote:

> On Thu, May 15, 2008 at 11:07:19PM +0530, murtuja
> bharmal wrote:
> > 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.
> 
> 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
> 

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Kbuild Makefile output
  2008-05-15 18:31   ` murtuja bharmal
@ 2008-05-15 20:58     ` Joel Becker
  0 siblings, 0 replies; 5+ messages in thread
From: Joel Becker @ 2008-05-15 20:58 UTC (permalink / raw)
  To: murtuja bharmal; +Cc: Sam Ravnborg, linux-kernel, linux-kbuild

On Thu, May 15, 2008 at 07:31:31PM +0100, murtuja bharmal wrote:
> 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.

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-05-15 21:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-15 17:37 Kbuild Makefile output murtuja bharmal
2008-05-15 17:42 ` Sam Ravnborg
2008-05-15 18:01   ` murtuja bharmal
2008-05-15 18:31   ` murtuja bharmal
2008-05-15 20:58     ` Joel Becker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox