Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Oct 2021 23:15:54 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Baptiste Daroussin <bapt@freebsd.org>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, Dimitry Andric <dim@freebsd.org>,  FreeBSD User <freebsd@walstatt-de.de>, FreeBSD CURRENT <freebsd-current@freebsd.org>
Subject:   Re: clang/llvm-tblgen --- ld: error: undefined symbol: setupterm
Message-ID:  <CANCZdfrKCBHfem77PFxNzqO-Z9mB1QKgxYDXyK2GH488YLe4AA@mail.gmail.com>
In-Reply-To: <CANCZdfpu2tLJV%2B1RFwAbCeX-AvvUy7iKqKOP6fWcwwhjvYY=jA@mail.gmail.com>
References:  <20211009094624.3f3cacc8@jelly.fritz.box> <A047910E-DB49-45F8-9BF4-9233969AADAC@FreeBSD.org> <2FCA108B-29E1-48EA-A8C7-BC621CC6F963@FreeBSD.org> <CANCZdfrrXYMCdkdVEaUPr15nrO%2BLg=OG_bvoy8DCEr0QJVvaxA@mail.gmail.com> <94E84785-8F8C-4E90-A437-929565F5C968@FreeBSD.org> <CANCZdfok58DEoCfZk_6w6p_3vJ9mV0FopAnuX6Av4C%2Bs8s5E8g@mail.gmail.com> <YWIifx%2BT0ETlzVIU@kib.kiev.ua> <CANCZdfpMHTKqRE=byupGpHpmJ-_bk9ZLTDv=_hxXYSkFMKa3Og@mail.gmail.com> <YWIrWtxlXwSpBi4i@kib.kiev.ua> <20211010040637.3fw7q6nl7gn7aum4@aniel.nours.eu> <20211010044111.mvzuepff34ztqctq@aniel.nours.eu> <CANCZdfpu2tLJV%2B1RFwAbCeX-AvvUy7iKqKOP6fWcwwhjvYY=jA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000953f2105cdf8b536
Content-Type: text/plain; charset="UTF-8"

On Sat, Oct 9, 2021 at 10:45 PM Warner Losh <imp@bsdimp.com> wrote:

