Preparing a KEV7a400 patch
I've successfully ported u-boot to the Sharp KEV7A400 board. It can program flash, boot from the network, and it runs from flash.
Before I submit a patch, I believe there are a couple of outstanding issues that you, Wolfgang, want resolved.
1) Dependency on Perl
Are you OK with an initial patch that checks for the presence of a Perl interpreter? Since this is the only board using the mkocnfigx script, such a method will be backward compatible. I agree that a shell script of the Perl script must be written.
2) #undef arm
It looks like the arm macro may be defined by the compiler. The GCC info pages suggest that this macro may be defined unless -ansi is passed to the compiler.
There are a few of ways to resolve this problem. I could change the structure that is broken by the #define. I could leave the #undef intact. I could find a way to remove the #define by passing an switch to the compiler. My preference, of course, is to leave the #undef intact.
3) Trailing whitespace
You found some lines in a previous patch to have trailing whitespace. What do you use to detect this?
Dear Marc,
Quoted 6 lines · in message <[email protected]> you wrote:
I've successfully ported u-boot to the Sharp KEV7A400 board. It can program flash, boot from the network, and it runs from flash.
Before I submit a patch, I believe there are a couple of outstanding issues that you, Wolfgang, want resolved.
Quoted 6 lines
1) Dependency on Perl
Are you OK with an initial patch that checks for the presence of a Perl interpreter? Since this is the only board using the mkocnfigx script, such a method will be backward compatible. I agree that a shell script of the Perl script must be written.
Can you please split your patch in two separate parts: one with the support for the new Sharp KEV7A400 board, and another one to use your Perl script?
Did you address the issues I raised with this script last time you showed it to me?
Quoted 11 lines
2) #undef arm
It looks like the arm macro may be defined by the compiler. The GCC info pages suggest that this macro may be defined unless -ansi is passed to the compiler.
There are a few of ways to resolve this problem. I could change the structure that is broken by the #define. I could leave the #undef intact. I could find a way to remove the #define by passing an switch to the compiler. My preference, of course, is to leave the #undef intact.
I will (again) reject a patch which includes such a #undef; please fix the reason for the problem, not the symptoms.
Quoted 4 lines
3) Trailing whitespace
You found some lines in a previous patch to have trailing whitespace. What do you use to detect this?
For example vi -- :g/[\t ][\t ]*$/p
Best regards,
Wolfgang Denk
Signature · 4 lines
Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de There are two ways to write error-free programs. Only the third one works.
Quoted 11 lines · Wolfgang Denk
Dear Marc,
Quoted 8 lines · in message <[email protected]> you wrote:
I've successfully ported u-boot to the Sharp KEV7A400 board. It can program flash, boot from the network, and it runs from flash.
Before I submit a patch, I believe there are a couple of outstanding issues that you, Wolfgang, want resolved.
1) Dependency on Perl
Quoted 8 lines
Quoted 4 lines
Are you OK with an initial patch that checks for the presence of a Perl interpreter? Since this is the only board using the mkocnfigx script, such a method will be backward compatible. I agree that a shell script of the Perl script must be written.
Can you please split your patch in two separate parts: one with the support for the new Sharp KEV7A400 board, and another one to use your Perl script?
That's an interesting request. There isn't really a way to separate them this way since the configuration control script is used to divide the LHA7A400 implementation of the ARM920 from the Samsung implementation.
Quoted 2 lines
Did you address the issues I raised with this script last time you showed it to me?
I've rewritten the generation script using text tools. It is attached. It uses the preprocessor to generate the list of #defines, so I think that it better matches your expectations.
Cheers.
-------------- next part --------------
#!/bin/sh
#
# mkconfigx # # Copyright (c) 2003 # Marc Singer <[email protected]> # # Generate a configuration file to control building # (compiling/linking). The output may be included in Makefiles to # select which source files to compile and link. # # Here, we select configuration entries of the form: # # #define CONFIG_XXX 1 # # where XXX is an enabled configuration option. # # # About CPP # --------- # # The macro CPP may refer to 'gcc -E'. This definition is not # compatible with this use of the preprocessor because the input file # is a header and not a source file. Should there be a dependency on # a target-specific macro, another method must be found. #
CONFIG=configx.mk
CPP=cpp
[ -z "$GREP" ] && GREP=grep
[ -z "$SED" ] && SED=sed
[ -z "$SORT" ] && SORT=sort
echo > $CONFIG
echo "# Automatically generated - do not edit" >> $CONFIG echo >> $CONFIG
$CPP -Iinclude -dM include/config.h\
| $GREP -E "define[ \t]+CONFIG_[^ \t]*[ \t]+1$"\ | $SED -e "s/.*\(CONFIG_[^ \t]*\).*/\1=y/"\ | $SORT\
Quoted 1 line
Quoted 1 line
$CONFIG
Quoted 9 lines · In message <[email protected]> you wrote:
Quoted 4 lines
Can you please split your patch in two separate parts: one with the support for the new Sharp KEV7A400 board, and another one to use your Perl script?
That's an interesting request. There isn't really a way to separate them this way since the configuration control script is used to divide the LHA7A400 implementation of the ARM920 from the Samsung implementation.
Please try it.
I definitely want to keep these two issues separated.
Most probably I will merge the KEV7A400 board support quickly, but spend some time playing with the configuration control script before I add it.
Quoted 6 lines
Quoted 2 lines
Did you address the issues I raised with this script last time you showed it to me?
I've rewritten the generation script using text tools. It is attached. It uses the preprocessor to generate the list of #defines, so I think that it better matches your expectations.
Ummm... and what do you need perl for?
Quoted 2 lines
# Copyright (c) 2003
# Marc Singer <[email protected]>
Please include a GPL header.
Quoted 4 lines
# The macro CPP may refer to 'gcc -E'. This definition is not
# compatible with this use of the preprocessor because the input file # is a header and not a source file. Should there be a dependency on # a target-specific macro, another method must be found.
Please explain this comment, I don't understand it.
Quoted 4 lines
CPP=cpp
[ -z "$GREP" ] && GREP=grep
[ -z "$SED" ] && SED=sed
[ -z "$SORT" ] && SORT=sort
Any specific reason for not using something like this:
: ${GREP:=grep} ${SED:=sed} ${SORT:=sort}?
Quoted 5 lines
$CPP -Iinclude -dM include/config.h\
| $GREP -E "define[ \t]+CONFIG_[^ \t]*[ \t]+1$"\ | $SED -e "s/.*\(CONFIG_[^ \t]*\).*/\1=y/"\ | $SORT\Quoted 1 line
Quoted 1 line
$CONFIG
I don't think this command does what you think it does.
You are running the _native_ CPP, which on a x86 host will set things like __i386__ and i386, which may enable or disable ramdom stuff in the U-Boot config files.
A patch based on this code as is will be rejected.
Best regards,
Wolfgang Denk
Signature · 5 lines
Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de Nothing in progression can rest on its original plan. We may as well think of rocking a grown man in the cradle of an infant. - Edmund Burke
Quoted 6 lines · Wolfgang Denk
Quoted 5 lines · In message <[email protected]> you wrote:
Quoted 4 lines
Can you please split your patch in two separate parts: one with the support for the new Sharp KEV7A400 board, and another one to use your Perl script?
Quoted 6 lines
Quoted 4 lines
That's an interesting request. There isn't really a way to separate them this way since the configuration control script is used to divide the LHA7A400 implementation of the ARM920 from the Samsung implementation.
Please try it.
My target won't compile without it. I can separate it, but MAKEALL will fail.
Quoted 3 lines
Most probably I will merge the KEV7A400 board support quickly, but spend some time playing with the configuration control script before I add it.
How about the other way around. I'll send you the configuration script portion. It's very small.
Quoted 1 line
Ummm... and what do you need perl for?
Don't any more.
Quoted 5 lines
Quoted 3 lines
# Copyright (c) 2003
# Marc Singer <[email protected]>Please include a GPL header.
Sure.
Note that mkconfig doesn't.
Quoted 7 lines
Quoted 5 lines
# The macro CPP may refer to 'gcc -E'. This definition is not
# compatible with this use of the preprocessor because the input file # is a header and not a source file. Should there be a dependency on # a target-specific macro, another method must be found.Please explain this comment, I don't understand it.
Found another way. It's removed.
Quoted 9 lines
Quoted 5 lines
CPP=cpp
[ -z "$GREP" ] && GREP=grep
[ -z "$SED" ] && SED=sed
[ -z "$SORT" ] && SORT=sortAny specific reason for not using something like this:
: ${GREP:=grep} ${SED:=sed} ${SORT:=sort}
Hand't thought of it. Changed.
I'm attaching a patch with just the configuration patches. I found another method of invoking cpp that ought to meet your expectations.
Cheers.
-------------- next part --------------
Makefile +6 -2
@@ -118,7 +118,7 @@ ######################################################################### -all: u-boot.srec u-boot.bin System.map +all: configx.mk u-boot.srec u-boot.bin System.map install: all -cp u-boot.bin /tftpboot/u-boot.bin
@@ -157,6 +157,10 @@ grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ sort > System.map +.PHONY: configx.mk +configx.mk: + @./mkconfigx + ######################################################################### else all install u-boot u-boot.srec depend dep:
@@ -167,7 +171,7 @@ ######################################################################### unconfig: - rm -f include/config.h include/config.mk + rm -f include/config.h include/config.mk configx.mk #======================================================================== # PowerPC
mkconfigx +48 -0
48 lines not on this page · raw message
Quoted 17 lines · In message <[email protected]> you wrote:
--pf9I7BMVVzbSWLtt
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inlineQuoted 11 lines · Wolfgang Denk
Quoted 9 lines · In message <[email protected]> you wrote:
Quoted 4 lines
Can you please split your patch in two separate parts: one with the support for the new Sharp KEV7A400 board, and another one to use your Perl script?
That's an interesting request. There isn't really a way to separate them this way since the configuration control script is used to divide the LHA7A400 implementation of the ARM920 from the Samsung implementation.
Quoted 4 lines
Quoted 1 line
Please try it.
My target won't compile without it. I can separate it, but MAKEALL will fail.
That's what I meant when I wrote to separate things: make your code work without this extension like all the other boards.
Quoted 2 lines
How about the other way around. I'll send you the configuration script portion. It's very small.
I don't see what good it does. For all boards I tried it just generates an empty "configx.mk" file (well,tnot exactly empty, but two blank lines and a comment).
Quoted 1 line
I'm attaching a patch with just the configuration patches. I found
Please submit the next patches against more recent sources.
Quoted 1 line
another method of invoking cpp that ought to meet your expectations.
This will - for example - run these commands:
+ echo '#include "include/config.h"' |
+ ppc_8xx-gcc -E -Iinclude -dM - |
+ grep -E 'define[ \t]+CONFIG_[^ \t]*[ \t]+1$' |
+ sed -e 's/.*\(CONFIG_[^ \t]*\).*/\1=y/' |
+ sort
I remember you wanted to avoid using $(CC) -E ?
Best regards,
Wolfgang Denk
Signature · 6 lines
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-4596-87 Fax: (+49)-8142-4596-88 Email: wd at denx.de
GUIs are virtually useless. Learn tools. They're configurable,
scriptable, automatable, cron-able, interoperable, etc. We don't need
no brain-dead winslurping monolithic claptrap.
-- Tom Christiansen in 371140df at csnewsQuoted 3 lines · Wolfgang Denk
I don't see what good it does. For all boards I tried it just generates an empty "configx.mk" file (well,tnot exactly empty, but two blank lines and a comment).
The ppc preprocessor behaves a bit differently from the other's I've used. Change the line
grep -E 'define[ \t]+CONFIG_[^ \t]*[ \t]+1$' |
to
grep -E 'define[ \t]+CONFIG_[^ \t]*[ \t]+1[ \t]*$' |
I wrote a Perl script to test this. It configures every target and then builds the configx.mk file. I'm attaching the script in case you want to use it.
I noticed that a couple of targets fail because of missing headers in the board specific directories.
Quoted 1 line
I remember you wanted to avoid using $(CC) -E ?
I found no other reliable way to access the target-specific preprocessor. You made it clear that you want to use the cross-compiler's preprocessor, so this a method to do that.
As for submitting patches against more recent source, I'd be happy to do so. The sourceforge CVS server doesn't want to let me login as anonymous. I'll use a more recent snapshot if you have one.
Cheers.
-------------- next part --------------
#!/usr/bin/perl
$dir_uboot = "u-boot";
$dir_out = "configxs";
open (MAKEFILE, "<$dir_uboot/Makefile")
|| die "$dir_uboot/Makefile must be the top level Makefile";
-d $dir_out || qx(mkdir -p $dir_out);qx(rm $dir_out/* 2>&1);
my %configs = ();
while (<MAKEFILE>) {
next if ! m/^(.*_config):/;
$configs{$1} = 1;
}for $c (sort (keys (%configs))) {
print "$c \n";
-f "$dir_uboot/configx.mk" && unlink ("$dir_uboot/configx.mk");
print qx(cd $dir_uboot; make $c; make configx.mk);
# print qq(mv "$dir_uboot/configx.mk" "$dir_out/${c}_configx.mk");
qx!mv "$dir_uboot/configx.mk" "$dir_out/${c}_configx.mk"!;
last;
}0;