107 lines
3.9 KiB
Makefile
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
|