1# SPDX-License-Identifier: GPL-2.0-or-later 2 3# Early coreboot specific configuration 4KBUILD_KCONFIG ?= src/Kconfig 5 6export LC_ALL=C 7export LANG=C 8 9DEFCONFIG ?= defconfig 10 11# Include original Makefile, with just enough edits to work for us 12$(objk)/Makefile.real: $(dir $(lastword $(MAKEFILE_LIST)))Makefile 13 mkdir -p $(objk) 14 sed \ 15 -e "s,\$$(obj),\$$(objk),g" \ 16 -e "s,\$$(src),\$$(srck),g" \ 17 -e "s,^help:,help_kconfig help::," \ 18 -e "s,^%.config:,__disable__&," \ 19 -e "s,^savedefconfig:,__disable__&," \ 20 -e "s,\$$(srctree)/arch/\$$(SRCARCH)/configs/\$$(KBUILD_DEFCONFIG),\$$(KBUILD_DEFCONFIG)," \ 21 -e "s,--defconfig=arch/\$$(SRCARCH)/configs/\$$(KBUILD_DEFCONFIG),--defconfig=\$$(KBUILD_DEFCONFIG)," \ 22 -e "/^unexport CONFIG_$$/d" \ 23 $< > $@.tmp 24 mv $@.tmp $@ 25 26kecho := echo 27 28cmd = $(cmd_$(1)) 29cmd_conf_cfg = $< $(addprefix $(obj)/$*conf-, cflags libs bin); touch $(obj)/$*conf-bin 30 31### 32# Read a file, replacing newlines with spaces 33# 34# Make 4.2 or later can read a file by using its builtin function. 35# 36# Imported from Linux upstream: 37# commit 6768fa4bcb6c1618248f135d04b9287ba2724ae0 38# Author: Masahiro Yamada <masahiroy@kernel.org> 39ifneq ($(filter-out 3.% 4.0 4.1, $(MAKE_VERSION)),) 40read-file = $(subst $(newline),$(space),$(file < $1)) 41else 42read-file = $(shell cat $1 2>/dev/null) 43endif 44 45-include $(objk)/Makefile.real 46unexport KCONFIG_DEFCONFIG_LIST 47 48# Fill in Linux kconfig build rules to work 49 50savedefconfig: $(objk)/conf 51 cp $(DOTCONFIG) $(DEFCONFIG) 52 chmod +w $(DEFCONFIG) 53 $< --savedefconfig=$(DEFCONFIG) $(KBUILD_KCONFIG) 54 55FORCE: 56 57filechk=$< > $@ 58 59$(objk)/%.o: $(srck)/%.c 60 $(HOSTCC) -I $(srck) -I $(objk) -c $(HOSTCFLAGS_$(notdir $@)) -o $@ $< 61 62$(objk)/%.o: $(srck)/%.cc 63 $(HOSTCXX) -I $(srck) -I $(objk) -c $(HOSTCXXFLAGS_$(notdir $@)) -o $@ $< 64 65$(objk)/%.o: $(objk)/%.c 66 $(HOSTCC) -I $(srck) -I $(objk) -c -o $@ $< 67 68$(objk)/%.moc: $(srck)/%.h | $(objk)/qconf-cfg 69 $(call cmd_moc) 70 71define hostprogs_template 72# $1 entry in hostprogs 73$(objk)/$(1): $$(foreach _o,$$($(1)-objs) $$($(1)-cxxobjs),$(objk)/$$(_o)) | $(wildcard $(objk)/$(1)-cfg) 74 $$(HOSTCXX) -o $$@ $$^ $$(HOSTLDLIBS_$(1)) 75endef 76 77$(foreach prog,$(hostprogs),$(eval $(call hostprogs_template,$(prog)))) 78 79# This might be a bit of a chicken & egg problem, using a kconfig flag when 80# building kconfig, but if you're messing with the parser you probably know 81# what you're doing: make CONFIG_UTIL_GENPARSER=y 82ifeq ($(CONFIG_UTIL_GENPARSER),y) 83$(objk)/%.tab.c $(objk)/%.tab.h: $(srck)/%.y 84 bison -t -l --defines -b $(objk)/$* $< 85 86$(objk)/%.lex.c: $(srck)/%.l 87 flex -L -o$@ $< 88 89else # !CONFIG_UTIL_GENPARSER 90 91$(objk)/parser.tab.c: | $(objk)/parser.tab.h 92 93$(objk)/%: $(srck)/%_shipped 94 cp $< $@ 95 96endif 97 98# Support mingw by shipping our own regex implementation 99_OS=$(shell uname -s |cut -c-7) 100regex-objs= 101ifeq ($(_OS),MINGW32) 102 regex-objs=regex.o 103endif 104$(objk)/regex.o: $(srck)/regex.c 105 $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -DHAVE_STRING_H -c -o $@ $< 106 107conf-objs += $(regex-objs) 108mconf-objs += $(regex-objs) 109 110# Provide tool to convert kconfig output into Ada format 111$(objk)/toada: $(objk)/toada.o 112 $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -o $@ $^ 113$(objk)/toada.o: $(srck)/toada.c 114 $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $< 115