Re: LLVM as a rustc recommendation - BLFS r12.4-11

"Xi Ruoyao" ([email protected] via blfs-dev Mailing List) <[email protected]>
Newsgroups gmane.linux.lfs.beyond.devel
Message-ID <[email protected]>
On Fri, 2025-09-05 at 10:04 +0800, Xi Ruoyao wrote:
> On Thu, 2025-09-04 at 17:29 -0500, rhubarbpieguy wrote:
> > 
> > The rustc bootstrap.toml section contains - llvm-config = 
> > "/usr/bin/llvm-config."  I believe that line prevents rustc compiling 
> > without llvm installed, presenting a conflict as the documentation
> > lists 
> > llvm as recommended.
> 
> It's not a conflict.  If you are omitting an optional dependency you
> often need to change the instructions in the book, not limited to this
> case.
> 
> We already have:
> 
> Recommended means that BLFS strongly suggests this package is installed
> first (except if said to be “runtime,” see below) for a clean and
> trouble-free build, that won't have issues either during the build
> process, or at run-time. The instructions in the book assume these
> packages are installed. In many cases, if a recommended dependency (not
> just “runtime”) is not installed, the built package may lack some
> important functionalities (for example, a video player may be only able
> to play audio). Sometimes, it's needed to modify the book instructions
> to disable those important functionalities. In other cases, the build
> system of the package may build a copy of the dependency (often outdated
> and sometimes with known security vulnerabilities) shipped in the source
> tree, or may be downloaded from the Internet during the build process.
> This increases build time and disk usage. This could potentially cause
> other problems. If a recommended dependency is said to be “runtime,” it
> means that BLFS strongly suggests that this dependency is installed
> before using the package, for getting full functionality.
> 
> in "Notes on Building Software."  Notably we already have
> 
> Sometimes, it's needed to modify the book instructions to disable those
> important functionalities.
> 
> But this is a little inaccurate in this case.  Maybe:
> 
> Sometimes it's needed to modify the book instructions to build with some
> recommended dependencies omitted, in some cases we document how to
> modify the instructions in the Command Explanations sections but those
> modifications are not seriously tested.
> 
> /* snip */
> 
> >     # Comment out following options if you have not installed
> >     # recommended dependencies:
> > 
> > Should there be something similar above - llvm-config = 
> > "/usr/bin/llvm-config?"  I commented out the lines and compiled rustc 
> > without llvm installed.
> 
> The book already has:
> 
> [target.x86_64-unknown-linux-gnu]: the syntax of bootstrap.toml requires
> an llvm-config entry for each target for which system-llvm is to be
> used. Change the target to [target.i686-unknown-linux-gnu] if you are
> building on 32-bit x86. This whole section should be omitted if you wish
> to build against the shipped llvm, but the resulting build will be
> larger and take longer.
> 
> In the Command Explanations section.  Yes it's inconsistent but we use
> the Command Explanations section to document how to omit a recommended
> dependency in almost the entire book, for example in WebKitGTK we don't
> have something like
> 
> cmake -D CMAKE_BUILD_TYPE=Release     \
>       -D CMAKE_INSTALL_PREFIX=/usr    \
> 
> /* snip */
> 
>       -D USE_WOFF2=OFF                \
>       -D USE_GTK4=OFF                 \
>       # omit this if you've not installed libseccomp or bubblewrap or
>       # xdg-dbus-proxy but note that doing so may allow your system to 
>       # be compromised more severely in case a security vulnerability in
>       # webkitgtk or it's dependencies is exploited
>       -D ENABLE_BUBBLEWRAP_SANDBOX=ON \
>       -D USE_SYSPROF_CAPTURE=NO       \
>       -D ENABLE_SPEECH_SYNTHESIS=OFF  \
>       -W no-dev -G Ninja ..           &&
> ninja
> 
> You can see this would look stupid for most of the packages, and it's
> even not possible here: the above case won't work because bash will
> truncate the command before -D ENABLE_BUBBLEWRAP_SANDBOX=ON with that
> comment then.
> 
> It's just the Mozilla packages are some exceptions different from all
> the book.

Oh I guess the problem is:

If a recommended dependency is not installed, a shipped copy in the
Rustc source tarball will be built and used.

It's just misleading.  The shipped copy won't be built and used unless
you modify the instruction.

And the Rustc page itself is inconsistent because it has:

[ ! -e /usr/include/libssh2.h ] || export LIBSSH2_SYS_USE_PKG_CONFIG=1
[ ! -e /usr/include/sqlite3.h ] || export LIBSQLITE3_SYS_USE_PKG_CONFIG=1

but not a condition for llvm.

So to me we should change the note to:

If a recommended dependency is not installed, you need to modify the
instructions to build and use a shipped copy in the Rustc source
tarball.  See the Command Explanations section for details.

And also remove the conditional for *_USE_PKG_CONFIG, and document you
need to omit *_USE_PKG_CONFIG and/or target.* if some recommended
dependency(ies) is/are omitted.

-- 
Xi Ruoyao <[email protected]>

-- 
http://lists.linuxfromscratch.org/sympa/info/blfs-dev
Unsubscribe: See the above information page
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.