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>