# Bespoke build for the vendored Linux Kconfig tooling. # See README.md for what's vendored, what's dropped, and why this Makefile # is hand-written instead of adapting upstream's scripts/kconfig/Makefile # (kept alongside as Makefile.upstream-reference for comparison only -- # it isn't self-contained outside a full kernel Kbuild tree). # # Builds three standalone host binaries: conf, mconf, qconf. # GPL-2.0 vendored source, host-side build tooling only -- see LICENSE. HOSTCC ?= gcc HOSTCXX ?= g++ HOSTPKG_CONFIG ?= pkg-config BISON ?= bison FLEX ?= flex export HOSTPKG_CONFIG HOSTCC CFLAGS_COMMON := -I. -Iscripts-include -Wall -Wno-unused-function -D_GNU_SOURCE -g -O1 .PHONY: all clean all: conf mconf qconf # ============================================================================== # Generated parser/lexer # ============================================================================== parser.tab.c parser.tab.h &: parser.y $(BISON) -d -t -o parser.tab.c $< lexer.lex.c: lexer.l parser.tab.h $(FLEX) -o $@ $< # ============================================================================== # Core engine objects (shared by all three frontends) # ============================================================================== CORE_OBJS := confdata.o expr.o lexer.lex.o menu.o parser.tab.o preprocess.o symbol.o util.o confdata.o expr.o menu.o preprocess.o symbol.o util.o conf.o: %.o: %.c $(HOSTCC) $(CFLAGS_COMMON) -c -o $@ $< lexer.lex.o: lexer.lex.c $(HOSTCC) $(CFLAGS_COMMON) -c -o $@ $< parser.tab.o: parser.tab.c $(HOSTCC) $(CFLAGS_COMMON) -c -o $@ $< # ============================================================================== # conf -- headless config/oldconfig/defconfig/syncconfig # ============================================================================== conf: conf.o $(CORE_OBJS) $(HOSTCC) -o $@ $^ # ============================================================================== # mconf -- ncurses menuconfig # ============================================================================== mconf-cflags.mk: mconf-cfg.sh @sh mconf-cfg.sh .mconf.cflags .mconf.libs @echo "MCONF_CFLAGS := $$(cat .mconf.cflags)" > $@ @echo "MCONF_LIBS := $$(cat .mconf.libs)" >> $@ -include mconf-cflags.mk MCONF_OBJS := mconf.o mnconf-common.o lxdialog/checklist.o lxdialog/inputbox.o \ lxdialog/menubox.o lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o mconf.o mnconf-common.o lxdialog/checklist.o lxdialog/inputbox.o lxdialog/menubox.o \ lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o: %.o: %.c mconf-cflags.mk $(HOSTCC) $(CFLAGS_COMMON) $(MCONF_CFLAGS) -c -o $@ $< mconf: $(MCONF_OBJS) $(CORE_OBJS) mconf-cflags.mk $(HOSTCC) -o $@ $(MCONF_OBJS) $(CORE_OBJS) $(MCONF_LIBS) # ============================================================================== # qconf -- Qt xconfig # ============================================================================== qconf-cflags.mk: qconf-cfg.sh @sh qconf-cfg.sh .qconf.cflags .qconf.libs .qconf.bin @echo "QCONF_CFLAGS := $$(cat .qconf.cflags)" > $@ @echo "QCONF_LIBS := $$(cat .qconf.libs)" >> $@ @echo "QCONF_MOC := $$(cat .qconf.bin)/moc" >> $@ -include qconf-cflags.mk qconf-moc.cc: qconf.h qconf-cflags.mk $(QCONF_MOC) $< -o $@ qconf.o: qconf.cc qconf-cflags.mk $(HOSTCXX) -std=c++17 -fPIC $(QCONF_CFLAGS) -I. -Iscripts-include -c -o $@ $< qconf-moc.o: qconf-moc.cc qconf-cflags.mk $(HOSTCXX) -std=c++17 -fPIC $(QCONF_CFLAGS) -I. -Iscripts-include -c -o $@ $< qconf: qconf.o qconf-moc.o $(CORE_OBJS) qconf-cflags.mk $(HOSTCXX) -o $@ qconf.o qconf-moc.o $(CORE_OBJS) $(QCONF_LIBS) # ============================================================================== clean: rm -f conf mconf qconf rm -f *.o lxdialog/*.o rm -f parser.tab.c parser.tab.h lexer.lex.c qconf-moc.cc rm -f mconf-cflags.mk qconf-cflags.mk .mconf.cflags .mconf.libs rm -f .qconf.cflags .qconf.libs .qconf.bin