Skip to contentSkip to conversation

Preparing a KEV7a400 patch

U-Boot-Users Marc Singer 2 participants 7 messages Aug 6, 2003 – Aug 7, 2003 Kbuild

lore
Share & tools
lore
#0 lore raw

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?

#1 lore raw

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.
#2 lore raw
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

#3 lore raw
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
#4 lore raw
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=sort

Any 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
diff -ruN --exclude '*.o' --exclude='*.map' --exclude '*~' --exclude '*-orig' --exclude=.depend --exclude=configx.mk --exclude='*.srec' --exclude='*.a' u-boot-0.4.0/Makefile u-boot/Makefile
@@ -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

#5 lore raw
Quoted 17 lines · In message <[email protected]> you wrote:

--pf9I7BMVVzbSWLtt
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Quoted 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 csnews
#6 lore raw
Quoted 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;