]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - scripts/kconfig/Makefile
Convert CONFIG_DAVINCI_SPI to Kconfig
[people/ms/u-boot.git] / scripts / kconfig / Makefile
index 9c4d2412fb724e8b8d93cd02b70488ba3f779cb9..af238126113df75f6c15539b3e36e1f25deab7c9 100644 (file)
@@ -1,40 +1,52 @@
 # ===========================================================================
 # Kernel configuration targets
 # These targets are used from top-level makefile
+#
+# SPDX-License-Identifier:     GPL-2.0
+#
 
-PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
+PHONY += xconfig gconfig menuconfig config silentoldconfig update-po-config \
        localmodconfig localyesconfig
 
+# Added for U-Boot
+#  Linux has defconfig files in arch/$(SRCARCH)/configs/,
+#  on the other hand, U-Boot does in configs/.
+#  Set SRCARCH to .. fake this Makefile.
+SRCARCH := ..
+
 ifdef KBUILD_KCONFIG
 Kconfig := $(KBUILD_KCONFIG)
 else
 Kconfig := Kconfig
 endif
 
+ifeq ($(quiet),silent_)
+silent := -s
+endif
+
 # We need this, in case the user has it in its environment
 unexport CONFIG_
 
 xconfig: $(obj)/qconf
-       $< $(Kconfig)
+       $< $(silent) $(Kconfig)
 
 gconfig: $(obj)/gconf
-       $< $(Kconfig)
+       $< $(silent) $(Kconfig)
 
 menuconfig: $(obj)/mconf
-       $< $(Kconfig)
+       $< $(silent) $(Kconfig)
 
 config: $(obj)/conf
-       $< --oldaskconfig $(Kconfig)
+       $< $(silent) --oldaskconfig $(Kconfig)
 
 nconfig: $(obj)/nconf
-       $< $(Kconfig)
-
-oldconfig: $(obj)/conf
-       $< --$@ $(Kconfig)
+       $< $(silent) $(Kconfig)
 
 silentoldconfig: $(obj)/conf
        $(Q)mkdir -p include/config include/generated
-       $< --$@ $(Kconfig)
+       $(Q)test -e include/generated/autoksyms.h || \
+           touch   include/generated/autoksyms.h
+       $< $(silent) --$@ $(Kconfig)
 
 localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
        $(Q)mkdir -p include/config include/generated
@@ -43,18 +55,18 @@ localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
                        cmp -s .tmp.config .config ||                   \
                        (mv -f .config .config.old.1;                   \
                         mv -f .tmp.config .config;                     \
-                        $(obj)/conf --silentoldconfig $(Kconfig);      \
+                        $(obj)/conf $(silent) --silentoldconfig $(Kconfig); \
                         mv -f .config.old.1 .config.old)               \
        else                                                            \
                        mv -f .tmp.config .config;                      \
-                       $(obj)/conf --silentoldconfig $(Kconfig);       \
+                       $(obj)/conf $(silent) --silentoldconfig $(Kconfig); \
        fi
        $(Q)rm -f .tmp.config
 
 # Create new linux.pot file
 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
 update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
-       $(Q)echo "  GEN     config.pot"
+       $(Q)$(kecho) "  GEN     config.pot"
        $(Q)xgettext --default-domain=linux                         \
            --add-comments --keyword=_ --keyword=N_                 \
            --from-code=UTF-8                                       \
@@ -65,52 +77,80 @@ update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
        $(Q)(for i in `ls $(srctree)/arch/*/Kconfig      \
            $(srctree)/arch/*/um/Kconfig`;               \
            do                                           \
-               echo "  GEN     $$i";                    \
+               $(kecho) "  GEN     $$i";                    \
                $(obj)/kxgettext $$i                     \
                     >> $(obj)/config.pot;               \
            done )
