Re: kbuild will remove .c files

From: Sam Ravnborg
Date: Wed Mar 03 2004 - 16:08:55 EST


On Wed, Mar 03, 2004 at 12:34:06PM -0800, Chris Wright wrote:
> I added a new config to my kernel, and hadn't done a bk -r get in quite
> a while. Turns out the subdir relevant to the config item hits the make
> builtin to get the file (since it had been missing), but then kbuild
> assembles, links, links, and finally removes the .c file. This will
> be done everytime, since the .c file is now gone. While a preemptive
> bk -r get is the obvious solution here (or even a after the fact bk get
> $missing.c), is this a possible very small buglet in kbuild?
>
> Here's some relevant output:
>
> get net/irda/irlan/SCCS/s.irlan_client.c
> net/irda/irlan/irlan_client.c 1.8: 565 lines
> CC net/irda/irlan/irlan_client.s
> as -o net/irda/irlan/irlan_client.o net/irda/irlan/irlan_client.s
> LD net/irda/irlan/irlan.o
> LD net/irda/irlan/built-in.o
> rm net/irda/irlan/irlan_client.c

What happens here is that make resort to a chained rule to create the
irlan.o file.
The chain goes from SCCS/%.c -> %.c -> %.s -> %.o

The two files %.c and %.s is considered intermidiate files, and make
guarantees that intermidiate files that did not exist when
make was called, does not exists when make exists.
This is reported by make with the "rm ..." line.

See info make -> Implicit rules - > Chained rules

The reason why you see this is that there is no implicit rule from SCCS/%.c -> %.c
wich is because kbuild does not 'know' of SCCS/* - but make uses some build-in
rule for this.

Two questions pops up though.
First my make documentatin say the make would use "rm -f ...",not "rm".
What make version do you use?

Also I would expect to see irlan_client.s to be deleted also - did you miss that?
It may show up a bit later.

Sam
-
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/