On Fri, 11 Apr 2025, Takashi Yano via Cygwin-apps wrote:

> On Thu, 10 Apr 2025 12:45:06 -0700 (PDT)
> Jeremy Drake wrote:
> > We (@mati865 and I) just managed to get llvm/clang 20.1.2 building and
> > targeting Cygwin over at MSYS2, and I was wondering if you had anyone
> > interested in these patches to update the package(s) in Cygwin?  I'm not
> > particularly interested in taking on more responsibilities, but I guess I
> > could take a look at this if nobody else wants to.
> >
> > MSYS2 package:
> > https://github.com/msys2/MSYS2-packages/tree/master/llvm
> >
> > Note that we wound up punting on LLD support for Cygwin targets: there's
> > currently no way to tell the difference in the LLD driver between Cygwin
> > and MinGW targets, and trying to adapt to Cygwin broke the ability to use
> > that LLD for MinGW cross-compiling.  Given that it was all pretty hacky
> > anyway, it seemed better to keep the working MinGW cross-compiling support
> > than trade it in for still-somewhat-broken Cygwin support when we can just
> > keep using GNU ld for the Cygwin target.
>
> Amazing!
>
> Now I am trying to build llvm for cygwin. For now, it fails with
> ld: error: export ordinal too large: xxxxx
> in dll linkage.
>
> If you could give me a suggestion, I would greatly appreciate it.

Are you using the patches and cmake options from
https://github.com/msys2/MSYS2-packages/tree/master/llvm ?

I noticed one (0101-hack-dynamically-resolve-G-include-dir.patch) has an
"msys" that will need to be changed to "cygwin".

The export ordinal too large error is because there are too many symbols
for export-all-symbols to export from the DLLs (the DLL export table uses
an unsigned short, so you only get 65535 exports).  With GCC, it can only
build static libraries, see
https://github.com/msys2/MSYS2-packages/blob/4813abedafbbe1343ca287fded18b14f1f792198/llvm/PKGBUILD#L175-L189

Once you have clang built, you can use it to rebuild llvm with dynamic
libs.  Clang has a workaround that hooks up ELF-style visibility "hidden"
to exclude symbols from auto-export, so there are not too many symbols for
a DLL.

Reply via email to