2002-09-16 23:13:16

by Roman Zippel

[permalink] [raw]
Subject: linux kernel conf 0.6

Hi,

At http://www.xs4all.nl/~zippel/lc/lkc-0.6.tar.gz you can find the
latest version of the new config system. Changes this time:
- update to 2.5.35
- I included my convert script and prepare/fixup patch to convert all
archs
- qconf got a split screen mode
- the save bug is fixed
- the converter mostly ignores "define_bool CONFIG_FOO n" now, they are
only used for type definitions. They were only needed to keep the old
config system working, but shouldn't be needed anymore, this allows to
generate slightly better dependencies in the generated configs.

bye, Roman


2002-09-20 05:06:08

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [kbuild-devel] linux kernel conf 0.6

Hi Roman, sorry if you get this twice. first mail did not show up.

I have been working on integrating lkc with kbuild.
Here is the result.

Rules.make
- Added infrastructure to support host-ccprogs, in other words
support tools written (partly) in c++.

scripts/lkc/Makefile*
- As kbuild does not distingush between individual objects,
used for a given target, but (try to) build them all, I have
found a solution where I create one Makefile for each executable.
I could not see a clean way to integrate this in kbuild, and finally
decided that in this special case a number of Makefiles did not
hurt too much.

flex/bison
- Prepared for "_shipped" files.
Rename lex.zconf.c to lex.zconf.c_shipped etc. in the version
reday to go in the kernel.

Sam

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.555 -> 1.556
# Rules.make 1.70 -> 1.71
# (new) -> 1.1 scripts/lkc/Makefile.qconf
# (new) -> 1.1 scripts/lkc/Makefile.conf
# (new) -> 1.1 scripts/lkc/Makefile.mconf
# (new) -> 1.1 scripts/lkc/lex.zconf.c_shipped
# (new) -> 1.1 scripts/lkc/Makefile
# (new) -> 1.1 scripts/lkc/zconf.tab.h_shipped
# (new) -> 1.1 scripts/lkc/zconf.tab.c_shipped
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/09/19 [email protected] 1.556
# [PATCH] Adaptions to make lkc kbuild compatible
# --------------------------------------------
#
diff -Nru a/Rules.make b/Rules.make
--- a/Rules.make Thu Sep 19 21:32:14 2002
+++ b/Rules.make Thu Sep 19 21:32:14 2002
@@ -391,19 +391,51 @@

quiet_cmd_host_cc_o_c = HOSTCC $(echo_target)
cmd_host_cc_o_c = $(HOSTCC) -Wp,-MD,$(depfile) \
- $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) -c -o $@ $<
+ $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
+ $(HOSTCFLAGS_$(@F)) -c -o $@ $<

$(host-progs-multi-objs): %.o: %.c FORCE
$(call if_changed_dep,host_cc_o_c)

quiet_cmd_host_cc__o = HOSTLD $(echo_target)
-cmd_host_cc__o = $(HOSTCC) $(HOSTLDFLAGS) -o $@ $($@-objs) \
+cmd_host_cc__o = $(HOSTCC) $(HOSTLDFLAGS) -o $@ $($@-objs) $($@-ccobjs) \
$(HOST_LOADLIBES)

$(host-progs-multi): %: $(host-progs-multi-objs) FORCE
$(call if_changed,host_cc__o)

