Patrick Georgi | 3e8ef10 | 2019-11-22 16:54:17 +0100 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0-or-later |
| 2 | |
Patrick Georgi | 53ea1d4 | 2019-11-22 16:55:58 +0100 | [diff] [blame] | 3 | # Early coreboot specific configuration |
| 4 | KBUILD_KCONFIG ?= src/Kconfig |
Patrick Georgi | 3e8ef10 | 2019-11-22 16:54:17 +0100 | [diff] [blame] | 5 | |
Patrick Georgi | 53ea1d4 | 2019-11-22 16:55:58 +0100 | [diff] [blame] | 6 | export LC_ALL=C |
| 7 | export LANG=C |
Patrick Georgi | 3e8ef10 | 2019-11-22 16:54:17 +0100 | [diff] [blame] | 8 | |
Patrick Georgi | 4b8b2a0 | 2021-07-30 09:07:50 -0400 | [diff] [blame] | 9 | DEFCONFIG ?= defconfig |
| 10 | |
Patrick Georgi | 53ea1d4 | 2019-11-22 16:55:58 +0100 | [diff] [blame] | 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 | |
| 26 | kecho := echo |
| 27 | |
| 28 | -include $(objk)/Makefile.real |
Patrick Georgi | 870cbb9 | 2021-07-16 09:34:25 +0200 | [diff] [blame] | 29 | unexport KCONFIG_DEFCONFIG_LIST |
Patrick Georgi | 53ea1d4 | 2019-11-22 16:55:58 +0100 | [diff] [blame] | 30 | |
| 31 | # Fill in Linux kconfig build rules to work |
| 32 | |
| 33 | oldconfig: KCONFIG_STRICT= |
| 34 | |
| 35 | savedefconfig: $(objk)/conf |
| 36 | cp $(DOTCONFIG) $(DEFCONFIG) |
| 37 | $< --savedefconfig=$(DEFCONFIG) $(KBUILD_KCONFIG) |
| 38 | |
| 39 | FORCE: |
| 40 | |
| 41 | filechk=$< > $@ |
| 42 | |
| 43 | $(objk)/%.o: $(srck)/%.c |
| 44 | $(HOSTCC) -I $(srck) -I $(objk) -c $(HOSTCFLAGS_$(notdir $@)) -o $@ $< |
| 45 | |
| 46 | $(objk)/%.o: $(srck)/%.cc |
| 47 | $(HOSTCXX) -I $(srck) -I $(objk) -c $(HOSTCXXFLAGS_$(notdir $@)) -o $@ $< |
| 48 | |
| 49 | $(objk)/%.o: $(objk)/%.c |
| 50 | $(HOSTCC) -I $(srck) -I $(objk) -c -o $@ $< |
| 51 | |
| 52 | $(objk)/%.moc: $(srck)/%.h | $(objk)/qconf-cfg |
| 53 | $(call cmd_moc) |
| 54 | |
| 55 | define hostprogs_template |
| 56 | # $1 entry in hostprogs |
| 57 | $(objk)/$(1): $$(foreach _o,$$($(1)-objs) $$($(1)-cxxobjs),$(objk)/$$(_o)) | $(wildcard $(objk)/$(1)-cfg) |
| 58 | $$(HOSTCXX) -o $$@ $$^ $$(HOSTLDLIBS_$(1)) |
| 59 | endef |
| 60 | |
| 61 | $(foreach prog,$(hostprogs),$(eval $(call hostprogs_template,$(prog)))) |
| 62 | |
Patrick Georgi | 615cdfc | 2021-09-06 16:59:56 +0200 | [diff] [blame] | 63 | # This might be a bit of a chicken & egg problem, using a kconfig flag when |
| 64 | # building kconfig, but if you're messing with the parser you probably know |
| 65 | # what you're doing: make CONFIG_UTIL_GENPARSER=y |
| 66 | ifeq ($(CONFIG_UTIL_GENPARSER),y) |
Patrick Georgi | 116b144 | 2021-09-09 00:44:06 +0200 | [diff] [blame] | 67 | $(objk)/%.tab.c $(objk)/%.tab.h: $(srck)/%.y |
| 68 | bison -t -l --defines -b $(objk)/$* $< |
Patrick Georgi | 53ea1d4 | 2019-11-22 16:55:58 +0100 | [diff] [blame] | 69 | |
| 70 | $(objk)/%.lex.c: $(srck)/%.l |
| 71 | flex -L -o$@ $< |
Patrick Georgi | 3e8ef10 | 2019-11-22 16:54:17 +0100 | [diff] [blame] | 72 | |
Patrick Georgi | 615cdfc | 2021-09-06 16:59:56 +0200 | [diff] [blame] | 73 | else # !CONFIG_UTIL_GENPARSER |
| 74 | |
| 75 | $(objk)/parser.tab.c: | $(objk)/parser.tab.h |
| 76 | |
| 77 | $(objk)/%: $(srck)/%_shipped |
| 78 | cp $< $@ |
| 79 | |
| 80 | endif |
| 81 | |
Patrick Georgi | 3e8ef10 | 2019-11-22 16:54:17 +0100 | [diff] [blame] | 82 | # Support mingw by shipping our own regex implementation |
| 83 | _OS=$(shell uname -s |cut -c-7) |
| 84 | regex-objs= |
| 85 | ifeq ($(_OS),MINGW32) |
| 86 | regex-objs=regex.o |
| 87 | endif |
| 88 | $(objk)/regex.o: $(srck)/regex.c |
| 89 | $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -DHAVE_STRING_H -c -o $@ $< |
| 90 | |
| 91 | conf-objs += $(regex-objs) |
| 92 | mconf-objs += $(regex-objs) |
| 93 | |
| 94 | # Provide tool to convert kconfig output into Ada format |
| 95 | $(objk)/toada: $(objk)/toada.o |
| 96 | $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -o $@ $^ |
| 97 | $(objk)/toada.o: $(srck)/toada.c |
| 98 | $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $< |