Re: [PATCH v3 1/3] scripts: kconfig: merge_config.sh: refactor from shell/sed/grep to awk
From: Andreas Larsson
Date: Mon Mar 09 2026 - 12:39:08 EST
On 2026-01-22 11:57, Mikko Rapeli wrote:
> From: Anders Roxell <anders.roxell@xxxxxxxxxx>
>
> merge_config.sh shell/sed/grep loop scales poorly and is slow.
> With Yocto genericarm64 kernel and around 190 config fragments
> the script takes more than 20 minutes to run on a fast build machine.
> Re-implementation with awk does the same job in 10 seconds.
> Using awk since it is likely available in the build environments
> and using perl, python etc would introduce more complex runtime
> dependencies. awk is good enough and lot better than shell/sed/grep.
>
> Output stays the same but changed execution time means that
> parallel job output may be ordered differently.
>
> Signed-off-by: Anders Roxell <anders.roxell@xxxxxxxxxx>
> Signed-off-by: Mikko Rapeli <mikko.rapeli@xxxxxxxxxx>
> ---
> scripts/kconfig/merge_config.sh | 168 ++++++++++++++++++++++++--------
> 1 file changed, 128 insertions(+), 40 deletions(-)
Hi,
Commit 5fa9b82cbcfc ("scripts: kconfig: merge_config.sh: refactor from
shell/sed/grep to awk") breaks merge_config.sh for me:
---------->%----------
$ make tiny.config
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/conf
The base file '.config' does not exist. Creating one...
Using .config as base
Merging ./kernel/configs/tiny.config
awk: cannot open ./.tmp.config.U9SROCKTBj.new (No such file or directory)
mv: cannot stat './.tmp.config.U9SROCKTBj.new': No such file or directory
make[2]: *** [scripts/kconfig/Makefile:112: tiny.config] Error 1
make[1]: *** [<kernel-source-top-dir>/Makefile:744: tiny.config] Error 2
make: *** [Makefile:248: __sub-make] Error 2
---------->%----------
with this underlying call to merge_config.sh, an empty .config and where
my awk is GNU Awk 5.1.0:
---------->%----------
$ make tiny.config V=1
make --no-print-directory -C <kernel-source-top-dir> \
-f <kernel-source-top-dir>/Makefile tiny.config
make -f ./scripts/Makefile.build obj=scripts/basic
make -f ./scripts/Makefile.build obj=scripts/kconfig tiny.config
# cmd_merge_fragments tiny.config
./scripts/kconfig/merge_config.sh -m .config ./kernel/configs/tiny.config ./arch/x86/configs/tiny.config
...
$ awk --version
GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
---------->%----------
At 5fa9b82cbcfc~ things works as expected.
Cheers,
Andreas