Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Mar 2023 08:13:13 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        Dimitry Andric <dim@FreeBSD.org>, freebsd@walstatt-de.de, Current FreeBSD <freebsd-current@freebsd.org>
Subject:   Re: NanoBSD: CURRENT unable to compile 13-STABLE : error: a function definition without a prototype is deprecated ... in C
Message-ID:  <668F3258-534B-4225-BDE6-74784BF57448@yahoo.com>
References:  <668F3258-534B-4225-BDE6-74784BF57448.ref@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
[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:
>>=20
>> Am Mon, 27 Feb 2023 23:46:21 +0100
>> Dimitry Andric <dim@FreeBSD.org> schrieb:
> ...
>>=20
>> 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.
>=20
> 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:
>=20
> 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.
>=20
> This option is only relevant when WITH_LLD_BOOTSTRAP is set.
>=20
> I find the double negative phrasing "do not skip" always confusing. =
But
> the logic is normally:
>=20
> * 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
>=20
> 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.
>=20
>=20
> ...
>>> 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.
>>=20
>> I had a misunderstanding in the terminus "cross compiling", I check =
now the build with this
>> option set to be enabled.
>=20
> 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=3Darm64" 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.

>=20
> 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).

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?668F3258-534B-4225-BDE6-74784BF57448>