Files
LithosAnanake/tools/kconfig/Makefile
T

107 lines
3.9 KiB
Makefile

# 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