delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/06/10/16:58:00

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE
X-Spam-Check-By: sourceware.org
Message-ID: <4FD50A3D.9040201@users.sourceforge.net>
Date: Sun, 10 Jun 2012 15:57:33 -0500
From: "Yaakov (Cygwin/X)" <yselkowitz AT users DOT sourceforge DOT net>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: make: .exe handling breaks kernel cross-compile
References: <4FD4E21A DOT 2080809 AT users DOT sourceforge DOT net> <20120610182927 DOT GB32575 AT ednor DOT casa DOT cgf DOT cx>
In-Reply-To: <20120610182927.GB32575@ednor.casa.cgf.cx>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019