1# =========================================================================== 2# Kernel configuration targets 3# These targets are used from top-level makefile 4 5PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config 6 7# If a arch/$(SRCARCH)/Kconfig.$(ARCH) file exist use it 8ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/Kconfig.$(ARCH)),) 9 Kconfig := arch/$(SRCARCH)/Kconfig.$(ARCH) 10else 11 Kconfig := arch/$(SRCARCH)/Kconfig 12endif 13 14xconfig: $(obj)/qconf 15 $< $(Kconfig) 16 17gconfig: $(obj)/gconf 18 $< $(Kconfig) 19 20menuconfig: $(obj)/mconf 21 $< $(Kconfig) 22 23config: $(obj)/conf 24 $< $(Kconfig) 25 26oldconfig: $(obj)/conf 27 $< -o $(Kconfig) 28 29silentoldconfig: $(obj)/conf 30 $< -s $(Kconfig) 31 32# Create new linux.po file 33# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files 34# The symlink is used to repair a deficiency in arch/um 35update-po-config: $(obj)/kxgettext 36 xgettext --default-domain=linux \ 37 --add-comments --keyword=_ --keyword=N_ \ 38 --from-code=UTF-8 \ 39 --files-from=scripts/kconfig/POTFILES.in \ 40 --output $(obj)/config.pot 41 $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot 42 $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch 43 (for i in `ls arch/`; \ 44 do \ 45 $(obj)/kxgettext arch/$$i/Kconfig; \ 46 done ) >> $(obj)/config.pot 47 msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \ 48 --output $(obj)/linux.pot 49 $(Q)rm -f arch/um/Kconfig.arch 50 $(Q)rm -f $(obj)/config.pot 51 52PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig 53 54randconfig: $(obj)/conf 55 $< -r $(Kconfig) 56 57allyesconfig: $(obj)/conf 58 $< -y $(Kconfig) 59 60allnoconfig: $(obj)/conf 61 $< -n $(Kconfig) 62 63allmodconfig: $(obj)/conf 64 $< -m $(Kconfig) 65 66defconfig: $(obj)/conf 67ifeq ($(KBUILD_DEFCONFIG),) 68 $< -d $(Kconfig) 69else 70 @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'" 71 $(Q)$< -D arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig) 72endif 73 74%_defconfig: $(obj)/conf 75 $(Q)$< -D arch/$(SRCARCH)/configs/$@ $(Kconfig) 76 77# Help text used by make help 78help: 79 @echo ' config - Update current config utilising a line-oriented program' 80 @echo ' menuconfig - Update current config utilising a menu based program' 81 @echo ' xconfig - Update current config utilising a QT based front-end' 82 @echo ' gconfig - Update current config utilising a GTK based front-end' 83 @echo ' oldconfig - Update current config utilising a provided .config as base' 84 @echo ' silentoldconfig - Same as oldconfig, but quietly' 85 @echo ' randconfig - New config with random answer to all options' 86 @echo ' defconfig - New config with default answer to all options' 87 @echo ' allmodconfig - New config selecting modules when possible' 88 @echo ' allyesconfig - New config where all options are accepted with yes' 89 @echo ' allnoconfig - New config where all options are answered with no' 90 91# lxdialog stuff 92check-lxdialog := $(srctree)/$(src)/lxdialog/check-lxdialog.sh 93 94# Use recursively expanded variables so we do not call gcc unless 95# we really need to do so. (Do not call gcc as part of make mrproper) 96HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) 97HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC)) 98 99HOST_EXTRACFLAGS += -DLOCALE 100 101PHONY += $(obj)/dochecklxdialog 102$(obj)/dochecklxdialog: 103 $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES) 104 105always := dochecklxdialog 106 107 108# =========================================================================== 109# Shared Makefile for the various kconfig executables: 110# conf: Used for defconfig, oldconfig and related targets 111# mconf: Used for the mconfig target. 112# Utilizes the lxdialog package 113# qconf: Used for the xconfig target 114# Based on QT which needs to be installed to compile it 115# gconf: Used for the gconfig target 116# Based on GTK which needs to be installed to compile it 117# object files used by all kconfig flavours 118 119lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o 120lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o 121 122conf-objs := conf.o zconf.tab.o 123mconf-objs := mconf.o zconf.tab.o $(lxdialog) 124kxgettext-objs := kxgettext.o zconf.tab.o 125 126hostprogs-y := conf qconf gconf kxgettext 127 128ifeq ($(MAKECMDGOALS),menuconfig) 129 hostprogs-y += mconf 130endif 131 132ifeq ($(MAKECMDGOALS),xconfig) 133 qconf-target := 1 134endif 135ifeq ($(MAKECMDGOALS),gconfig) 136 gconf-target := 1 137endif 138 139 140ifeq ($(qconf-target),1) 141qconf-cxxobjs := qconf.o 142qconf-objs := kconfig_load.o zconf.tab.o 143endif 144 145ifeq ($(gconf-target),1) 146gconf-objs := gconf.o kconfig_load.o zconf.tab.o 147endif 148 149clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ 150 .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c 151clean-files += mconf qconf gconf 152 153# Add environment specific flags 154HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS)) 155 156# generated files seem to need this to find local include files 157HOSTCFLAGS_lex.zconf.o := -I$(src) 158HOSTCFLAGS_zconf.tab.o := -I$(src) 159 160HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl 161HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK 162 163HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` 164HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \ 165 -D LKC_DIRECT_LINK 166 167$(obj)/qconf.o: $(obj)/.tmp_qtcheck 168 169ifeq ($(qconf-target),1) 170$(obj)/.tmp_qtcheck: $(src)/Makefile 171-include $(obj)/.tmp_qtcheck 172 173# QT needs some extra effort... 174$(obj)/.tmp_qtcheck: 175 @set -e; echo " CHECK qt"; dir=""; pkg=""; \ 176 pkg-config --exists qt 2> /dev/null && pkg=qt; \ 177 pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \ 178 if [ -n "$$pkg" ]; then \ 179 cflags="\$$(shell pkg-config $$pkg --cflags)"; \ 180 libs="\$$(shell pkg-config $$pkg --libs)"; \ 181 moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \ 182 dir="$$(pkg-config $$pkg --variable=prefix)"; \ 183 else \ 184 for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \ 185 if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \ 186 done; \ 187 if [ -z "$$dir" ]; then \ 188 echo "*"; \ 189 echo "* Unable to find the QT3 installation. Please make sure that"; \ 190 echo "* the QT3 development package is correctly installed and"; \ 191 echo "* either install pkg-config or set the QTDIR environment"; \ 192 echo "* variable to the correct location."; \ 193 echo "*"; \ 194 false; \ 195 fi; \ 196 libpath=$$dir/lib; lib=qt; osdir=""; \ 197 $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \ 198 osdir=x$$($(HOSTCXX) -print-multi-os-directory); \ 199 test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \ 200 test -f $$libpath/libqt-mt.so && lib=qt-mt; \ 201 cflags="-I$$dir/include"; \ 202 libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \ 203 moc="$$dir/bin/moc"; \ 204 fi; \ 205 if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \ 206 echo "*"; \ 207 echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \ 208 echo "*"; \ 209 moc="/usr/bin/moc"; \ 210 fi; \ 211 echo "KC_QT_CFLAGS=$$cflags" > $@; \ 212 echo "KC_QT_LIBS=$$libs" >> $@; \ 213 echo "KC_QT_MOC=$$moc" >> $@ 214endif 215 216$(obj)/gconf.o: $(obj)/.tmp_gtkcheck 217 218ifeq ($(gconf-target),1) 219-include $(obj)/.tmp_gtkcheck 220 221# GTK needs some extra effort, too... 222$(obj)/.tmp_gtkcheck: 223 @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then \ 224 if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \ 225 touch $@; \ 226 else \ 227 echo "*"; \ 228 echo "* GTK+ is present but version >= 2.0.0 is required."; \ 229 echo "*"; \ 230 false; \ 231 fi \ 232 else \ 233 echo "*"; \ 234 echo "* Unable to find the GTK+ installation. Please make sure that"; \ 235 echo "* the GTK+ 2.0 development package is correctly installed..."; \ 236 echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \ 237 echo "*"; \ 238 false; \ 239 fi 240endif 241 242$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c 243 244$(obj)/kconfig_load.o: $(obj)/lkc_defs.h 245 246$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h 247 248$(obj)/gconf.o: $(obj)/lkc_defs.h 249 250$(obj)/%.moc: $(src)/%.h 251 $(KC_QT_MOC) -i $< -o $@ 252 253$(obj)/lkc_defs.h: $(src)/lkc_proto.h 254 sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/' 255 256 257### 258# The following requires flex/bison/gperf 259# By default we use the _shipped versions, uncomment the following line if 260# you are modifying the flex/bison src. 261# LKC_GENPARSER := 1 262 263ifdef LKC_GENPARSER 264 265$(obj)/zconf.tab.c: $(src)/zconf.y 266$(obj)/lex.zconf.c: $(src)/zconf.l 267$(obj)/zconf.hash.c: $(src)/zconf.gperf 268 269%.tab.c: %.y 270 bison -l -b $* -p $(notdir $*) $< 271 cp $@ $@_shipped 272 273lex.%.c: %.l 274 flex -L -P$(notdir $*) -o$@ $< 275 cp $@ $@_shipped 276 277%.hash.c: %.gperf 278 gperf < $< > $@ 279 cp $@ $@_shipped 280 281endif 282