Build spends a long time in "mkimport".

Mark Geisert
Sun Oct 11 07:24:57 GMT 2020

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 :-)


More information about the Cygwin mailing list