Re: NanoBSD: CURRENT unable to compile 13-STABLE : error: a function definition without a prototype is deprecated ... in C
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 02 Mar 2023 16:13:13 UTC
[Seems to have gotten stuck in my Outbox. Trying again.] Dimitry Andric <dim_at_FreeBSD.org> wrote on Date: Thu, 02 Mar 2023 10:13:51 UTC : > On 2 Mar 2023, at 06:41, FreeBSD User <freebsd@walstatt-de.de> wrote: >> >> Am Mon, 27 Feb 2023 23:46:21 +0100 >> Dimitry Andric <dim@FreeBSD.org> schrieb: > ... >> >> I tried to find some documentation on my CURRENT host regarding "WITH_SYSTEM_COMPILER". None >> found via man src.conf, nor via make make.conf. Please delegate me to some place where I can >> find such infos. > > Ah I was confused, WITH_SYSTEM_COMPILER is actually the default, and it > means that you want to skip building the bootstrap compiler, and just > use the host compiler. If allowed?: Having a 13.* build 14.0 does not allow skipping building the bootstrap compiler for buildworld or kernel-toolchain (for the same processor family), for example, if I understand right. In other words, one does not have to explicitly use WITHOUT_SYSTEM_COMPILER for such FreeBSD version- increase builds, even for self-hosted builds: the default works and is WITH_SYSTEM_COMPILER . > The src.conf(5) man page documents the inverse > settings instead: > > WITHOUT_SYSTEM_COMPILER > Do not opportunistically skip building a cross-compiler during > the bootstrap phase of the build. Normally, if the currently > installed compiler matches the planned bootstrap compiler type > and revision, then it will not be built. This does not prevent a > compiler from being built for installation though, only for > building one for the build itself. The WITHOUT_CLANG option > controls that. Explicit WITHOUT_SYSTEM_COMPILER usage is unconditional, unlike WITH_SYSTEM_COMPILER usage (implicit or explicit) depending on both the FreeBSD version differences and the processor family relationship, if I understand right. > WITHOUT_SYSTEM_LINKER > Do not opportunistically skip building a cross-linker during the > bootstrap phase of the build. Normally, if the currently > installed linker matches the planned bootstrap linker type and > revision, then it will not be built. This does not prevent a > linker from being built for installation though, only for > building one for the build itself. The WITHOUT_LLD option > controls that. > > This option is only relevant when WITH_LLD_BOOTSTRAP is set. > > I find the double negative phrasing "do not skip" always confusing. But > the logic is normally: > > * The early phase of buildworld retrieves the versions of your host's > compiler and linker > * It compares it against the versions in the source tree > * If the host compiler and linker are deemed "good enough", they are > used as-is (So I've effectively noted some of the not "good enough" criteria above.) > * If the host compiler or linker are not suitable, the compiler or > linker are bootstrapped from the source tree > > But WITH_SYSTEM_COMPILER turns off all these checks and forces it to use > the host compiler, Are you saying that an implicit WITH_SYSTEM_COMPILER (no explicit WITHOUT_SYSTEM_COMPILER either) works differently than an explicit WITH_SYSTEM_COMPILER for FreeBSD version transitions? If so, I need to correct my expectations. > which might or might not work, depending on the > circumstances. You may have to use NO_WERROR or other tricks. > > > ... >>> The safest solution is to let cross-tools do its thing, which will check >>> the host compiler, and automatically build an appropriate version of the >>> compiler and linker for the stable branch, if required. >> >> I had a misunderstanding in the terminus "cross compiling", I check now the build with this >> option set to be enabled. > > Yes, this is a bit confusing, but in fact it *can* be a real cross > compiler, if you are targeting another architecture, for example doing > "make buildworld TARGET=arm64" from an x86_64 host. In my view/expectation the differences between the Target defaults for the likes of: Target: x86_64-unknown-freebsd13.1 vs: Target: x86_64-unknown-freebsd13.2 vs: Target: x86_64-unknown-freebsd14.0 system compilers is enough to make having FreeBSD from earlier in the list above build targeting a later one in the list as a "bootstrap/cross compile": in other words, either x86_64 vs. not or freebsdA.B vs. freebsdX.Y differences count in the criteria and either changing for FROM->TO ends up needing a bootstrap/cross compiler. > > And of course if you are building natively, it is 'just' a regular > bootstrap compiler. Not for freebsdA.B -> freebsdX.Y transitions, based on changes in default targets (and other details that may sometimes implicitly go with that differing default Target being used in the new compiler). === Mark Millard marklmi at yahoo.com