linux/scripts/kconfig/Makefile
<<
>>
Prefs
   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        localmodconfig localyesconfig
   7
   8ifdef KBUILD_KCONFIG
   9Kconfig := $(KBUILD_KCONFIG)
  10else
  11Kconfig := 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        $< --oldaskconfig $(Kconfig)
  25
  26nconfig: $(obj)/nconf
  27        $< $(Kconfig)
  28
  29oldconfig: $(obj)/conf
  30        $< --$@ $(Kconfig)
  31
  32silentoldconfig: $(obj)/conf
  33        $(Q)mkdir -p include/generated
  34        $< --$@ $(Kconfig)
  35
  36# if no path is given, then use src directory to find file
  37ifdef LSMOD
  38LSMOD_F := $(LSMOD)
  39ifeq ($(findstring /,$(LSMOD)),)
  40  LSMOD_F := $(objtree)/$(LSMOD)
  41endif
  42endif
  43
  44localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
  45        $(Q)mkdir -p include/generated
  46        $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
  47        $(Q)if [ -f .config ]; then                                     \
  48                        cmp -s .tmp.config .config ||                   \
  49                        (mv -f .config .config.old.1;                   \
  50                         mv -f .tmp.config .config;                     \
  51                         $(obj)/conf --silentoldconfig $(Kconfig);      \
  52                         mv -f .config.old.1 .config.old)               \
  53        else                                                            \
  54                        mv -f .tmp.config .config;                      \
  55                        $(obj)/conf --silentoldconfig $(Kconfig);       \
  56        fi
  57        $(Q)rm -f .tmp.config
  58
  59localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
  60        $(Q)mkdir -p include/generated
  61        $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
  62        $(Q)sed -i s/=m/=y/ .tmp.config
  63        $(Q)if [ -f .config ]; then                                     \
  64                        cmp -s .tmp.config .config ||                   \
  65                        (mv -f .config .config.old.1;                   \
  66                         mv -f .tmp.config .config;                     \
  67                         $(obj)/conf --silentoldconfig $(Kconfig);      \
  68                         mv -f .config.old.1 .config.old)               \
  69        else                                                            \
  70                        mv -f .tmp.config .config;                      \
  71                        $(obj)/conf --silentoldconfig $(Kconfig);       \
  72        fi
  73        $(Q)rm -f .tmp.config
  74
  75# Create new linux.pot file
  76# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
  77# The symlink is used to repair a deficiency in arch/um
  78update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
  79        $(Q)echo "  GEN config"
  80        $(Q)xgettext --default-domain=linux              \
  81            --add-comments --keyword=_ --keyword=N_      \
  82            --from-code=UTF-8                            \
  83            --files-from=scripts/kconfig/POTFILES.in     \
  84            --output $(obj)/config.pot
  85        $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
  86        $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
  87        $(Q)(for i in `ls arch/*/Kconfig`;               \
  88            do                                           \
  89                echo "  GEN $$i";                        \
  90                $(obj)/kxgettext $$i                     \
  91                     >> $(obj)/config.pot;               \
  92            done )
  93        $(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
  94            --output $(obj)/linux.pot
  95        $(Q)rm -f arch/um/Kconfig.arch
  96        $(Q)rm -f $(obj)/config.pot
  97
  98PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
  99
 100allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
 101        $< --$@ $(Kconfig)
 102
 103PHONY += listnewconfig oldnoconfig savedefconfig defconfig
 104
 105listnewconfig oldnoconfig: $(obj)/conf
 106        $< --$@ $(Kconfig)
 107
 108savedefconfig: $(obj)/conf
 109        $< --$@=defconfig $(Kconfig)
 110
 111defconfig: $(obj)/conf
 112ifeq ($(KBUILD_DEFCONFIG),)
 113        $< --defconfig $(Kconfig)
 114else
 115        @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
 116        $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
 117endif
 118
 119%_defconfig: $(obj)/conf
 120        $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
 121
 122# Help text used by make help
 123help:
 124        @echo  '  config          - Update current config utilising a line-oriented program'
 125        @echo  '  nconfig         - Update current config utilising a ncurses menu based program'
 126        @echo  '  menuconfig      - Update current config utilising a menu based program'
 127        @echo  '  xconfig         - Update current config utilising a QT based front-end'
 128        @echo  '  gconfig         - Update current config utilising a GTK based front-end'
 129        @echo  '  oldconfig       - Update current config utilising a provided .config as base'
 130        @echo  '  localmodconfig  - Update current config disabling modules not loaded'
 131        @echo  '  localyesconfig  - Update current config converting local mods to core'
 132        @echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
 133        @echo  '  defconfig       - New config with default from ARCH supplied defconfig'
 134        @echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
 135        @echo  '  allnoconfig     - New config where all options are answered with no'
 136        @echo  '  allyesconfig    - New config where all options are accepted with yes'
 137        @echo  '  allmodconfig    - New config selecting modules when possible'
 138        @echo  '  alldefconfig    - New config with all symbols set to default'
 139        @echo  '  randconfig      - New config with random answer to all options'
 140        @echo  '  listnewconfig   - List new options'
 141        @echo  '  oldnoconfig     - Same as silentoldconfig but set new symbols to n (unset)'
 142
 143# lxdialog stuff
 144check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
 145
 146# Use recursively expanded variables so we do not call gcc unless
 147# we really need to do so. (Do not call gcc as part of make mrproper)
 148HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
 149HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 150
 151HOST_EXTRACFLAGS += -DLOCALE
 152
 153
 154# ===========================================================================
 155# Shared Makefile for the various kconfig executables:
 156# conf:   Used for defconfig, oldconfig and related targets
 157# nconf:  Used for the nconfig target.
 158#         Utilizes ncurses
 159# mconf:  Used for the menuconfig target
 160#         Utilizes the lxdialog package
 161# qconf:  Used for the xconfig target
 162#         Based on QT which needs to be installed to compile it
 163# gconf:  Used for the gconfig target
 164#         Based on GTK which needs to be installed to compile it
 165# object files used by all kconfig flavours
 166
 167lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
 168lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
 169
 170conf-objs       := conf.o  zconf.tab.o
 171mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
 172nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
 173kxgettext-objs  := kxgettext.o zconf.tab.o
 174
 175hostprogs-y := conf qconf gconf kxgettext
 176
 177ifeq ($(MAKECMDGOALS),nconfig)
 178        hostprogs-y += nconf
 179endif
 180
 181ifeq ($(MAKECMDGOALS),menuconfig)
 182        hostprogs-y += mconf
 183endif
 184
 185ifeq ($(MAKECMDGOALS),xconfig)
 186        qconf-target := 1
 187endif
 188ifeq ($(MAKECMDGOALS),gconfig)
 189        gconf-target := 1
 190endif
 191
 192
 193ifeq ($(qconf-target),1)
 194qconf-cxxobjs   := qconf.o
 195qconf-objs      := kconfig_load.o zconf.tab.o
 196endif
 197
 198ifeq ($(gconf-target),1)
 199gconf-objs      := gconf.o kconfig_load.o zconf.tab.o
 200endif
 201
 202clean-files     := lkc_defs.h qconf.moc .tmp_qtcheck \
 203                   .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
 204clean-files     += mconf qconf gconf nconf
 205clean-files     += config.pot linux.pot
 206
 207# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
 208PHONY += $(obj)/dochecklxdialog
 209$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
 210$(obj)/dochecklxdialog:
 211        $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
 212
 213always := dochecklxdialog
 214
 215# Add environment specific flags
 216HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
 217
 218# generated files seem to need this to find local include files
 219HOSTCFLAGS_lex.zconf.o  := -I$(src)
 220HOSTCFLAGS_zconf.tab.o  := -I$(src)
 221
 222HOSTLOADLIBES_qconf     = $(KC_QT_LIBS) -ldl
 223HOSTCXXFLAGS_qconf.o    = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
 224
 225HOSTLOADLIBES_gconf     = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
 226HOSTCFLAGS_gconf.o      = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
 227                          -D LKC_DIRECT_LINK
 228
 229HOSTLOADLIBES_nconf     = -lmenu -lpanel -lncurses
 230$(obj)/qconf.o: $(obj)/.tmp_qtcheck
 231
 232ifeq ($(qconf-target),1)
 233$(obj)/.tmp_qtcheck: $(src)/Makefile
 234-include $(obj)/.tmp_qtcheck
 235
 236# QT needs some extra effort...
 237$(obj)/.tmp_qtcheck:
 238        @set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
 239        pkg-config --exists qt 2> /dev/null && pkg=qt; \
 240        pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
 241        if [ -n "$$pkg" ]; then \
 242          cflags="\$$(shell pkg-config $$pkg --cflags)"; \
 243          libs="\$$(shell pkg-config $$pkg --libs)"; \
 244          moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
 245          dir="$$(pkg-config $$pkg --variable=prefix)"; \
 246        else \
 247          for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
 248            if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
 249          done; \
 250          if [ -z "$$dir" ]; then \
 251            echo "*"; \
 252            echo "* Unable to find the QT3 installation. Please make sure that"; \
 253            echo "* the QT3 development package is correctly installed and"; \
 254            echo "* either install pkg-config or set the QTDIR environment"; \
 255            echo "* variable to the correct location."; \
 256            echo "*"; \
 257            false; \
 258          fi; \
 259          libpath=$$dir/lib; lib=qt; osdir=""; \
 260          $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
 261            osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
 262          test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
 263          test -f $$libpath/libqt-mt.so && lib=qt-mt; \
 264          cflags="-I$$dir/include"; \
 265          libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
 266          moc="$$dir/bin/moc"; \
 267        fi; \
 268        if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
 269          echo "*"; \
 270          echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
 271          echo "*"; \
 272          moc="/usr/bin/moc"; \
 273        fi; \
 274        echo "KC_QT_CFLAGS=$$cflags" > $@; \
 275        echo "KC_QT_LIBS=$$libs" >> $@; \
 276        echo "KC_QT_MOC=$$moc" >> $@
 277endif
 278
 279$(obj)/gconf.o: $(obj)/.tmp_gtkcheck
 280
 281ifeq ($(gconf-target),1)
 282-include $(obj)/.tmp_gtkcheck
 283
 284# GTK needs some extra effort, too...
 285$(obj)/.tmp_gtkcheck:
 286        @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then               \
 287                if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then                  \
 288                        touch $@;                                                               \
 289                else                                                                    \
 290                        echo "*";                                                       \
 291                        echo "* GTK+ is present but version >= 2.0.0 is required.";     \
 292                        echo "*";                                                       \
 293                        false;                                                          \
 294                fi                                                                      \
 295        else                                                                            \
 296                echo "*";                                                               \
 297                echo "* Unable to find the GTK+ installation. Please make sure that";   \
 298                echo "* the GTK+ 2.0 development package is correctly installed...";    \
 299                echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0.";                 \
 300                echo "*";                                                               \
 301                false;                                                                  \
 302        fi
 303endif
 304
 305$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
 306
 307$(obj)/kconfig_load.o: $(obj)/lkc_defs.h
 308
 309$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
 310
 311$(obj)/gconf.o: $(obj)/lkc_defs.h
 312
 313$(obj)/%.moc: $(src)/%.h
 314        $(KC_QT_MOC) -i $< -o $@
 315
 316$(obj)/lkc_defs.h: $(src)/lkc_proto.h
 317        sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
 318
 319# Extract gconf menu items for I18N support
 320$(obj)/gconf.glade.h: $(obj)/gconf.glade
 321        intltool-extract --type=gettext/glade $(obj)/gconf.glade
 322
 323###
 324# The following requires flex/bison/gperf
 325# By default we use the _shipped versions, uncomment the following line if
 326# you are modifying the flex/bison src.
 327# LKC_GENPARSER := 1
 328
 329ifdef LKC_GENPARSER
 330
 331$(obj)/zconf.tab.c: $(src)/zconf.y
 332$(obj)/lex.zconf.c: $(src)/zconf.l
 333$(obj)/zconf.hash.c: $(src)/zconf.gperf
 334
 335%.tab.c: %.y
 336        bison -l -b $* -p $(notdir $*) $<
 337        cp $@ $@_shipped
 338
 339lex.%.c: %.l
 340        flex -L -P$(notdir $*) -o$@ $<
 341        cp $@ $@_shipped
 342
 343%.hash.c: %.gperf
 344        gperf < $< > $@
 345        cp $@ $@_shipped
 346
 347endif
 348