targets += $(host-progs-single) $(host-progs-multi-objs) $(host-progs-multi)
+
+# Compile c++ programs on the host
+# ===========================================================================
+host-ccprogs-single := $(foreach m,$(host-ccprogs),\
+$(if $($(m)-objs),,$(if $($(m)-ccobjs),,$(m))))
+
+host-ccprogs-multi := $(foreach m,$(host-ccprogs),$(if $($(m)-objs),$(m)))
+host-ccprogs-multi += $(foreach m,$(host-ccprogs),$(if $($(m)-ccobjs),$(m)))
+host-ccprogs-multi := $(sort $(host-ccprogs-multi))
+
+host-ccprogs-multi-objs := $(foreach m,$(host-ccprogs-multi),$($(m)-objs))
+host-ccprogs-ccmulti-objs := $(foreach m,$(host-ccprogs-multi),$($(m)-ccobjs))
+
+$(host-ccprogs-single): %: %.cc FORCE
+ $(call if_changed_dep,host_cc__c)
+
+# .c -> .o
+$(host-ccprogs-multi-objs): %.o: %.c FORCE
+ $(call if_changed_dep,host_cc_o_c)
+
+# .cc -> .o
+$(host-ccprogs-ccmulti-objs): %.o: %.cc FORCE
+ @echo '? $?'
+ $(call if_changed_dep,host_cc_o_c)
+
+$(host-ccprogs-multi): %: $(host-ccprogs-multi-objs) \
+ $(host-ccprogs-ccmulti-objs) FORCE
+ $(call if_changed,host_cc__o)
+
+targets += $(host-ccprogs-single) $(host-ccprogs-multi) \
+ $(host-ccprogs-multi-objs) $(host-ccprogs-ccmulti-objs)

endif # ! modules_install
endif # ! fastdep
diff -Nru a/scripts/lkc/Makefile b/scripts/lkc/Makefile
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/scripts/lkc/Makefile Thu Sep 19 21:32:14 2002
@@ -0,0 +1,51 @@
+#################
+#
+# Shared makefile for the various lkc executables:
+# conf: Used for defconfig, oldconfig and related targets
+# mconf: Used for the mconfig target.
+# Utilises the lxdialog package
+# qconf: Used for the xconfig target
+# Based on qt which needs to be installed to compile it
+# Se instructions in Makefile.qconf
+#
+# kbuild are not well prepared for multiple targets that share the
+# same modules. To address this multiple makefiles are used, and the
+# common parts are located within this makefile.
+
+include $(TOPDIR)/Rules.make
+
+# objct files used by all lkc flavours
+sharedobjs := zconf.tab.o lex.zconf.o confdata.o expr.o symbol.o menu.o
+export sharedobjs
+
+parsersrc := zconf.tab.c zconf.tab.h lex.zconf.c
+export parsersrc
+.PHONY: conf mconf qconf
+
+conf: $(parsersrc)
+ $(MAKE) -f Makefile.$@
+mconf: $(parsersrc)
+ $(MAKE) -f Makefile.$@
+qconf: $(parsersrc)
+ $(MAKE) -f Makefile.$@
+
+
+###
+# The following requires flex/bison
+# By defualt we use the _shipped versions, uncomment the following line if
+# you are modifying the flex/bison src.
+# LKC_GENPARSER := 1
+
+ifdef LKC_GENPARSER
+
+zconf.tab.c: zconf.y
+zconf.tab.h: zconf.tab.c
+
+%.tab.c %.tab.h: %.y
+ bison -t -d -v -b $* -p $* $<
+
+lex.%.c: %.l
+ flex -P$* $<
+
+endif
+
diff -Nru a/scripts/lkc/Makefile.conf b/scripts/lkc/Makefile.conf
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/scripts/lkc/Makefile.conf Thu Sep 19 21:32:14 2002
@@ -0,0 +1,9 @@
+###
+# Makefile for the conf executable, part of the lkc suite of programs
+
+host-progs := conf
+conf-objs := conf.o $(sharedobjs)
+
+all: conf
+include $(TOPDIR)/Rules.make
+
diff -Nru a/scripts/lkc/Makefile.mconf b/scripts/lkc/Makefile.mconf
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/scripts/lkc/Makefile.mconf Thu Sep 19 21:32:14 2002
@@ -0,0 +1,9 @@
+###
+# Makefile for the mconf executable, part of the lkc suite of programs.
+
+host-progs := mconf
+mconf-objs := mconf.o $(sharedobjs)
+
+all: mconf
+include $(TOPDIR)/Rules.make
+
diff -Nru a/scripts/lkc/Makefile.qconf b/scripts/lkc/Makefile.qconf
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/scripts/lkc/Makefile.qconf Thu Sep 19 21:32:14 2002
@@ -0,0 +1,43 @@
+###
+# Makefile for the qconf executable, part of the lkc suite of programs
+#
+# qconf is based on the qt library, which needs to be installed
+#
+
+host-ccprogs := qconf
+qconf-ccobjs := qconf.o
+qconf-objs := $(sharedobjs)
+
+# Assume default location of qt if QTDIR is unset
+# Use make QTDIR=/some/other/dir/qt xconfig
+# if qtdir is located elsewhere, and QTDIR is not defined.
+ifndef QTDIR
+QTDIR=/usr/share/qt
+endif
+
+#Executable to interpret the .moc file
+MOC=$(wildcard $(QTDIR)/bin/moc)
+
+HOSTLDFLAGS := -L$(QTDIR)/lib
+HOST_LOADLIBES := -lqt
+HOSTCFLAGS_qconf.o := -I$(QTDIR)/include
+
+# Default target, we always want to build qconf
+.PHONY: qtcheck
+all: qtcheck qconf
+
+include $(TOPDIR)/Rules.make
+
+ifeq ($(MOC),)
+qtcheck:
+ @echo Unable to find the QT installation. Please make sure that the
+ @echo QT development package is correctly installed and the QTDIR
+ @echo environment variable is set to the correct location.
+ @false
+endif
+
+$(obj)/qconf.o: $(obj)/qconf.moc
+
+$(obj)/%.moc: $(src)/%.h
+ $(QTDIR)/bin/moc -i $< -o $@
+

