b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0-only |
| 2 | # =========================================================================== |
| 3 | # OpenWrt configuration targets |
| 4 | |
| 5 | .PHONY: clean all |
| 6 | all: conf mconf |
| 7 | clean: |
| 8 | rm -f $(clean-files) $(hostprogs) |
| 9 | |
| 10 | clean-files := *.o lxdialog/*.o *.moc qconf-moc.cc \ |
| 11 | *conf-cfg # <- This should be removed after 23.05 is EOL |
| 12 | |
| 13 | # =========================================================================== |
| 14 | # Variables needed by the upstream Makefile |
| 15 | |
| 16 | export HOSTPKG_CONFIG=pkg-config |
| 17 | CONFIG_SHELL:=$(SHELL) |
| 18 | src:=$(CURDIR) |
| 19 | obj:=. |
| 20 | Q:=$(if $V,,@) |
| 21 | quiet:=$(if $V,,_silent) |
| 22 | include Kbuild.include |
| 23 | |
| 24 | ### Stripped down upstream Makefile follows: |
| 25 | # =========================================================================== |
| 26 | # object files used by all kconfig flavours |
| 27 | common-objs := confdata.o expr.o lexer.lex.o menu.o parser.tab.o \ |
| 28 | preprocess.o symbol.o util.o |
| 29 | |
| 30 | $(obj)/lexer.lex.o: $(obj)/parser.tab.h |
| 31 | HOSTCFLAGS_lexer.lex.o := -I $(srctree)/$(src) |
| 32 | HOSTCFLAGS_parser.tab.o := -I $(srctree)/$(src) |
| 33 | |
| 34 | # conf: Used for defconfig, oldconfig and related targets |
| 35 | hostprogs += conf |
| 36 | conf-objs := conf.o $(common-objs) |
| 37 | |
| 38 | # nconf: Used for the nconfig target based on ncurses |
| 39 | hostprogs += nconf |
| 40 | nconf-objs := nconf.o nconf.gui.o $(common-objs) |
| 41 | |
| 42 | HOSTLDLIBS_nconf = $(call read-file, $(obj)/nconf-libs) |
| 43 | HOSTCFLAGS_nconf.o = $(call read-file, $(obj)/nconf-cflags) |
| 44 | HOSTCFLAGS_nconf.gui.o = $(call read-file, $(obj)/nconf-cflags) |
| 45 | |
| 46 | $(obj)/nconf: | $(obj)/nconf-libs |
| 47 | $(obj)/nconf.o $(obj)/nconf.gui.o: | $(obj)/nconf-cflags |
| 48 | |
| 49 | # mconf: Used for the menuconfig target based on lxdialog |
| 50 | hostprogs += mconf |
| 51 | lxdialog := $(addprefix lxdialog/, \ |
| 52 | checklist.o inputbox.o menubox.o textbox.o util.o yesno.o) |
| 53 | mconf-objs := mconf.o $(lxdialog) $(common-objs) |
| 54 | |
| 55 | HOSTLDLIBS_mconf = $(call read-file, $(obj)/mconf-libs) |
| 56 | $(foreach f, mconf.o $(lxdialog), \ |
| 57 | $(eval HOSTCFLAGS_$f = $$(call read-file, $(obj)/mconf-cflags))) |
| 58 | |
| 59 | $(obj)/mconf: | $(obj)/mconf-libs |
| 60 | $(addprefix $(obj)/, mconf.o $(lxdialog)): | $(obj)/mconf-cflags |
| 61 | |
| 62 | # qconf: Used for the xconfig target based on Qt |
| 63 | hostprogs += qconf |
| 64 | qconf-cxxobjs := qconf.o qconf-moc.o |
| 65 | qconf-objs := images.o $(common-objs) |
| 66 | |
| 67 | HOSTLDLIBS_qconf = $(call read-file, $(obj)/qconf-libs) |
| 68 | HOSTCXXFLAGS_qconf.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags) |
| 69 | HOSTCXXFLAGS_qconf-moc.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags) |
| 70 | $(obj)/qconf: | $(obj)/qconf-libs |
| 71 | $(obj)/qconf.o $(obj)/qconf-moc.o: | $(obj)/qconf-cflags |
| 72 | |
| 73 | quiet_cmd_moc = MOC $@ |
| 74 | cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc $< -o $@ |
| 75 | |
| 76 | $(obj)/qconf-moc.cc: $(src)/qconf.h FORCE | $(obj)/qconf-bin |
| 77 | $(call if_changed,moc) |
| 78 | |
| 79 | targets += qconf-moc.cc |
| 80 | |
| 81 | # check if necessary packages are available, and configure build flags |
| 82 | cmd_conf_cfg = $< $(addprefix $(obj)/$*conf-, cflags libs bin); touch $(obj)/$*conf-bin |
| 83 | |
| 84 | $(obj)/%conf-cflags $(obj)/%conf-libs $(obj)/%conf-bin: $(src)/%conf-cfg.sh |
| 85 | $(call cmd,conf_cfg) |
| 86 | |
| 87 | clean-files += *conf-cflags *conf-libs *conf-bin |
| 88 | |
| 89 | # =========================================================================== |
| 90 | # OpenWrt rules and final adjustments that need to be made after reading the |
| 91 | # full upstream Makefile |
| 92 | |
| 93 | FORCE: |
| 94 | |
| 95 | ifdef BUILD_SHIPPED_FILES |
| 96 | shipped-files := lexer.lex.c parser.tab.c parser.tab.h |
| 97 | clean-files += $(shipped-files) |
| 98 | |
| 99 | .SECONDARY: $(shipped-files) |
| 100 | |
| 101 | %.tab.c %.tab.h: %.y |
| 102 | bison -l -d -b $* $< |
| 103 | |
| 104 | %.lex.c: %.l |
| 105 | flex -L -o$@ $< |
| 106 | endif |
| 107 | |
| 108 | define link_rule |
| 109 | $(1): LDLIBS+=$$(HOSTLDLIBS_$(1)) |
| 110 | $(1): $($(1)-objs) $$($(1)-cxxobjs) |
| 111 | $(if $($(1)-cxxobjs), $(CXX) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS)) |
| 112 | all-objs += $($(1)-objs) |
| 113 | all-cxxobjs += $($(1)-cxxobjs) |
| 114 | endef |
| 115 | |
| 116 | all-objs:= |
| 117 | all-cxxobjs:= |
| 118 | $(foreach f,$(hostprogs),$(eval $(call link_rule,$f))) |
| 119 | |
| 120 | |
| 121 | $(foreach f,$(sort $(all-objs)), \ |
| 122 | $(eval $f: CFLAGS+=$$(HOSTCFLAGS_$f))) |
| 123 | |
| 124 | $(foreach f,$(sort $(all-cxxobjs)), \ |
| 125 | $(eval $f: CXXFLAGS+=$$(HOSTCXXFLAGS_$f))) |