Build spends a long time in "mkimport".
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
> [ .. 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.
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