Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Nov 2015 17:38:21 -0800
From:      Bryan Drewery <bdrewery@FreeBSD.org>
To:        "Simon J. Gerraty" <sjg@juniper.net>
Cc:        brooks@FreeBSD.org, imp@FreeBSD.org, emaste@FreeBSD.org, toolchain@FreeBSD.org
Subject:   Re: Meta mode toolchain bootstrapping [was Re: FreeBSD targets/ out-of-date]
Message-ID:  <56453F0D.90206@FreeBSD.org>
In-Reply-To: <13427.1447371730@chaos>
References:  <55E769EF.7090908@FreeBSD.org> <4924.1441306006@chaos> <56450AB8.90402@FreeBSD.org> <13427.1447371730@chaos>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--0oqmDci2hpNGxNBp5Rtq0eMQ7TI1r758V
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: quoted-printable

On 11/12/2015 3:42 PM, Simon J. Gerraty wrote:
> Bryan Drewery <bdrewery@FreeBSD.org> wrote:
>=20
>> On 9/3/2015 11:46 AM, Simon J. Gerraty wrote:
>>> Anyway, bootstrap-toolchain leverages src/Makefile.inc1 to build an
>>> initial set of tools.  It then attempts to use that to build toolchai=
n
>>> for MACHINE=3Dhost which is currently failing because in-tree libelf =
and
>>> libdwarf are needed and libelf needs sys/sys/elf_common.h but but tha=
t
>>> doesn't currently get staged for host (we try to minimize what we put=
 in
>>> host stage tree).
>>
>> Using the special hack you came up with for lib/libelf, and a lot of
>> other fixes for replacing binutils with elftoolchain, I've managed to
>> get the targets/pseduo/bootstrap-tools build working again. I will
>> commit this likely today or tomorrow.
>=20
> Cool - thanks
> =20
>> However...
>=20
>>> It may be better to simply skip targets/pseudo/toolchain.host
>>> that will work so long as we set TOOLSDIR to point to the stuff built=
 by
>>> Makefile.inc1=20
>>>
>>> Depending on where we are with external toolchian support that would
>>> make sense - might be able to skip bootstrap-toolchain completely
>>> which would be nice.
>>
>> I think this is more right because there's many more people thinking
>> about, testing daily, and maintaining the bootstrap logic in
>> Makefile.inc1. The way targets/pseudo/bootstrap-tools works currently
>> lead to bitrot and breakage with the elftoolchain replacement. It will=

>> very easily happen again.
>=20
> I'd be favor of removing the need completely.
>=20
> All that is required is *some* means of producing a viable toolchain in=

> such a way that you can point a variable at it.
>=20
>> What I plan to do is make pseudo/targets/bootstrap-tools always build
>> all of cross-tools,etc, from Makefile.inc1 respecting its own internal=

>> logic for when to bootstrap the compiler (without us telling it to ski=
p
>> the bootstrap compiler) and then add pseudo/targets/bootstrap-tools as=
 a
>> global DIRDEP. Given the use of cookies, this will only be done once p=
er
>> meta build, but it at least won't be a manual step anymore. For the
>=20
> That can still add a lot of time to build, and IIRC building clang alon=
e
> poses problems for smaller machines (though using a mutex for linking
> clang bits could at least serialize the huge linker steps so as to avoi=
d
> exhausting memory).
>=20
> I quite like the way NetBSD allow separating the tools from the rest of=

> the build.  I do the equivalent of 'make tools' very rarely - and so
> do not care how [in]efficient it is.
> IIRC it will throw an error if your tools are incompatible - prompting
> an update.
>=20
> I would suggest if you want to be able to hook bootstrap-tools in
> always, that you do it via a knob so it can be disabled.

I would just add some knob like WITH_BOOTSTRAP_TOOLCHAIN or
WITH_EXTERNAL_TOOLCHAIN to make this and the clang bootstrap just be
skipped and resort to the way the meta build works now.

>=20
>> record, I do plan to extend .MAKE.MODE=3Dmeta to buildworld and its
>> bootstrapping as well, which will give a lot of incremental build
>> improvements to it.
>=20
> WITH_META_FILES should give you improvements already in that regard.

