make: .exe handling breaks kernel cross-compile

Yaakov (Cygwin/X) yselkowitz@users.sourceforge.net
Sun Jun 10 20:57:00 GMT 2012


On 2012-06-10 13:29, Christopher Faylor wrote:
> On Sun, Jun 10, 2012 at 01:06:18PM -0500, Yaakov (Cygwin/X) wrote:
>> I can confirm that this previously reported bug in make .exe handling
>> still affects the cross-compile of the Linux kernel:
>>
>> http://cygwin.com/ml/cygwin/2009-11/msg00935.html
>
> Without diving into the depths of the linux makefiles, this doesn't seem
> like a bug.  gcc creates .exe files.  The makefile isn't expecting to
> create one and, so, gets confused.  Makefiles which expect .exe
> extensions usually use the EXEEXT variable for just this purpose.
> Linux's makefile doesn't do that for probably obvious reasons.

While our make won't connect a dep on "foo" to a foo.exe rule (which can 
occur in automake-generated Makefiles with custom rules), it does see 
foo.exe fulfilling a dep on "foo" if it is already present:

$ cat Makefile
all: bar
bar: foo
	touch bar.exe
clean:
	rm -f bar.exe foo.exe

$ touch foo.exe
$ make
touch bar.exe
$ make clean
rm -f bar.exe foo.exe

The problem here is the kernel uses VPATH -- scripts/pnmtologo(.exe) is 
not relative to drivers/video/logo, but rather to $(O) -- and somehow 
with VPATH the .exe magic doesn't happen:

$ cat Makefile
VPATH = $(PWD)/build

all: bar
bar: foo
	touch bar.exe

$ mkdir -p build
$ touch build/foo.exe
$ make
make: *** No rule to make target `foo', needed by `bar'.  Stop.

So foo.exe fulfills foo, but not with VPATH.  Isn't that a bug?


Yaakov

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list