Re: [PATCH] out-of-tree builds
From: Geert Uytterhoeven
Date: Thu Apr 01 2004 - 04:38:31 EST
On Mon, 22 Mar 2004, Geert Uytterhoeven wrote:
> On Mon, 15 Mar 2004, Geert Uytterhoeven wrote:
> > On Sun, 14 Mar 2004, Geert Uytterhoeven wrote:
> > > Although I like the feature to build a kernel in a different directory a lot, I
> > > don't like its syntax. I prefer to just have a build directory where I can run
> > > `make whatever'.
> > >
> > > The following patch adds a configure script to the kernel. If you run
> > >
> > > /path/to/kernel/source/tree/configure
> > >
> > > it will create a Makefile in the current directory, after which you can just do
> > > `make whatever', just like in the source directory.
> >
> > Unfortunately not everything works.
> >
> > E.g. I need to build usr/ with a different (newer) binutils, so when the build
> > fails on assembling usr/initramfs_data.o, I used to do the following, which no
> > longer works:
> >
> > | tux$ PATH=/usr/bin/:$PATH make usr/
> > | make: `usr/' is up to date.
> > | tux$
> >
> > I guess I need a catch-all .PHONY rule, but don't know how to implement it...
>
> `info make' never hurts...
>
> --- linux-2.6.x/Makefile.in.orig 2004-02-08 10:50:36.000000000 +0100
> +++ linux-2.6.x/Makefile.in 2004-03-22 23:02:29.000000000 +0100
> @@ -0,0 +1,12 @@
> +
> +srcdir = @srcdir@
> +
> +dstdir = $(shell pwd)
> +
> +all:
> + @$(MAKE) -C $(srcdir) O=$(dstdir)
> +
> +%: force
> + @$(MAKE) -C $(srcdir) O=$(dstdir) $@
> +
> +force: ;
> --- linux-2.6.x/configure.orig 2004-02-08 10:50:36.000000000 +0100
> +++ linux-2.6.x/configure 2004-03-15 10:27:00.000000000 +0100
> @@ -0,0 +1,17 @@
> +#!/bin/sh
> +
> +srcdir=$(dirname $0)
> +dstdir=$(pwd)
> +
> +if [ $srcdir = . -o $srcdir = $dstdir ]; then
> + echo Building in Linux kernel source tree, nothing changed
> +else
> + if [ -e Makefile ]; then
> + /bin/mv Makefile Makefile.bak
> + fi
> + echo '# Generated automatically from Makefile.in by configure.' > Makefile
> + /bin/sed -e s+@srcdir@+$srcdir+ < $srcdir/Makefile.in >> Makefile
> + echo Linux kernel source tree in directory $srcdir
> + echo Building in directory $dstdir
> +fi
> +
Still not perfect, though. `make target' doesn't work for *.o files, but it
does work for directories, e.g.:
| tux$ rm usr/initramfs_data.o
| tux$ PATH=/usr/bin:$PATH make usr/initramfs_data.o
| make[1]: Entering directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| make[2]: Nothing to be done for `Makefile'.
| make[1]: Nothing to be done for `Makefile'.
| make[1]: Leaving directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| make: *** No rule to make target `usr/initramfs_data.o'. Stop.
| tux$ PATH=/usr/bin:$PATH make usr/
| make[1]: Entering directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| make[2]: Nothing to be done for `Makefile'.
| make[1]: Nothing to be done for `Makefile'.
| make[1]: Leaving directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| make[1]: Entering directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| make[3]: `arch/m68k/kernel/asm-offsets.s' is up to date.
| AS usr/initramfs_data.o
| LD usr/built-in.o
| make[1]: Leaving directory `/home/geert/linux/testing/linux-m68k-2.6.5-rc3'
| tux$
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
-
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/