From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from m0.truegem.net (m0.truegem.net [69.55.228.47]) by sourceware.org (Postfix) with ESMTPS id C377D3857817; Sun, 11 Oct 2020 07:25:02 +0000 (GMT) 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 Received: (from daemon@localhost) by m0.truegem.net (8.12.11/8.12.11) id 09B7P1Mg036234; Sun, 11 Oct 2020 00:25:01 -0700 (PDT) (envelope-from mark@maxrnd.com) Received: from 162-235-43-67.lightspeed.irvnca.sbcglobal.net(162.235.43.67), claiming to be "[192.168.1.100]" via SMTP by m0.truegem.net, id smtpdB9PK3i; Sun Oct 11 00:24:57 2020 Subject: Re: Build spends a long time in "mkimport". To: Cygwin , cygwin-developers@cygwin.com References: From: Mark Geisert Message-ID: 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: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 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-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Oct 2020 07:25:06 -0000 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