X-Recipient: archive-cygwin@delorie.com
X-Original-To: cygwin@cygwin.com
Delivered-To: cygwin@cygwin.com
DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C377D3857817
Authentication-Results: sourceware.org;
 dmarc=none (p=none dis=none) header.from=maxrnd.com
Authentication-Results: sourceware.org; spf=none smtp.mailfrom=mark@maxrnd.com
Subject: Re: Build spends a long time in "mkimport".
To: Cygwin <cygwin@cygwin.com>, cygwin-developers@cygwin.com
References: <af9f360a0a782f3c4db698e9f4584d16@mail.kylheku.com>
From: Mark Geisert <mark@maxrnd.com>
Message-ID: <fd7836b6-f428-6c18-3656-5123a47197f5@maxrnd.com>
Date: Sun, 11 Oct 2020 00:24:57 -0700
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101
 Firefox/52.0 SeaMonkey/2.49.4
MIME-Version: 1.0
In-Reply-To: <af9f360a0a782f3c4db698e9f4584d16@mail.kylheku.com>
X-Spam-Status: No, score=-5.6 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS,
 KAM_LAZY_DOMAIN_SECURITY, NICE_REPLY_A, SPF_HELO_NONE, SPF_NONE,
 TXREP autolearn=no autolearn_force=no version=3.4.2
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
 server2.sourceware.org
X-BeenThere: cygwin@cygwin.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
 <mailto:cygwin-request@cygwin.com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-request@cygwin.com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
 <mailto:cygwin-request@cygwin.com?subject=subscribe>
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: cygwin-bounces@cygwin.com
Sender: "Cygwin" <cygwin-bounces@cygwin.com>
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 09B7Pc8Y001586

Kaz Kylheku (Cygwin) via Cygwin wrote:
> Hi All,
> 
> When building the Cygwin DLL, this single step takes almost ten minutes:
> 
>    ../../.././winsup/cygwin/mkimport --cpu=i686 --ar=ar --as=as --nm=nm 
> --objcopy=objcopy \
>    --replace=atexit= --replace=timezone= --replace=uname=uname_x 
> --replace=__xdrrec_getrec=
> 
>    [ .. SNIP ... ]
> 
>    --replace=truncate=_truncate64 libcygwin.a cygdll.a _cygwin_crt0_common.o \
>    atexit.o cygwin_attach_dll.o cygwin_crt0.o dll_entry.o dll_main.o dso_handle.o \
>    libcmain.o premain0.o premain1.o premain2.o premain3.o pseudo-reloc-dummy.o
> 
> What's puzzling is that there is very CPU activity during this time. It's launching
> some objcopy commands.
> 
> Is there some documentation that provides an overview of what exactly this does,
> other than studying its perl source code?
> 
> Maybe it can be sped up?
> 
> I'm going to have to cycle quite a few times on some changes, so this is frustrating.

Hi Kaz,
I'm redirecting this to the cygwin-developers list as it's a Cygwin build issue. 
Please follow up there.

I've looked at .../winsup/cygwin/mkimport for the same reason as you -- it takes 
forever on my Windows machines.  But I don't know enough perl to make any changes.

Near the end of mkimport there's a loop over all the "--replace" args, 
essentially.  For each one there are two system() calls launching two objcopy 
processes to do something.  This is much slower on Cygwin than it would be 
cross-building from Linux, for example.

One could parallelize the operations on a multicore machine.  But probably better 
would be figuring out, if possible, how to do the objcopy operations in one pass, 
over two calls if necessary.

PTC, as we've always said :-)

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