-       $(Q)echo "  GEN     linux.pot"
+       $(Q)$(kecho) "  GEN     linux.pot"
        $(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
            --output $(obj)/linux.pot
        $(Q)rm -f $(obj)/config.pot
 
-PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
+# These targets map 1:1 to the commandline options of 'conf'
+simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
+       alldefconfig randconfig listnewconfig olddefconfig
+PHONY += $(simple-targets)
 
-allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
-       $< --$@ $(Kconfig)
+$(simple-targets): $(obj)/conf
+       $< $(silent) --$@ $(Kconfig)
 
-PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
-
-listnewconfig olddefconfig: $(obj)/conf
-       $< --$@ $(Kconfig)
+PHONY += oldnoconfig savedefconfig defconfig
 
 # oldnoconfig is an alias of olddefconfig, because people already are dependent
-# on its behavior(sets new symbols to their default value but not 'n') with the
+# on its behavior (sets new symbols to their default value but not 'n') with the
 # counter-intuitive name.
-oldnoconfig: $(obj)/conf
-       $< --olddefconfig $(Kconfig)
+oldnoconfig: olddefconfig
 
 savedefconfig: $(obj)/conf
-       $< --$@=defconfig $(Kconfig)
+       $< $(silent) --$@=defconfig $(Kconfig)
 
 defconfig: $(obj)/conf
 ifeq ($(KBUILD_DEFCONFIG),)
-       $< --defconfig $(Kconfig)
+       $< $(silent) --defconfig $(Kconfig)
+else
+ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
+       @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
+       $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
 else
-       @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
-       $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
+       @$(kecho) "*** Default configuration is based on target '$(KBUILD_DEFCONFIG)'"
+       $(Q)$(MAKE) -f $(srctree)/Makefile $(KBUILD_DEFCONFIG)
+endif
 endif
 
 %_defconfig: $(obj)/conf
-       $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+       $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
+
+# Added for U-Boot (backward compatibility)
+%_config: %_defconfig
+       @:
+
+configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
+
+%.config: $(obj)/conf
+       $(if $(call configfiles),, $(error No configuration exists for this target on this architecture))
+       $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
+       +$(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
+
+PHONY += kvmconfig
+kvmconfig: kvm_guest.config
+       @:
+
+PHONY += xenconfig
+xenconfig: xen.config
+       @:
+
+PHONY += tinyconfig
+tinyconfig:
+       $(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
 
 # Help text used by make help
 help:
        @echo  '  config          - Update current config utilising a line-oriented program'
-       @echo  '  nconfig         - Update current config utilising a ncurses menu based program'
+       @echo  '  nconfig         - Update current config utilising a ncurses menu based'
+       @echo  '                    program'
        @echo  '  menuconfig      - Update current config utilising a menu based program'
-       @echo  '  xconfig         - Update current config utilising a QT based front-end'
-       @echo  '  gconfig         - Update current config utilising a GTK based front-end'
+       @echo  '  xconfig         - Update current config utilising a Qt based front-end'
+       @echo  '  gconfig         - Update current config utilising a GTK+ based front-end'
        @echo  '  oldconfig       - Update current config utilising a provided .config as base'
        @echo  '  localmodconfig  - Update current config disabling modules not loaded'
        @echo  '  localyesconfig  - Update current config converting local mods to core'
@@ -123,7 +163,11 @@ help:
        @echo  '  alldefconfig    - New config with all symbols set to default'
        @echo  '  randconfig      - New config with random answer to all options'
        @echo  '  listnewconfig   - List new options'
-       @echo  '  olddefconfig    - Same as silentoldconfig but sets new symbols to their default value'
+       @echo  '  olddefconfig    - Same as silentoldconfig but sets new symbols to their'
+       @echo  '                    default value'
+#      @echo  '  kvmconfig       - Enable additional options for kvm guest kernel support'
+#      @echo  '  xenconfig       - Enable additional options for xen dom0 and guest kernel support'
+#      @echo  '  tinyconfig      - Configure the tiniest possible kernel'
 
 # lxdialog stuff
 check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
@@ -141,9 +185,9 @@ HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
 # mconf:  Used for the menuconfig target
 #         Utilizes the lxdialog package
 # qconf:  Used for the xconfig target
-#         Based on QT which needs to be installed to compile it
+#         Based on Qt which needs to be installed to compile it
 # gconf:  Used for the gconfig target
-#         Based on GTK which needs to be installed to compile it
+#         Based on GTK+ which needs to be installed to compile it
 # object files used by all kconfig flavours
 
 lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
@@ -157,39 +201,10 @@ qconf-cxxobjs     := qconf.o
 qconf-objs     := zconf.tab.o
 gconf-objs     := gconf.o zconf.tab.o
 
-hostprogs-y := conf
-
-ifeq ($(MAKECMDGOALS),nconfig)
-       hostprogs-y += nconf
-endif
-
-ifeq ($(MAKECMDGOALS),menuconfig)
-       hostprogs-y += mconf
-endif
-
-ifeq ($(MAKECMDGOALS),update-po-config)
-       hostprogs-y += kxgettext
-endif
-
-ifeq ($(MAKECMDGOALS),xconfig)
-       qconf-target := 1
-endif
-ifeq ($(MAKECMDGOALS),gconfig)
-       gconf-target := 1
-endif
-
-
-ifeq ($(qconf-target),1)
-       hostprogs-y += qconf
-endif
-
-ifeq ($(gconf-target),1)
-       hostprogs-y += gconf
-endif
+hostprogs-y := conf nconf mconf kxgettext qconf gconf
 
 clean-files    := qconf.moc .tmp_qtcheck .tmp_gtkcheck
 clean-files    += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
-clean-files     += mconf qconf gconf nconf
 clean-files     += config.pot linux.pot
 
 # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
@@ -220,59 +235,32 @@ HOSTCFLAGS_gconf.o        = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
 HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
 
 HOSTLOADLIBES_nconf    = $(shell \
-                               pkg-config --libs menu panel ncurses 2>/dev/null \
+                               pkg-config --libs menuw panelw ncursesw 2>/dev/null \
+                               || pkg-config --libs menu panel ncurses 2>/dev/null \
                                || echo "-lmenu -lpanel -lncurses"  )
 $(obj)/qconf.o: $(obj)/.tmp_qtcheck
 
-ifeq ($(qconf-target),1)
+ifeq ($(MAKECMDGOALS),xconfig)
 $(obj)/.tmp_qtcheck: $(src)/Makefile
 -include $(obj)/.tmp_qtcheck
 
-# QT needs some extra effort...
+# Qt needs some extra effort...
 $(obj)/.tmp_qtcheck:
-       @set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
-       if ! pkg-config --exists QtCore 2> /dev/null; then \
-           echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
-           pkg-config --exists qt 2> /dev/null && pkg=qt; \
-           pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
-           if [ -n "$$pkg" ]; then \
-             cflags="\$$(shell pkg-config $$pkg --cflags)"; \
-             libs="\$$(shell pkg-config $$pkg --libs)"; \
-             moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
-             dir="$$(pkg-config $$pkg --variable=prefix)"; \
-           else \
-             for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
-               if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
-             done; \
-             if [ -z "$$dir" ]; then \
-               echo >&2 "*"; \
-               echo >&2 "* Unable to find any QT installation. Please make sure that"; \
-               echo >&2 "* the QT4 or QT3 development package is correctly installed and"; \
-               echo >&2 "* either qmake can be found or install pkg-config or set"; \
-               echo >&2 "* the QTDIR environment variable to the correct location."; \
-               echo >&2 "*"; \
-               false; \
-             fi; \
-             libpath=$$dir/lib; lib=qt; osdir=""; \
-             $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
-               osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
-             test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
-             test -f $$libpath/libqt-mt.so && lib=qt-mt; \
-             cflags="-I$$dir/include"; \
-             libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
-             moc="$$dir/bin/moc"; \
-           fi; \
-           if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
-             echo "*"; \
-             echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
-             echo "*"; \
-             moc="/usr/bin/moc"; \
-           fi; \
+       @set -e; $(kecho) "  CHECK   qt"; \
+       if pkg-config --exists Qt5Core; then \
+           cflags="-std=c++11 -fPIC `pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets`"; \
+           libs=`pkg-config --libs Qt5Core Qt5Gui Qt5Widgets`; \
+           moc=`pkg-config --variable=host_bins Qt5Core`/moc; \
+       elif pkg-config --exists QtCore; then \
+           cflags=`pkg-config --cflags QtCore QtGui`; \
+           libs=`pkg-config --libs QtCore QtGui`; \
+           moc=`pkg-config --variable=moc_location QtCore`; \
        else \
-         cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
-         libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
-         moc="\$$(shell pkg-config QtCore --variable=moc_location)"; \
-         [ -n "$$moc" ] || moc="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
+           echo >&2 "*"; \
+           echo >&2 "* Could not find Qt via 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" >> $@; \
@@ -281,10 +269,10 @@ endif
 
 $(obj)/gconf.o: $(obj)/.tmp_gtkcheck
 
-ifeq ($(gconf-target),1)
+ifeq ($(MAKECMDGOALS),gconfig)
 -include $(obj)/.tmp_gtkcheck
 
-# GTK needs some extra effort, too...
+# GTK+ needs some extra effort, too...
 $(obj)/.tmp_gtkcheck:
        @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then               \
                if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then                  \
@@ -315,7 +303,7 @@ quiet_cmd_moc = MOC     $@
 $(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
        $(call cmd,moc)
 
-# Extract gconf menu items for I18N support
+# Extract gconf menu items for i18n support
 $(obj)/gconf.glade.h: $(obj)/gconf.glade
        $(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
        $(obj)/gconf.glade