2002-09-22 15:21:09

by Roman Zippel

[permalink] [raw]
Subject: Re: [kbuild-devel] linux kernel conf 0.6

Hi,

On Fri, 20 Sep 2002, Sam Ravnborg wrote:

> I have been working on integrating lkc with kbuild.
> Here is the result.

Thanks, nice work. :)

> Rules.make
> - Added infrastructure to support host-ccprogs, in other words
> support tools written (partly) in c++.

There are all compiled with gcc instead of g++, are you sure that will ok
with all supported gcc versions?

> scripts/lkc/Makefile*
> - As kbuild does not distingush between individual objects,
> used for a given target, but (try to) build them all, I have
> found a solution where I create one Makefile for each executable.
> I could not see a clean way to integrate this in kbuild, and finally
> decided that in this special case a number of Makefiles did not
> hurt too much.

Here I thought about using "ifeq ($(MAKECMDGOALS),...)" to keep them in a
single file. Did you try something like this?

> flex/bison
> - Prepared for "_shipped" files.
> Rename lex.zconf.c to lex.zconf.c_shipped etc. in the version
> reday to go in the kernel.

This works quite well for users, but it's very annoying for the developer.
Kai, any chances to use md5sum for this at some point, e.g. with a helper
script like this:

set -e
src=$1
dst=$2
shift 2

test -f $dst && tail -1 $dst | sed 's,/\* \(.*\) \*/,\1,' | md5sum -c && touch $dst && exit 0
echo "$@"
"$@"
echo "/* $(md5sum $src) */" >> $dst

The only problem with this script is that it only supports a single input
and output file.

Something else I'd like to have for later is the ability to compile
$(sharedobjs) as a shared library and install it somewhere so it can be
used by external programs.

bye, Roman


2002-09-22 22:31:35

by Kai Germaschewski

[permalink] [raw]
Subject: Re: [kbuild-devel] linux kernel conf 0.6

On Sun, 22 Sep 2002, Roman Zippel wrote:

> > I have been working on integrating lkc with kbuild.
> > Here is the result.
>
> Thanks, nice work. :)

Yup, I improved things a bit further.

> > Rules.make
> > - Added infrastructure to support host-ccprogs, in other words
> > support tools written (partly) in c++.
>
> There are all compiled with gcc instead of g++, are you sure that will ok
> with all supported gcc versions?

I fixed that.

