On Mon, Jan 13, 2003 at 09:22:07AM -0800, Steve Fink wrote:
> On Jan-12, Nicholas Clark wrote:
> > IIRC Leo added an option to Configure.pl to turn on optimising.
> >
> > Prior to this, on IRC Dan said to me that we need to avoid the hack that perl5
> > found itself in, when it had to retro-fit the ability to change the compiler
> > flags per file.
> Would it be better to do it the other way around? We could put a
> marker at the end of each source file (mixed in with the emacs/vi flag
> section?) that specifies a set of compiler flags (or nothing at all if
> the default is ok.)
>
> If so, then I'd probably also use named sets ("big-jumptable-flags")
> or maybe even named modifiers ("default but violates-aliasing and
> trips-gcc2.95-O3-bug"). This would allow better descriptions of why
> the flags were being modified, and allow each compiler to deal with
> the situation differently (for "violates-aliasing", gcc would add
> -fno-strict-aliasing, lcc wouldn't do anything.)
I don't think that this will fly. The sort of flags we need to change are
things like this (Unicos):
if /etc/cpu -i | grep -q cfp
then
ccflags="$ccflags -h rounddiv"
fi
# Avoid an optimizer bug where a volatile variables
# isn't correctly saved and restored --Mark P. Lutz
pp_ctl_cflags='ccflags="$ccflags -h scalar0 -h vector0"'
# Otherwise the unpack %65c checksums will fail.
pp_pack_cflags='optimize="$ccflags -h scalar0 -h vector0"'
or this (Irix 6, based on a test of compiler version)
# workaround for an optimizer bug
# Made to work via UU/config.sh thing (or, rather, config.sh, since we're in
# a callback) from README.hints, plus further stuff; doesn't handle -g still,
# unfortunately - Allen
case "`$cc -version 2>&1`" in
*7.2.*)
test -z "$op_cflags" && echo "op_cflags=\"optimize=\\\"\$optimize -O1\\\"\"" >>
config.sh
test -z "$op_cflags" && op_cflags="optimize=\"\$optimize -O1\""
test -z "$opmini_cflags" && echo "opmini_cflags=\"optimize=\\\"\$optimize
-O1\\\"\"" >> config.sh
test -z "$opmini_cflags" && opmini_cflags="optimize=\"\$optimize -O1\""
;;
*7.3.1.*)
test -z "$op_cflags" && echo "op_cflags=\"optimize=\\\"\$optimize -O2\\\"\"" >>
config.sh
test -z "$op_cflags" && op_cflags="$op_cflags optimize=\"\$optimize -O2\""
test -z "$opmini_cflags" && echo "opmini_cflags=\"optimize=\\\"\$optimize
-O2\\\"\"" >> config.sh
test -z "$opmini_cflags" && opmini_cflags="optimize=\"\$optimize -O2\""
;;
esac
and other evil to work round compiler bugs found mainly by sweating blood.
(I don't know about the Irix bugs, but I do remember that working out
what the cause of Unicos bugs were wasn't fun. And I was mostly following
along at home by e-mail, not being able to offer Mark much more than
moral support. When unpack is going into an infinite loop on a Cray 6000 miles
away that you don't have any access to, there isn't much more you can do)
> I'm assuming the Configure system extracts the information from the
> source files and generates a makefile entry per source file with the
> appropriate compiler flags.
I'm also assuming a makefile entry for all source files with non-default
compiler flags, and a .c$(OBJ_EXT): rule for the default
So I'm thinking that we'll have a lot of per platform compiler specific
cruft that will need to be generalised programatically.
But more importantly we need a way for anyone to manually configure parrot
with wacky flags for a single file. Otherwise responses to perl6bug are going
to be along the lines of "edit the section in the source file, and add a new
(complex) rule that will trigger on your platform. Then reconfigure. Then
check the Makefile to see if that rule really did trigger".
Nicholas Clark