# =========================================================================== # OpenWrt configuration targets # These targets are used from top-level makefile # =========================================================================== # Shared Makefile for the various kconfig executables: # conf: Used for defconfig, oldconfig and related targets # mconf: Used for the mconfig target. # Utilizes the lxdialog package # qconf: Used for the xconfig target # Based on Qt which needs to be installed to compile it # object files used by all kconfig flavours # Platform specific fixes # # FreeBSD check_lxdialog = $(shell $(SHELL) $(CURDIR)/lxdialog/check-lxdialog.sh -$(1)) export CFLAGS += -DKBUILD_NO_NLS -I. $(call check_lxdialog,ccflags) export CXXFLAGS += -DKBUILD_NO_NLS DISTRO-PKG-CONFIG := $(shell which -a pkg-config | grep -E '\/usr' | head -n 1) conf-objs := conf.o zconf.tab.o mconf-objs := mconf.o zconf.tab.o qconf-cxxobjs := qconf.o qconf-objs := zconf.tab.o lxdialog-objs := \ lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o \ lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o clean-files := zconf.tab.c lex.zconf.c zconf.hash.c # Remove qconf junk files clean-files += $(qconf-cxxobjs) qconf.moc .tmp_qtcheck qconf all: conf mconf conf: $(conf-objs) mconf: $(mconf-objs) $(lxdialog-objs) $(CC) -o $@ $^ $(call check_lxdialog,ldflags $(CC)) qconf: $(qconf-cxxobjs) $(qconf-objs) ifneq ($(DISTRO-PKG-CONFIG),) $(CXX) $(HOSTLOADLIBES_qconf) -o $@ $^ else echo "You don't have 'pkg-config' installed. Cannot continue" echo "For now, you may use 'make menuconfig' instead of 'make xconfig'" endif clean: rm -f *.o lxdialog/*.o $(clean-files) conf mconf zconf.tab.o: zconf.lex.c zconf.hash.c confdata.c kconfig_load.o: lkc_defs.h zconf.tab.c: zconf.y zconf.lex.c: zconf.l zconf.hash.c: zconf.gperf %.tab.c: %.y cp $@_shipped $@ || bison -l -b $* -p $(notdir $*) $< %.lex.c: %.l cp $@_shipped $@ || flex -L -P$(notdir $*) -o$@ $< %.hash.c: %.gperf cp $@_shipped $@ || gperf < $< > $@ ifeq ($(MAKECMDGOALS),qconf) qconf.o: .tmp_qtcheck .tmp_qtcheck: Makefile -include .tmp_qtcheck # Qt needs some extra effort... .tmp_qtcheck: @set -e; echo " CHECK qt"; \ if $(DISTRO-PKG-CONFIG) --exists Qt5Core; then \ cflags="-std=c++11 -fPIC `$(DISTRO-PKG-CONFIG) --cflags Qt5Core Qt5Gui Qt5Widgets`"; \ libs=`$(DISTRO-PKG-CONFIG) --libs Qt5Core Qt5Gui Qt5Widgets`; \ moc=`$(DISTRO-PKG-CONFIG) --variable=host_bins Qt5Core`/moc; \ elif $(DISTRO-PKG-CONFIG) --exists QtCore; then \ cflags=`$(DISTRO-PKG-CONFIG) --cflags QtCore QtGui`; \ libs=`$(DISTRO-PKG-CONFIG) --libs QtCore QtGui`; \ moc=`$(DISTRO-PKG-CONFIG) --variable=moc_location QtCore`; \ else \ echo >&2 "*"; \ echo >&2 "* Could not find Qt via $(DISTRO-PKG-CONFIG)."; \ echo >&2 "* Please install either Qt 4.8 or 5.x. and make sure it's in PKG_CONFIG_PATH"; \ echo >&2 "*"; \ exit 1; \ fi; \ echo "KC_QT_CFLAGS=$$cflags" > $@; \ echo "KC_QT_LIBS=$$libs" >> $@; \ echo "KC_QT_MOC=$$moc" >> $@ endif #Define compiler flags to build qconf HOSTLOADLIBES_qconf = $(KC_QT_LIBS) HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) qconf.o: qconf.moc qconf.o: CXXFLAGS+=$(HOSTCXXFLAGS_qconf.o) moc = $(KC_QT_MOC) -i $< -o $@ %.moc: %.h .tmp_qtcheck $(call moc)