aboutsummaryrefslogtreecommitdiff
path: root/payloads/coreinfo/util/kconfig/Makefile
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2008-03-24 15:47:49 +0000
committerUwe Hermann <uwe@hermann-uwe.de>2008-03-24 15:47:49 +0000
commit2216d1b46a86fd5beb20a8e99f176f28c527e0ec (patch)
tree502b194aa5e728f03099a44c453b92dbe16e56f6 /payloads/coreinfo/util/kconfig/Makefile
parent0bfb5c4fb2a8626ccc6f663d1c8ca8e88f6d6666 (diff)
Add a recent kconfig version to coreinfo, in order to make the
supported features configurable later (currently unused). Store all build files and results (coreinfo.elf) in build/ now. I'm self-acking this as (though non-"trivial") it doesn't affect coreinfo in its functionality, this is more or less a "cosmetic" change to the build interface ("make" -> "make menuconfig && make"). This is a kconfig checkout from the Linux kernel (where kconfig is being actively maintained) from 03/2008. The hash identifying the last commit to kconfig is 587c90616a5b44e6ccfac38e64d4fecee51d588c. The amount of changes to kconfig itself has been kept as small as possible to keep the diff small and to ease updating/porting to newer kconfig versions. The following changes were performed on the upstream Linux kconfig: - s/kernel/coreinfo/, and s/Linux/coreinfo/ in various strings. - Consistently use the env. variable KERNELVERSION in all kconfig interfaces -- e.g. config/menuconfig/gconfig/xconfig -- as version number. - Hardcode our paths/filenames in some places (could be improved upstream). - Always write .config and build/config.h, no matter which kconfig interface is used (config/menuconfig/gconfig/xconfig). We want to include build/config.h in our code. - Adapt the kconfig Makefile for our purposes (build/ directory, rules, etc). In addition, a few items in the coreinfo Makefile are needed for this to work. This kconfig setup is successfully tested with all targets from 'make help': config - Update current config utilising a line-oriented program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end oldconfig - Update current config utilising a provided .config as base silentoldconfig - Same as oldconfig, but quietly randconfig - New config with random answer to all options defconfig - New config with default answer to all options allmodconfig - New config selecting modules when possible allyesconfig - New config where all options are accepted with yes allnoconfig - New config where all options are answered with no For 'make defconfig' to work you have to do (which we don't need in coreinfo): $ mkdir configs; touch configs/defconfig You can also use 'make foo_defconfig' in which case kconfig will use a file called 'configs/foo_defconfig' as basis. Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Uwe Hermann <uwe@hermann-uwe.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3188 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/coreinfo/util/kconfig/Makefile')
-rw-r--r--payloads/coreinfo/util/kconfig/Makefile337
1 files changed, 337 insertions, 0 deletions
diff --git a/payloads/coreinfo/util/kconfig/Makefile b/payloads/coreinfo/util/kconfig/Makefile
new file mode 100644
index 0000000000..e0e3414f2b
--- /dev/null
+++ b/payloads/coreinfo/util/kconfig/Makefile
@@ -0,0 +1,337 @@
+# ===========================================================================
+# Kernel configuration targets
+# These targets are used from top-level makefile
+
+PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
+
+Kconfig := Kconfig
+
+xconfig: prepare $(objk)/qconf
+ $(Q)$(objk)/qconf $(Kconfig)
+
+gconfig: prepare $(objk)/gconf
+ $(Q)$(objk)/gconf $(Kconfig)
+
+menuconfig: prepare $(objk)/mconf
+ $(Q)$(objk)/mconf $(Kconfig)
+
+config: prepare $(objk)/conf
+ $(Q)$(objk)/conf $(Kconfig)
+
+oldconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -o $(Kconfig)
+
+silentoldconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -s $(Kconfig)
+
+# --- UNUSED, ignore ----------------------------------------------------------
+# Create new linux.pot file
+# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
+# The symlink is used to repair a deficiency in arch/um
+update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
+ $(Q)echo " GEN config"
+ $(Q)xgettext --default-domain=linux \
+ --add-comments --keyword=_ --keyword=N_ \
+ --from-code=UTF-8 \
+ --files-from=scripts/kconfig/POTFILES.in \
+ --output $(obj)/config.pot
+ $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
+ $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
+ $(Q)(for i in `ls arch/`; \
+ do \
+ echo " GEN $$i"; \
+ $(obj)/kxgettext arch/$$i/Kconfig \
+ >> $(obj)/config.pot; \
+ done )
+ $(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
+ --output $(obj)/linux.pot
+ $(Q)rm -f arch/um/Kconfig.arch
+ $(Q)rm -f $(obj)/config.pot
+# --- UNUSED, ignore ----------------------------------------------------------
+
+PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
+
+randconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -r $(Kconfig)
+
+allyesconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -y $(Kconfig)
+
+allnoconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -n $(Kconfig)
+
+allmodconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -m $(Kconfig)
+
+defconfig: prepare $(objk)/conf
+ifeq ($(KBUILD_DEFCONFIG),)
+ $(Q)$(objk)/conf -d $(Kconfig)
+else
+ @echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
+ $(Q)$(objk)/conf -D $(KBUILD_DEFCONFIG) $(Kconfig)
+endif
+
+%_defconfig: prepare $(objk)/conf
+ $(Q)$(objk)/conf -D configs/$@ $(Kconfig)
+
+# Help text used by make help
+help:
+ @echo ' config - Update current config utilising a line-oriented 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 ' oldconfig - Update current config utilising a provided .config as base'
+ @echo ' silentoldconfig - Same as oldconfig, but quietly'
+ @echo ' randconfig - New config with random answer to all options'
+ @echo ' defconfig - New config with default answer to all options'
+ @echo ' allmodconfig - New config selecting modules when possible'
+ @echo ' allyesconfig - New config where all options are accepted with yes'
+ @echo ' allnoconfig - New config where all options are answered with no'
+
+# lxdialog stuff
+check-lxdialog := $(srck)/lxdialog/check-lxdialog.sh
+
+# Use recursively expanded variables so we do not call gcc unless
+# we really need to do so. (Do not call gcc as part of make mrproper)
+HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
+HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
+
+HOST_EXTRACFLAGS += -DLOCALE
+
+
+# ===========================================================================
+# 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
+# gconf: Used for the gconfig target
+# 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
+lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
+
+conf-objs := conf.o zconf.tab.o
+mconf-objs := mconf.o zconf.tab.o $(lxdialog)
+kxgettext-objs := kxgettext.o zconf.tab.o
+
+hostprogs-y := conf qconf gconf kxgettext
+
+ifeq ($(MAKECMDGOALS),menuconfig)
+ hostprogs-y += mconf
+endif
+
+ifeq ($(MAKECMDGOALS),xconfig)
+ qconf-target := 1
+endif
+ifeq ($(MAKECMDGOALS),gconfig)
+ gconf-target := 1
+endif
+
+
+ifeq ($(qconf-target),1)
+qconf-cxxobjs := qconf.o
+qconf-objs := kconfig_load.o zconf.tab.o
+endif
+
+ifeq ($(gconf-target),1)
+gconf-objs := gconf.o kconfig_load.o zconf.tab.o
+endif
+
+clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
+ .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
+clean-files += mconf qconf gconf
+clean-files += config.pot coreinfo.pot
+
+# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
+PHONY += $(objk)/dochecklxdialog
+$(addprefix $(obj)/,$(lxdialog)): $(objk)/dochecklxdialog
+$(objk)/dochecklxdialog:
+ $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES)
+
+always := dochecklxdialog
+
+# Add environment specific flags
+HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srck)/check.sh $(HOSTCC) $(HOSTCFLAGS))
+
+# generated files seem to need this to find local include files
+HOSTCFLAGS_lex.zconf.o := -I$(src)
+HOSTCFLAGS_zconf.tab.o := -I$(src)
+
+HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
+HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
+
+HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
+HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
+ -D LKC_DIRECT_LINK
+
+$(objk)/qconf.o: $(objk)/.tmp_qtcheck
+
+ifeq ($(qconf-target),1)
+$(objk)/.tmp_qtcheck: $(srck)/Makefile
+-include $(objk)/.tmp_qtcheck
+
+# QT needs some extra effort...
+$(objk)/.tmp_qtcheck: prepare
+ @set -e; dir=""; pkg=""; \
+ 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 "*"; \
+ echo "* Unable to find the QT3 installation. Please make sure that"; \
+ echo "* the QT3 development package is correctly installed and"; \
+ echo "* either install pkg-config or set the QTDIR environment"; \
+ echo "* variable to the correct location."; \
+ echo "*"; \
+ 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; \
+ echo "KC_QT_CFLAGS=$$cflags" > $@; \
+ echo "KC_QT_LIBS=$$libs" >> $@; \
+ echo "KC_QT_MOC=$$moc" >> $@
+endif
+
+$(objk)/gconf.o: $(objk)/.tmp_gtkcheck
+
+ifeq ($(gconf-target),1)
+-include $(objk)/.tmp_gtkcheck
+
+# GTK needs some extra effort, too...
+$(objk)/.tmp_gtkcheck: prepare
+ @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 \
+ touch $@; \
+ else \
+ echo "*"; \
+ echo "* GTK+ is present but version >= 2.0.0 is required."; \
+ echo "*"; \
+ false; \
+ fi \
+ else \
+ echo "*"; \
+ echo "* Unable to find the GTK+ installation. Please make sure that"; \
+ echo "* the GTK+ 2.0 development package is correctly installed..."; \
+ echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
+ echo "*"; \
+ false; \
+ fi
+endif
+
+# --- UNUSED, ignore ----------------------------------------------------------
+ifdef UNUSED
+$(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
+
+$(obj)/kconfig_load.o: $(obj)/lkc_defs.h
+
+$(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
+
+$(obj)/gconf.o: $(obj)/lkc_defs.h
+
+$(obj)/%.moc: $(src)/%.h
+ $(KC_QT_MOC) -i $< -o $@
+
+$(obj)/lkc_defs.h: $(src)/lkc_proto.h
+ sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
+
+# Extract gconf menu items for I18N support
+$(obj)/gconf.glade.h: $(obj)/gconf.glade
+ intltool-extract --type=gettext/glade $(obj)/gconf.glade
+endif
+# --- UNUSED, ignore ----------------------------------------------------------
+
+###
+# The following requires flex/bison/gperf
+# By default we use the _shipped versions, uncomment the following line if
+# you are modifying the flex/bison src.
+# LKC_GENPARSER := 1
+
+ifdef LKC_GENPARSER
+
+# --- UNUSED, ignore ----------------------------------------------------------
+$(obj)/zconf.tab.c: $(src)/zconf.y
+$(obj)/lex.zconf.c: $(src)/zconf.l
+$(obj)/zconf.hash.c: $(src)/zconf.gperf
+
+%.tab.c: %.y
+ bison -l -b $* -p $(notdir $*) $<
+ cp $@ $@_shipped
+
+lex.%.c: %.l
+ flex -L -P$(notdir $*) -o$@ $<
+ cp $@ $@_shipped
+
+%.hash.c: %.gperf
+ gperf < $< > $@
+ cp $@ $@_shipped
+# --- UNUSED, ignore ----------------------------------------------------------
+
+endif
+
+$(objk)/qconf: $(patsubst %,$(objk)/%,$(qconf-cxxobjs)) \
+ $(patsubst %,$(objk)/%,$(qconf-objs))
+ $(Q)$(HOSTCXX) $(HOSTCXXFLAGS) $(HOSTLOADLIBES_qconf) -o $@ $^
+$(objk)/gconf: $(patsubst %,$(objk)/%,$(gconf-objs))
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOSTLOADLIBES_gconf) -o $@ $^
+$(objk)/mconf: $(patsubst %,$(objk)/%,$(mconf-objs))
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES) -o $@ $^
+$(objk)/conf: $(patsubst %,$(objk)/%,$(conf-objs))
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) -o $@ $^
+
+$(objk)/mconf.o: $(srck)/mconf.c
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $<
+$(objk)/conf.o: $(srck)/conf.c
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $<
+
+$(objk)/zconf.tab.o: $(objk)/zconf.tab.c $(objk)/lex.zconf.c \
+ $(objk)/zconf.hash.c
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $(objk)/zconf.tab.c
+$(objk)/kconfig_load.o: $(srck)/kconfig_load.c $(objk)/lkc_defs.h
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $<
+$(objk)/qconf.o: $(srck)/qconf.cc $(objk)/qconf.moc $(objk)/lkc_defs.h
+ $(Q)$(HOSTCXX) $(HOSTCXXFLAGS) $(HOSTCXXFLAGS_qconf.o) -c -o $@ $<
+$(objk)/gconf.o: $(srck)/gconf.c $(objk)/lkc_defs.h
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_gconf.o) -c -o $@ $<
+$(objk)/%.moc: $(srck)/%.h
+ $(Q)$(KC_QT_MOC) -i $< -o $@
+$(objk)/lkc_defs.h: $(srck)/lkc_proto.h
+ $(Q)sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
+
+$(objk)/lex.zconf.c: $(srck)/lex.zconf.c_shipped
+ $(Q)cp $< $@
+$(objk)/zconf.hash.c: $(srck)/zconf.hash.c_shipped
+ $(Q)cp $< $@
+$(objk)/zconf.tab.c: $(srck)/zconf.tab.c_shipped
+ $(Q)cp $< $@
+
+$(objk)/lxdialog/lxdialog: $(objk)/dochecklxdialog \
+ $(patsubst %,$(objk)/lxdialog/%,$(lxdialog))
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES) \
+ $(patsubst %,$(objk)/lxdialog/%,$(lxdialog)) -o $@
+$(objk)/lxdialog/%.o: $(srck)/lxdialog/%.c
+ $(Q)$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $^ -c -o $@
+