> > scripts/lkc/Makefile*
> > - As kbuild does not distingush between individual objects,
> > used for a given target, but (try to) build them all, I have
> > found a solution where I create one Makefile for each executable.
> > I could not see a clean way to integrate this in kbuild, and finally
> > decided that in this special case a number of Makefiles did not
> > hurt too much.
>
> Here I thought about using "ifeq ($(MAKECMDGOALS),...)" to keep them in a
> single file. Did you try something like this?

That's now handled without obvious hacks.

> > flex/bison
> > - Prepared for "_shipped" files.
> > Rename lex.zconf.c to lex.zconf.c_shipped etc. in the version
> > reday to go in the kernel.
>
> This works quite well for users, but it's very annoying for the developer.
> Kai, any chances to use md5sum for this at some point, e.g. with a helper
> script like this:
>
> set -e
> src=$1
> dst=$2
> shift 2
>
> test -f $dst && tail -1 $dst | sed 's,/\* \(.*\) \*/,\1,' | md5sum -c && touch $dst && exit 0
> echo "$@"
> "$@"
> echo "/* $(md5sum $src) */" >> $dst

I'm not particularly fond of these md5sum hacks. I don't think it's all
that annoying for the developer, either, it's basically just a
alias make="make LKC_GENPARSER=1"

(Of course, you'll have to update the _shipped files eventually, but there
isn't really any way around that either way)

One might consider setting LKC_GENPARSER based on a test if bison/flex are
in the path.

> Something else I'd like to have for later is the ability to compile
> $(sharedobjs) as a shared library and install it somewhere so it can be
> used by external programs.

Well, later ;)

--Kai

I created a combined patch with lkc-0.6, Sam's patch and my things on top
of current 2.5-bk (And I would strongly suggest to make further releases
like this, if people need to first figure out how to install and what to
run, they won't test lkc at all). As a result, it's fairly large, so I put
it on

http://zephyr.physics.uiowa.edu/~kai/lkc/lkc-0.6-A

--Kai


2002-09-23 19:55:08

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [kbuild-devel] linux kernel conf 0.6

On Sun, Sep 22, 2002 at 05:36:25PM -0500, Kai Germaschewski wrote:
> > > scripts/lkc/Makefile*
> > > - As kbuild does not distingush between individual objects,
> > > used for a given target, but (try to) build them all, I have
> > > found a solution where I create one Makefile for each executable.
> > > I could not see a clean way to integrate this in kbuild, and finally
> > > decided that in this special case a number of Makefiles did not
> > > hurt too much.
> >
> > Here I thought about using "ifeq ($(MAKECMDGOALS),...)" to keep them in a
> > single file. Did you try something like this?
>
> That's now handled without obvious hacks.

Applying $(sort ) to create a unique list of obj files does not solve
this issue, only hide it.
kbuild will compile all .o files originating from .c files when
building conf and mconf.
Likewise when building qconf, all .o files originating from both .c _and_
.cc files will be built.
In other words the current solution leverage on the fact that the only
problematic object files is qconf.o based on qconf.cc.

It is OK that the first "make oldconfig" - automatic or not -
needs to compile one extra .o file (mconf.o), since this is relatively fast.

PS. linux-isdn.bkbits.net/linux-2.5.kconfig has not showed up yet - mentioned
the patch you posted a diff for.

Sam

2002-10-03 11:14:18

by Roman Zippel

[permalink] [raw]
Subject: Re: [kbuild-devel] linux kernel conf 0.6

Hi,

(I almost forgot to reply to this one, sorry for the delay.)

On Sun, 22 Sep 2002, Kai Germaschewski wrote:

> I'm not particularly fond of these md5sum hacks. I don't think it's all
> that annoying for the developer, either, it's basically just a
> alias make="make LKC_GENPARSER=1"
>
> (Of course, you'll have to update the _shipped files eventually, but there
> isn't really any way around that either way)

Where's the problem with md5sum? If the rules are usually not visible
anyway, why do we use the _shipped postfix at all? The depencies are
hidden this way as well, so make won't even try to regenerate the file.
The developer has to remember that extra argument to get the file
regenerated, what is IMO more hacky than using md5sum.

bye, Roman