Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jul 2018 06:23:49 -0700
From:      Mark Millard <marklmi@yahoo.com>
To:        tech-lists <tech-lists@zyxst.net>
Cc:        FreeBSD Current <freebsd-current@freebsd.org>, freebsd-arm <freebsd-arm@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org>
Subject:   Re: aarch64-arm64 fails to build kernel 12-current raspberry pi 3
Message-ID:  <2F72F7DB-F5DD-471A-B644-9CDE3FABFAC1@yahoo.com>
In-Reply-To: <a8cc68ec-e87d-9133-7ad9-59c5b42ed749@zyxst.net>
References:  <A7BBACBB-44A1-4F95-B4F6-498B72238FC5@yahoo.com> <a8cc68ec-e87d-9133-7ad9-59c5b42ed749@zyxst.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2018-Jul-12, at 2:44 AM, tech-lists <tech-lists at zyxst.net> wrote:

> On 11/07/2018 17:21, Mark Millard wrote:
>> It seems from the quoted material that neither kernel-toolchain nor
>> build world was done before buildkernel . My understanding is that
>> the intent is that one or the other be done first. (But for aarch64
>> currently only buildworld works.)
>=20
> Thanks for this. I'm running a buildworld now.
>=20
> For how long has it been the case that buildworld is needed for =
buildkernel? Coming from amd64 and before that, i386, in situations =
where I've only wanted to install a custom kernel, I was firstly used to =
making and installing it from /sys/{i386,amd64}/conf. Then that broke a =
number of years ago. Then got used to making kernel in /usr/src with =
make buildkernel && make installkernel. And now this is broken, on =
aarch64-arm64. Nobody knows if it's accidental or policy.

It has been true since clang added use of stdint.h to the kernel build.
Prior to this stdint.h was  not needed to build the kernel for any
architecture (as far as I know).

As I remember, in C99 or later stdint.h is one of the headers
required for a conforming freestanding implementation of C99+.

stdint.h was added to C in C99. It was intended to be the subset
of the older inttypes.h that was suitable for freestanding
environments. inttypes.h is defined to include stdint.h for
C99 and later as I remember (or to behave as-if it had?).

https://www.freebsd.org/cgi/man.cgi?build(7) is very explicit about what
is supposed to be the case relative to kernel-toolchain use:

     kernel-toolchain  Rebuild the tools needed	for kernel compilation.	 =
Use
		       this if you did not do a	buildworld first.

In other words: buildkernel is not intended to be =
self-contained/sufficient
according to the build documentation but buildworld should not be =
required.

Note the difference in the buildkernel and buildworld descriptions, =
given
the above:

     buildkernel       Rebuild the kernel and the kernel modules.  The =
object
		       directory can be	changed	from the default =
/usr/obj by
		       setting the MAKEOBJDIRPREFIX make(1) variable.

vs.

     buildworld	      Build everything but the kernel, configure files =
in etc,
		      and release.  The	object directory can be	changed	=
from
		      the default /usr/obj by setting the =
MAKEOBJDIRPREFIX
		      make(1) variable.	 The actual build location =
prefix used
		      is ${MAKEOBJDIRPREFIX}${.CURDIR} for native =
builds, and
		      ${MAKEOBJDIRPREFIX}/${TARGET}${.CURDIR} for cross	=
builds
		      and native builds	with variable =
CROSS_BUILD_TESTING set.


Currently, overall, FreeBSD does not meet its own criteria for aarch64 =
relative
to kernel-toolchain .

As far as I can tell the issue can be summarized relative to =
kernel-toolchain
by saying that kernel-toolchain does not currently establish a (full)
freestanding C99 environment relative to the headers but clang requires
(at least) one of the missing items ( stdint.h ) for aarch64.

=3D=3D=3D
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2F72F7DB-F5DD-471A-B644-9CDE3FABFAC1>