coreboot-kgpe-d16/util/kconfig/Makefile.inc
Patrick Georgi 615cdfcdb9 util/kconfig: Add pre-built parser
It avoids the dependency on bison/flex, minimally speeds up the build
and also works around weird race conditions in some versions of bison
that need more investigation.

The issue this avoids manifests as a build error when creating
parser.tab.c:

    input in flex scanner failed
    make: *** [util/kconfig/Makefile.inc:66: build/util/kconfig/parser.tab.c] Error 2

Since the error happens within bison the alternative would be to make
bison part of our crossgcc environment to ensure that no broken OS
build is used.

BUG=b:197515860
TEST=things build with bison not installed

Change-Id: Ib35dfb7beafc0a09dc333e962b1e3f33df46a854
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57409
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Raul Rangel <rrangel@chromium.org>
2021-09-13 15:35:03 +00:00

98 lines
2.6 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-or-later
# Early coreboot specific configuration
KBUILD_KCONFIG ?= src/Kconfig
export LC_ALL=C
export LANG=C
DEFCONFIG ?= defconfig
# Include original Makefile, with just enough edits to work for us
$(objk)/Makefile.real: $(dir $(lastword $(MAKEFILE_LIST)))Makefile
mkdir -p $(objk)
sed \
-e "s,\$$(obj),\$$(objk),g" \
-e "s,\$$(src),\$$(srck),g" \
-e "s,^help:,help_kconfig help::," \
-e "s,^%.config:,__disable__&," \
-e "s,^savedefconfig:,__disable__&," \
-e "s,\$$(srctree)/arch/\$$(SRCARCH)/configs/\$$(KBUILD_DEFCONFIG),\$$(KBUILD_DEFCONFIG)," \
-e "s,--defconfig=arch/\$$(SRCARCH)/configs/\$$(KBUILD_DEFCONFIG),--defconfig=\$$(KBUILD_DEFCONFIG)," \
-e "/^unexport CONFIG_$$/d" \
$< > $@.tmp
mv $@.tmp $@
kecho := echo
-include $(objk)/Makefile.real
unexport KCONFIG_DEFCONFIG_LIST
# Fill in Linux kconfig build rules to work
oldconfig: KCONFIG_STRICT=
savedefconfig: $(objk)/conf
cp $(DOTCONFIG) $(DEFCONFIG)
$< --savedefconfig=$(DEFCONFIG) $(KBUILD_KCONFIG)
FORCE:
filechk=$< > $@
$(objk)/%.o: $(srck)/%.c
$(HOSTCC) -I $(srck) -I $(objk) -c $(HOSTCFLAGS_$(notdir $@)) -o $@ $<
$(objk)/%.o: $(srck)/%.cc
$(HOSTCXX) -I $(srck) -I $(objk) -c $(HOSTCXXFLAGS_$(notdir $@)) -o $@ $<
$(objk)/%.o: $(objk)/%.c
$(HOSTCC) -I $(srck) -I $(objk) -c -o $@ $<
$(objk)/%.moc: $(srck)/%.h | $(objk)/qconf-cfg
$(call cmd_moc)
define hostprogs_template
# $1 entry in hostprogs
$(objk)/$(1): $$(foreach _o,$$($(1)-objs) $$($(1)-cxxobjs),$(objk)/$$(_o)) | $(wildcard $(objk)/$(1)-cfg)
$$(HOSTCXX) -o $$@ $$^ $$(HOSTLDLIBS_$(1))
endef
$(foreach prog,$(hostprogs),$(eval $(call hostprogs_template,$(prog))))
# This might be a bit of a chicken & egg problem, using a kconfig flag when
# building kconfig, but if you're messing with the parser you probably know
# what you're doing: make CONFIG_UTIL_GENPARSER=y
ifeq ($(CONFIG_UTIL_GENPARSER),y)
$(objk)/%.tab.c $(objk)/%.tab.h: $(srck)/%.y
bison -t -l --defines -b $(objk)/$* $<
$(objk)/%.lex.c: $(srck)/%.l
flex -L -o$@ $<
else # !CONFIG_UTIL_GENPARSER
$(objk)/parser.tab.c: | $(objk)/parser.tab.h
$(objk)/%: $(srck)/%_shipped
cp $< $@
endif
# Support mingw by shipping our own regex implementation
_OS=$(shell uname -s |cut -c-7)
regex-objs=
ifeq ($(_OS),MINGW32)
regex-objs=regex.o
endif
$(objk)/regex.o: $(srck)/regex.c
$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -DHAVE_STRING_H -c -o $@ $<
conf-objs += $(regex-objs)
mconf-objs += $(regex-objs)
# Provide tool to convert kconfig output into Ada format
$(objk)/toada: $(objk)/toada.o
$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -o $@ $^
$(objk)/toada.o: $(srck)/toada.c
$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $<