tags:

views:

407

answers:

6

I'm trying to build gcc for use with an AVR micro controller and avr-ada, and I've hit a roadblock caused by my regular compiler being too picky about the version I needed for the AVR. I get the following warning, which in turn causes the gcc or make to report an error:

gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada 
  -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2

Is there a way to instruct gcc or make to not fail on warnings?

+1  A: 

Try make -k instead of just make. That will 'continue' rather than stop.

Dirk Eddelbuettel
+1  A: 

It seems -Werror flag is set in Makefile. Maybe you can look for CFLAGS options in Makefile and remove the -Werror flag. The Werror flag will make all warnings into errors.

ZelluX
+3  A: 

In general, it is not a good idea to ignore warnings from your compiler. However, if this is a portion of a larger make process there is likely a -Werror flag inserted earlier in the sequence. Start by looking for that.

After looking around, there seems to be a wealth of flags to control warnings while compiling Ada code. For instance, -gnatwF will Suppress warnings on unreferenced formals according to this guide. Possibly the switch you require can be found in the list provided there.

ezpz
Yeah, nothing in what he pasted would have resulted in -Werror being turned on. It had to be prior to the excerpt.
Tim Post
I know its not a good idea, and I tried building an older version of gcc/gnat (gcc-4.3.2) just so that I could build the AVR gcc/gnat (also gcc-4.3.2), but I was running into the exact same problem there too. After talking with the project owner, he told me my system Ada compiler (gcc-4.3.4) "smells too new" for the code base, and my options were to hack the source code or try to override the fail or warning.
Dr. Watson
Well, I remember dealing with Ada for a brief time and, for me, the approach would have to be augmenting the build. As I recall Ada is right finicky about things.
ezpz
@ezpz: Again, I agree with what you are saying. I'll try some of the options you listed as well as others in this thread when I get home today, but I'm learning towards just using the Windows version since I can easily get a binary and get to work.
Dr. Watson
A: 

As an alternative to diving into the build system, try setting -Wno-error in CFLAGS, which you should be able to do through the environment (or at configure time, if using the GNU build system).

Jack
+1  A: 

The trigger here is the -gnatpg (actually, the -gnatg): this is the "GNAT implementation mode (used for compiling GNAT units)". -gnatp means "suppress all checks".

I'm not sure of the full effect of -gnatg, though it certainly causes warnings to be treated as errors -- like -Werror -- at any rate while building the compiler itself; I think I remember seeing non-fatal warnings while building the RTS.

One possibility would be to compile just exp_ch5.adb by hand without -gnatg; the command you list was issued at gcc/, so

$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o

Then back up one level, and 'make' again.

This is a cross-compiler, so you won't (I hope!) need to repeat this for all three stages of a full build.

Simon Wright
Thank you, your solution allowed me to get past the above error. I have more warnings from the Ada compiler, but I'll tread along now!
Dr. Watson
A: 

How about putting "pragma warnings(off, "...")" into the offending parts of your code?

See http://www.adacore.com/2007/11/19/ada-gem-18/.