Yes, it's a step. We'll need cookies in a lot of places too. I wish
WITH_META_MODE had been WITH_META_BUILD or WITH_DIRDEPS_BUILD so I could
check for "META_MODE" in the buildworld world and for discussion sake.
It seems I can use ${.MAKE.MODE:M*meta*} but that :U is needed in all
the uses. I'm not sure yet if :U really is needed. We have some
${MK_META_MODE} checks now around some cookies that would need to change
for what I'm planning.

>=20
>> This means that the meta build will then default to bootstrapping the
>> compiler, which we really must do to build the source tree reliably.
>=20
>> There's really no reason the meta build should default to not
>> bootstrapping the compiler. Setting WITHOUT_CROSS_COMPILER or
>> WITHOUT_CLANG_BOOTSTRAP will avoid this and use just the host compiler=

>> as the meta build does now. So there's no real problem for those peopl=
e
>> who want to skip the clang bootstrap.
>=20
> Ok, so long as there is a way to do so.
> Otherwise we'd need to add it locally for our own builds - where we nee=
d
> to use the toolchains provided by our compiler team.

Yes for sure. As noted above. At Isilon when a developer is building
they have no interest in building the toolchain 99% of the time. This is
why I am so committed to making this automatically skip the toolchain if
possible. As for having an external compiler from a team, that's kind of
already in the "external compiler" realm, so a WITH_EXTERNAL_COMPILER
would make sense to short-circuit all of what I'm wanting. Then you can
add it to your local make.conf or local.sys.mk and not have any change
in behavior.

>=20
>> Then, I will work on the project of "building clang less" which will
>> avoid building the bootstrap compiler for both the meta mode build and=

>> the buildworld build (and universe eventually) if /usr/bin/cc satisfie=
s
>> the needs (can cross compile the TARGET and is "new enough" compared t=
o
>> the version we want). This is not trivial but I think it is possible a=
nd
>> it will make everyone happy!
>=20
> Indeed.  As I say, NetBSD have this reasonably sorted.
> But of course they have 2k line shell script driving a lot of it ;-)

Yes the NetBSD build, behavior wise, really impresses me.

>=20
>> Related tidbit, using WITHOUT_CROSS_COMPILER (or WITHOUT_*_BOOTSTRAP)
>> with buildworld leads to a broken build currently since it is the user=

>> basically asking to use their default external toolchain of /usr/bin/*=
,
>> but the logic does not kick in to use --sysroot against WORLDTMP. I pl=
an
>> to fix this soon as well.
>=20
> Assuming that you have previously built the correct toolchain
> it should be valid to have something like -DWITH_TOOLSDIR
> -DWITHOUT_BOOTSTRAP_TOOLSDIR (or -DWITHOUT_TOOLSDIR_BOOTSTRAP)
> Such that the build logic is identical - all that is being skipped is
> the expense of re-generating the toolchain
>=20


--=20
Regards,
Bryan Drewery


--0oqmDci2hpNGxNBp5Rtq0eMQ7TI1r758V
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBAgAGBQJWRT8OAAoJEDXXcbtuRpfP/xwH/A8moFzEflsJJvpXjEWxnCy+
jH0vXJsQTzAfLZv7LeqvN8GnPbI/hta/fwhXnLJXdePYWdmriHkQhYtk1IIccRz6
8Da/li4i+8Acn/Pf+P2Ka0Wlzf+upeNYlURiKt+p1oZqVkzlBQp32kpnPiy/r+ID
DXuAAg2fRbND13VWsptx07sCzVOtMw0eAaGu9Gbgyf4K+u9bJMMJ6sJa5KoPbZKl
df6zNhnwZsWY67kt4cL2JgW+whrCX+Mn8cVNLKahHgUNbPxL3qUTIJPbefu4JB35
jhp9hDz+2dU/JIOULTMK9ULaAH2+rjTn9K2a8I8xSL64YypIg+KdzRqrkY2BHt8=
=P1il
-----END PGP SIGNATURE-----

--0oqmDci2hpNGxNBp5Rtq0eMQ7TI1r758V--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56453F0D.90206>