>
>
> On Sat, Oct 9, 2021 at 10:41 PM Baptiste Daroussin <bapt@freebsd.org>
> wrote:
>
>> On Sun, Oct 10, 2021 at 06:06:37AM +0200, Baptiste Daroussin wrote:
>> > On Sun, Oct 10, 2021 at 02:52:58AM +0300, Konstantin Belousov wrote:
>> > > On Sat, Oct 09, 2021 at 05:29:39PM -0600, Warner Losh wrote:
>> > > > On Sat, Oct 9, 2021, 5:15 PM Konstantin Belousov <
>> kostikbel@gmail.com>
>> > > > wrote:
>> > > >
>> > > > > On Sat, Oct 09, 2021 at 04:47:35PM -0600, Warner Losh wrote:
>> > > > > > On Sat, Oct 9, 2021 at 11:09 AM Dimitry Andric <dim@freebsd.org>
>> wrote:
>> > > > > >
>> > > > > > > On 9 Oct 2021, at 15:40, Warner Losh <imp@bsdimp.com> wrote:
>> > > > > > > >
>> > > > > > > > On Sat, Oct 9, 2021, 5:59 AM Dimitry Andric <
>> dim@freebsd.org> wrote:
>> > > > > > > > On 9 Oct 2021, at 13:37, Dimitry Andric <dim@FreeBSD.org>
>> wrote:
>> > > > > > > > >
>> > > > > > > > > On 9 Oct 2021, at 09:46, FreeBSD User <
>> freebsd@walstatt-de.de>
>> > > > > wrote:
>> > > > > > > > >>
>> > > > > > > > >> On recent CURRENT (FreeBSD 14.0-CURRENT #2
>> > > > > main-n249971-0525ece3554e:
>> > > > > > > > >> Fri Oct  8 15:17:34 CEST 2021 amd64) building of an
>> 13-STABLE
>> > > > > based
>> > > > > > > > >> appliance failed very early in the build process of the
>> 13-STABLE
>> > > > > > > > >> sources as shown below. 13-STABLE is most recent, since
>> the
>> > > > > sources
>> > > > > > > are
>> > > > > > > > >> fetched every time the build process is triggered.
>> > > > > > > > > ...
>> > > > > > > > >>
>> > > > > > >
>> /pool/home/ohartmann/Projects/router/router/apu2c4/src/tools/install.sh
>> > > > > > > > >> -s -o root -g wheel -m 555   compile_et
>> > > > > > > > >> /pool/home/ohartmann/Projects/router/router/apu2
>> > > > > > > > >>
>> > > > > > >
>> > > > >
>> c4/world/amd64/ALERICH_13-STABLE_amd64/pool/home/ohartmann/Projects/router/router/apu2c4/src/amd64.amd64/tmp/legacy/usr/bin/compile_et
>> > > > > > > > >> --- _bootstrap-tools-usr.bin/clang/llvm-tblgen --- ld:
>> error:
>> > > > > > > undefined
>> > > > > > > > >> symbol: setupterm
>> > > > > > > > >>>>> referenced by Process.cpp
>> > > > > > > > >>>>>
>> > > > > > >  Process.o:(llvm::sys::Process::FileDescriptorHasColors(int))
>> > > > > > > > >
>> > > > > > > > > It is complaining about ncurses functions; it seems that
>> even
>> > > > > though
>> > > > > > > the link step gets -lncursesw added, it still is not able to
>> find the
>> > > > > > > symbol:
>> > > > > > > >
>> > > > > > > > Okay, this is because recently on -CURRENT, libtinfow got
>> split off
>> > > > > from
>> > > > > > > > libncursesw:
>> https://cgit.freebsd.org/src/commit/?id=396851c20aebd
>> > > > > > > >
>> > > > > > > > This affects such cross-builds obviously, and manually
>> adding
>> > > > > -ltinfow
>> > > > > > > > to the link command line makes it link correctly.
>> > > > > > > >
>> > > > > > > > However, the 396851c20aebd commit is probably not suitable
>> for
>> > > > > MFC'ing
>> > > > > > > > to stable/13. Maybe we need to put some kind of kludge in
>> > > > > > > > share/mk/src.libnames.mk for this, or in the top-level
>> > > > > Makefile.inc1?
>> > > > > > > >
>> > > > > > > > Baptiste, any ideas? :)
>> > > > > > > >
>> > > > > > > > Add setupterm() to libegacy as a nop.
>> > > > > > >
>> > > > > > > That's not enough I think, it requires more ncurses functions
>> than just
>> > > > > > > setupterm. And it actually calls them and checks the return
>> values too,
>> > > > > > > IIRC. :)
>> > > > > > >
>> > > > > >
>> > > > > > int setupterm(const char *t, int fd, int *errptr) { return OK; }
>> > > > > > int tigetnum(const char *t) { return 0; }
>> > > > > > TERMINAL *set_curterm(TERMINAL *t) { return NULL; }
>> > > > > > int del_curterm(TERMINAL *t) { return OK; }
>> > > > > >
>> > > > > > should do the trick. I'll see just how crazy an idea this might
>> be
>> > > > > > since we're trying to get the first stage tool to work on a
>> -current
>> > > > > > host. the only thing that clang is really using is tigetnum to
>> see
>> > > > > > if the terminal has color. Returning 0 tells it no.
>> > > > > >
>> > > > > > Or we could contrive, during bootstrap, to ensure that
>> > > > > > LLVM_ENABLE_TERMINFO is not defined. Nobody ever needs
>> > > > > > color error messages. They are nice to have, sure, but are not
>> > > > > > strictly needed if the alternative is monochrome error messages
>> > > > > > while building the system. There's already an ifdef protecting
>> it:
>> > > > > >
>> > > > > > /* Define if the setupterm() function is supported this
>> platform. */
>> > > > > > #if defined(__FreeBSD__)
>> > > > > > /*
>> > > > > >  * This is only needed for terminalHasColors(). When disabled
>> LLVM falls
>> > > > > > back
>> > > > > >  * to checking a list of TERM prefixes which is sufficient for a
>> > > > > bootstrap
>> > > > > > tool.
>> > > > > >  */
>> > > > > > #define LLVM_ENABLE_TERMINFO 1
>> > > > > > #endif
>> > > > > >
>> > > > > > It would be easy enough to add a &&
>> !defined(LLVM_BOOTSTRAP_BUILD)
>> > > > > > or similar.
>> > > > >
>> > > > > I do not quite understand how would it help.
>> > > > > You need to add this to HEAD sources back in time, not to the
>> current
>> > > > > sources.
>> > > > >
>> > > >
>> > > > Once merged, this would get stable building on current. But not
>> older
>> > > > versions of stable, it is true. It's worth doing for that reason
>> alone
>> > > > unless there's something clever we've not thought of yet with the
>> current
>> > > > host.
>> > >
>> > > We can put somewhere a patch and add instructions how to use it to
>> patch
>> > > older HEADs and stable.  May be instructions and the reference to the
>> patch
>> > > file should go into UPDATING 20211004 entry.
>> >
>> > It fails to link because the bootstrap tools are built statically if
>> they were
>> > linked dynamically that would solve the situation, because
>> libncursesw.so is a
>> > linkscript which does the right thing.
>> >
>> > Stupid question, why are bootstrap tools statically linked in the first
>> place?
>> > If we remove -DNO_SHARED from the BARGS, it compiles perfectly fine.
>> >
>> > Imho we should remove the static linking here, the other way would be to
>> > provide a "flat" libncursesw.a for those cases on CURRENT. which I
>> don't know how to
>> > provide without breaking things even more.
>> >
>> > Best regards,
>> > Bapt
>>
>> the reason being -DNO_SHARED is speeding up the bootstrap, so probably we
>> need
>> to either investigate make ncurses a bootstrap lib for clang, or having
>> kind of
>> an equivalent of what the linker script is doing for libncursesw.so but
>> for
>> libncursesw.a.
>>
>
> We build so few libraries (usually none) that we can ditch this
> optimization for
> the upgrades (the libraries built are usually tiny).
>

Though it's still a 'patch the past' path forward... The fix is trivial to
describe.

Warner

--000000000000953f2105cdf8b536--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrKCBHfem77PFxNzqO-Z9mB1QKgxYDXyK2GH488YLe4AA>