mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 16:14:30 +07:00
6ba7dc6616
We generally expect bison to create not only a C file, but also a header, which will be included from the lexer. Currently, Kbuild generates them in separate rules. So, for instance, when building Kconfig, you will notice bison is invoked twice: 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.h HOSTCC scripts/kconfig/lexer.lex.o YACC scripts/kconfig/parser.tab.c HOSTCC scripts/kconfig/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTLD scripts/kconfig/conf Make handles such cases nicely in pattern rules [1]. Merge the two rules so that one invokcation of bison can generate both of them. 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/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTLD scripts/kconfig/conf [1] Pattern rule GNU Make manual says: "Pattern rules may have more than one target. Unlike normal rules, this does not act as many different rules with the same prerequisites and recipe. If a pattern rule has multiple targets, make knows that the rule's recipe is responsible for making all of the targets. The recipe is executed only once to make all the targets. When searching for a pattern rule to match a target, the target patterns of a rule other than the one that matches the target in need of a rule are incidental: make worries only about giving a recipe and prerequisites to the file presently in question. However, when this file's recipe is run, the other targets are marked as having been updated themselves." https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
32 lines
966 B
Makefile
32 lines
966 B
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
hostprogs-y := genksyms
|
|
always := $(hostprogs-y)
|
|
|
|
genksyms-objs := genksyms.o parse.tab.o lex.lex.o
|
|
|
|
# FIXME: fix the ambiguous grammar in parse.y and delete this hack
|
|
#
|
|
# Suppress shift/reduce, reduce/reduce conflicts warnings
|
|
# unless W=1 is specified.
|
|
#
|
|
# Just in case, run "$(YACC) --version" without suppressing stderr
|
|
# so that 'bison: not found' will be displayed if it is missing.
|
|
ifeq ($(findstring 1,$(KBUILD_ENABLE_EXTRA_GCC_CHECKS)),)
|
|
|
|
quiet_cmd_bison_no_warn = $(quiet_cmd_bison)
|
|
cmd_bison_no_warn = $(YACC) --version >/dev/null; \
|
|
$(cmd_bison) 2>/dev/null
|
|
|
|
$(obj)/pars%.tab.c $(obj)/pars%.tab.h: $(src)/pars%.y FORCE
|
|
$(call if_changed,bison_no_warn)
|
|
|
|
endif
|
|
|
|
# -I needed for generated C source (shipped source)
|
|
HOSTCFLAGS_parse.tab.o := -I $(srctree)/$(src)
|
|
HOSTCFLAGS_lex.lex.o := -I $(srctree)/$(src)
|
|
|
|
# dependencies on generated files need to be listed explicitly
|
|
$(obj)/lex.lex.o: $(obj)/parse.tab.h
|