Re: clang/llvm-tblgen --- ld: error: undefined symbol: setupterm
Date: Sun, 10 Oct 2021 14:43:06 UTC
On Sun, 10 Oct 2021 at 07:46, Baptiste Daroussin <bapt@freebsd.org> wrote: > > On Sat, Oct 09, 2021 at 11:33:54PM -0600, Warner Losh wrote: > > On Sat, Oct 9, 2021 at 11:29 PM Kyle Evans <kevans@freebsd.org> wrote: > > > > > On Sun, Oct 10, 2021 at 12:18 AM Warner Losh <imp@bsdimp.com> wrote: > > > > > > > > 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. > > > > > > > > > > It doesn't sound like there's any need to 'patch the past'... the > > > status quo is that the static libncursesw is effectively "broken" > > > because consumers need to know to link to libtinfow. If the linker > > > script idea works (which it seems like it will) then it's a non-issue; > > > either we're building on a system that has the all-in-one libncursesw > > > or we're building against a linker script that also does the right > > > thing. > > > > > > > Yea, the linker script notion is the only thing that's talked about so > > far that's something where we don't need to patch the past. The > > old tools know how to cope with the linker script and will bring the > > right things in. My comments were about removing -DNO_SHARED... > > > > We should remove -DNO_SHARED as well from the bootstrap tools, > > but that's a separate issue if the linker script works. > > > > Warner > > This https://reviews.freebsd.org/D32435 should make freebsd stable 12 and 13 > buildable out of box again on freebsd 14. > > Best regards, > Bapt > I don't know if this is the right place to jump in, but I suspect this is a related issue? I'm trying to do the opposite - building 14 on a 13-STABLE machine. It fails when trying to build ncurses: root@p14s-bsd:/usr/src # uname -v FreeBSD 13.0-STABLE #0 stable/13-n247584-fdbbd118faa: Sun Oct 10 03:25:38 CEST 2021 root@p14s-bsd:/usr/obj/usr/src/amd64.amd64/sys/GENERIC root@p14s-bsd:/usr/src # git pull Already up to date. root@p14s-bsd:/usr/src # git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean root@p14s-bsd:/usr/src # make buildworld > build.log (...) The full log is at http://eurostar.nebdal.no/build.log It's all variations over this: ===> lib/ncurses/ncurses (obj,all,install) Building /usr/obj/usr/src/amd64.amd64/lib/ncurses/ncurses/lib_color.o /usr/src/contrib/ncurses/ncurses/base/lib_color.c:192:5: error: implicit declaration of function '_nc_tiparm' is invalid in C99 [-Werror,-Wimplicit-function-declaration] TIPARM_1(set_a_background, bg), ^ /usr/src/contrib/ncurses/include/nc_tparm.h:81:23: note: expanded from macro 'TIPARM_1' #define TIPARM_1(s,a) _nc_tiparm(1,s,a) ^ /usr/src/contrib/ncurses/ncurses/base/lib_color.c:192:5: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Werror,-Wint-conversion] TIPARM_1(set_a_background, bg), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/src/contrib/ncurses/include/nc_tparm.h:81:23: note: expanded from macro 'TIPARM_1' #define TIPARM_1(s,a) _nc_tiparm(1,s,a) ^~~~~~~~~~~~~~~~~ -DanielN