All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Masahiro Yamada <masahiroy@kernel.org>
Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org
Subject: Re: [PATCH 05/15] kbuild: build init/built-in.a just once
Date: Tue, 13 Sep 2022 01:32:20 -0700	[thread overview]
Message-ID: <YyBAFL9CBsM9gl38@dev-arch.thelio-3990X> (raw)
In-Reply-To: <20220828024003.28873-6-masahiroy@kernel.org>

Hi Masahiro,

On Sun, Aug 28, 2022 at 11:39:53AM +0900, Masahiro Yamada wrote:
> Kbuild builds init/built-in.a twice; first during the ordinary
> directory descending, second from scripts/link-vmlinux.sh.
> 
> We do this because UTS_VERSION contains the build version and the
> timestamp. We cannot update it during the normal directory traversal
> since we do not yet know if we need to update vmlinux. UTS_VERSION is
> temporarily calculated, but omitted from the update check. Otherwise,
> vmlinux would be rebuilt every time.
> 
> When Kbuild results in running link-vmlinux.sh, it increments the
> version number in the .version file and takes the timestamp at that
> time to really fix UTS_VERSION.
> 
> However, updating the same file twice is a footgun. To avoid nasty
> timestamp issues, all build artifacts that depend on init/built-in.a
> must be atomically generated in link-vmlinux.sh, where some of them
> do not need rebuilding.
> 
> To fix this issue, this commit changes as follows:
> 
> [1] Split UTS_VERSION out to include/generated/utsversion.h from
>     include/generated/compile.h
> 
>     include/generated/utsversion.h is generated just before the
>     vmlinux link. It is generated under include/generated/ because
>     some decompressors (s390, x86) use UTS_VERSION.
> 
> [2] Split init_uts_ns and linux_banner out to init/version-timestamp.c
>     from init/version.c
> 
>     init_uts_ns and linux_banner contain UTS_VERSION. During the ordinary
>     directory descending, they are compiled with __weak and used to
>     determine if vmlinux needs relinking. Just before the vmlinux link,
>     they are compiled without __weak to embed the real version and
>     timestamp.
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

<snip>

> diff --git a/init/build-version b/init/build-version
> new file mode 100755
> index 000000000000..39225104f14d
> --- /dev/null
> +++ b/init/build-version
> @@ -0,0 +1,10 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0-only
> +
> +VERSION=$(cat .version) 2>/dev/null &&
> +VERSION=$(expr $VERSION + 1) 2>/dev/null ||
> +VERSION=1
> +
> +echo ${VERSION} > .version
> +
> +echo ${VERSION}

I am seeing

  cat: .version: No such file or directory

at some point in nearly all of my builds in -next. Does the 2>/dev/null
want to be moved into the subshell?

Cheers,
Nathan

  parent reply	other threads:[~2022-09-13  8:32 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-28  2:39 [PATCH 00/15] kbuild: various cleanups Masahiro Yamada
2022-08-28  2:39 ` [PATCH 01/15] kbuild: remove duplicated dependency between modules and modules_check Masahiro Yamada
2022-08-28  2:39 ` [PATCH 02/15] kbuild: refactor single builds of *.ko Masahiro Yamada
2022-08-28  2:39 ` [PATCH 03/15] kbuild: move 'PHONY += modules_prepare' to the common part Masahiro Yamada
2022-08-28  2:39 ` [PATCH 04/15] init/version.c: remove #include <linux/version.h> Masahiro Yamada
2022-08-28  2:39 ` [PATCH 05/15] kbuild: build init/built-in.a just once Masahiro Yamada
2022-09-02  9:41   ` Masahiro Yamada
2022-09-13  8:32   ` Nathan Chancellor [this message]
2022-09-13 11:07     ` Masahiro Yamada
2022-09-14  9:46     ` David Laight
2022-09-14 13:00       ` Masahiro Yamada
2022-11-17 10:00   ` Jon Hunter
2022-11-17 11:08     ` Masahiro Yamada
2022-08-28  2:39 ` [PATCH 06/15] kbuild: generate include/generated/compile.h in top Makefile Masahiro Yamada
2022-08-28  2:39 ` [PATCH 07/15] scripts/mkcompile_h: move LC_ALL=C to '$LD -v' Masahiro Yamada
2022-08-28  2:39 ` [PATCH 08/15] Revert "kbuild: Make scripts/compile.h when sh != bash" Masahiro Yamada
2022-08-28  2:39 ` [PATCH 09/15] kbuild: rename modules.order in sub-directories to .modules.order Masahiro Yamada
2022-08-28  2:39 ` [PATCH 10/15] kbuild: move core-y in top Makefile to ./Kbuild Masahiro Yamada
2022-08-28  2:39 ` [PATCH 11/15] kbuild: move .vmlinux.objs rule to Makefile.modpost Masahiro Yamada
2022-08-28  2:40 ` [PATCH 12/15] kbuild: move vmlinux.o rule to the top Makefile Masahiro Yamada
2022-08-28  2:40 ` [PATCH 13/15] kbuild: unify two modpost invocations Masahiro Yamada
2022-08-28  2:40 ` [PATCH 14/15] kbuild: use obj-y instead extra-y for objects placed at the head Masahiro Yamada
2022-08-28  2:40 ` [PATCH 15/15] kbuild: remove head-y syntax Masahiro Yamada
2022-09-06  5:37 ` [PATCH 00/15] kbuild: various cleanups Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YyBAFL9CBsM9gl38@dev-arch.thelio-3990X \
    --to=nathan@kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.