This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: CDL define_proc: Unable to put "extern" in an include files
- From: Andrew Lunn <andrew at lunn dot ch>
- To: Jim Seymour <ecosjim at cipher dot com>
- Cc: ecos-discuss at ecos dot sourceware dot org
- Date: Wed, 30 May 2007 20:14:45 +0200
- Subject: Re: [ECOS] CDL define_proc: Unable to put "extern" in an include files
- References: <465DBB45.3070802@cipher.com>
On Wed, May 30, 2007 at 10:58:29AM -0700, Jim Seymour wrote:
> I have a desire to inject an "extern" statement into an include file
> generated by one of our CDL files - so I added a "define_proc" block.
>
> Worked like a champ - until the build got to the rule to create
> "heapgeninc.tcl" out of heapgen.cpp.
>
> This file is run through the preprocessor and the output is then fed to
> Tcl. My "extern" statement is passed through the preprocessor intact,
> so when it gets to Tcl, I get this error:
>
> invalid command name "extern"
>
> The same problem exists when the target.ld file is built. My "extern"
> statement gets stuffed into that file, so ld fails with a "parse error".
>
> I fixed both problems with a horrible kludge: adding a #define to
> heapgen.cpp and then bracketing my extern with a #ifndef.
Could you turn this around. I think cpp is used to generate the linker
file, heapgeninc.tcl and it is used when compiling C and C++
code. However each invocation is for different languages.
Take a look at the output of:
gcc -v -E -dD empty.c
gcc -v -E -dD empty.cpp
and see if there is something defined when compiling real code which
is not defined when using CPP for building the .ld file etc. Then use
#ifdef so that the extern is only present for real code generation
compilation.
Andrew
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss