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>