'_p', "-fscc-profiling -DPROFILING -optc-DPROFILING",
'_t', "-fticky-ticky -DTICKY_TICKY -optc-DTICKY_TICKY",
'_u', "-optc-DNO_REGS -optc-DUSE_MINIINTERPRETER -fno-asm-mangling -funregisterised",
- '_s', "-fparallel -optc-pthread -optl-pthread -optc-DSMP",
+ '_s', "-fsmp -optc-pthread -optl-pthread -optc-DSMP",
'_mp', "-fparallel -D__PARALLEL_HASKELL__ -optc-DPAR",
'_mg', "-fgransim -D__GRANSIM__ -optc-DGRAN");
if ( $Status == 0 && $Only_generate_deps ) {
push (@MkDependHS_flags, "-o$Osuffix") if $Osuffix;
- push (@MkDependHS_flags, "-s$BuildTag") if $BuildTag;
# They're not (currently) needed, but we need to quote any -#include options
foreach (@Cmd_opts) {
s/-#include.*$/'$&'/g;
# ==> ...(case (case x of I# x# -> fw x#) of ...)...
# ==> ...(case x of I# x# -> case fw x# of ...)...
# and now the redex (f x) isn't floatable any more
+
+ '-fno-rules', # Similarly, don't apply any rules until after full laziness
+ # Notably, list fusion can prevent floating.
+
'-fmax-simplifier-iterations2',
']',
# No -finline-phase: allow all Ids to be inlined now
']',
- '-fcse', # CSE must immediately follow a simplification pass, because it relies
- # on the no-shadowing invariant. See comments at the top of CSE.lhs
-
'-ffull-laziness', # nofib/spectral/hartel/wang doubles in speed if you
# do full laziness late in the day. It only happens
# after fusion and other stuff, so the early pass doesn't
# catch it. For the record, the redex is
# f_el22 (f_el21 r_midblock)
+
+ # We want CSE to follow the final full-laziness pass, because it may
+ # succeed in commoning up things floated out by full laziness.
+ #
+ # CSE must immediately follow a simplification pass, because it relies
+ # on the no-shadowing invariant. See comments at the top of CSE.lhs
+ # So it must NOT follow float-inwards, which can give rise to shadowing,
+ # even if its input doesn't have shadows. Hence putting it between
+ # the two passes.
+ '-fcse',
+
+
'-ffloat-inwards',
# Case-liberation for -O2. This should be after
# ? ''
# : "-fliberate-case -fsimplify [ $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_PedanticBottoms $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ),
+# '-fliberate-case',
+
# Final clean-up simplification:
'-fsimplify',
\begin{code}
sub setupBuildFlags {
-
# PROFILING stuff after argv mangling:
if ( ! $PROFing ) {
# add -auto sccs even if not profiling !
if (!$NoHaskellMain) {
unshift (@Ld_flags,'-u', "${uscore}PrelMain_mainIO_closure");
}
+ if ($PROFing ne '') {
+ unshift (@Ld_flags,'-u', "${uscore}_regPrelude");
+ }
if ($TargetPlatform =~ /^powerpc-|^rs6000-/) {
# sometimes we have lots of toc entries...
# unshift(@Ld_flags, ('-Xlinker -bbigtoc -Xlinker -bnoquiet'));
local ($hsc_out_s_stub);
local ($hsc_out_o_stub);
($ofile_s_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$/\.s/;
- ($ofile_o_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$/\.o/;
+ ($ofile_o_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$//;
+
+ $ofile_o_stub_target = &osuf_ify($ofile_o_stub_target, "o");
if ($do_cc) {
&runGcc (0, $ofile_c_stub_target, $ofile_s_stub_target);
&runAs ($ofile_o_stub_target, $ofile_s_stub_target);
close(CCOUT) || &tidy_up_and_die(1,"$Pgm: failed closing `$Tmp_prefix.ccout'\n");
}
+ local($signal_num) = $? & 127;
+ local($dumped_core) = $? & 128;
+
+ if ($signal_num != 0) {
+ print STDERR "$tidy_name received signal $signal_num";
+ if ($dumped_core != 0) {
+ print STDERR " (core dumped)";
+ }
+ print STDERR "\n";
+ }
+
if ($return_val != 0) {
if ($Using_dump_file) {
print STDERR "Compilation Errors dumped in $Specific_dump_file\n";
}
&tidy_up_and_die($return_val, '');
}
+
$Using_dump_file = 0;
}
\end{code}
# Lifting this out of this sub brings it out of scope - why??
%Supported_syslibs =
- ( exts,
+ ( lang,
[ # where to slurp interface files from
( $INSTALLING
- ? "$InstLibDirGhc/imports/exts"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/exts"
+ ? "$InstLibDirGhc/imports/lang"
+ : "$TopPwd/hslibs/lang"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/exts"
+ : "$TopPwd/hslibs/lang"
+ )
+ , # where to find the cbits archive to use when linking
+ ( $INSTALLING
+ ? "$InstLibDirGhc"
+ : "$TopPwd/hslibs/lang/cbits"
)
- , '' # no cbits
, '' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '' # extra ld opts
],
- misc,
+ concurrent,
[ # where to slurp interface files from
( $INSTALLING
- ? "$InstLibDirGhc/imports/misc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc"
+ ? "$InstLibDirGhc/imports/concurrent"
+ : "$TopPwd/hslibs/concurrent"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc"
+ : "$TopPwd/hslibs/concurrent"
)
- , # where to find the cbits archive to use when linking
+ , '' # where to find the cbits archive to use when linking
+ , '' # Syslib dependencies
+ , '' # extra ghc opts
+ , '' # extra cc opts
+ , '' # extra ld opts
+ ],
+
+ data,
+ [ # where to slurp interface files from
+ ( $INSTALLING
+ ? "$InstLibDirGhc/imports/data"
+ : "$TopPwd/hslibs/data:$TopPwd/hslibs/data/edison:$TopPwd/hslibs/data/edison/Assoc:$TopPwd/hslibs/data/edison/Coll:$TopPwd/hslibs/data/edison/Seq"
+ )
+ , # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc/cbits"
+ : "$TopPwd/hslibs/data"
)
- , 'exts concurrent' # Syslib dependencies
- , '' # extra ghc opts
- , '' # extra cc opts
- , ( $TargetPlatform =~ /-solaris2$/ ? '-lnsl -lsocket' : '')
+ , '' # where to find the cbits archive to use when linking
+ , '' # Syslib dependencies
+ , '' # extra ghc opts
+ , '' # extra cc opts
+ , '' # extra ld opts
],
- hbc,
+
+ net,
[ # where to slurp interface files from
( $INSTALLING
- ? "$InstLibDirGhc/imports/hbc"
- : "$TopPwd/CONTRIB/libraries/hbc/src"
+ ? "$InstLibDirGhc/imports/net"
+ : "$TopPwd/hslibs/net"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/CONTRIB/libraries/src/hbc"
+ : "$TopPwd/hslibs/net"
)
, # where to find the cbits archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/CONTRIB/libraries/hbc/cbits"
+ : "$TopPwd/hslibs/net/cbits"
)
- , 'exts' # Syslib dependencies
- , '' # extra ghc opts
- , '' # extra cc opts
- , ''
+ , 'lang text' # Syslib dependencies
+ , '' # extra ghc opts
+ , '' # extra cc opts
+ , ( $TargetPlatform =~ /-solaris2$/ ? '-lnsl -lsocket' : '')
],
+
posix,
[ # where to slurp interface files from
( $INSTALLING
? "$InstLibDirGhc/imports/posix"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix"
+ : "$TopPwd/hslibs/posix"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix"
+ : "$TopPwd/hslibs/posix"
)
, # where to find the cbits archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix/cbits"
+ : "$TopPwd/hslibs/posix/cbits"
)
- , 'misc' # Syslib dependencies
+ , 'lang' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '' # extra ld opts
],
- concurrent,
+
+ text,
[ # where to slurp interface files from
( $INSTALLING
- ? "$InstLibDirGhc/imports/concurrent"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/concurrent"
+ ? "$InstLibDirGhc/imports/text"
+ : "$TopPwd/hslibs/text:$TopPwd/hslibs/text/html"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
- : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/concurrent"
+ : "$TopPwd/hslibs/text"
)
- , '' # where to find the cbits archive to use when linking
- , '' # Syslib dependencies
+ , # where to find the cbits archive to use when linking
+ ( $INSTALLING
+ ? "$InstLibDirGhc"
+ : "$TopPwd/hslibs/text/cbits"
+ )
+ , 'lang' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '' # extra ld opts
],
+
+ util,
+ [ # where to slurp interface files from
+ ( $INSTALLING
+ ? "$InstLibDirGhc/imports/util"
+ : "$TopPwd/hslibs/util"
+ )
+ , # where to find the archive to use when linking
+ ( $INSTALLING
+ ? "$InstLibDirGhc"
+ : "$TopPwd/hslibs/util"
+ )
+ , # where to find the cbits archive to use when linking
+ ( $INSTALLING
+ ? "$InstLibDirGhc"
+ : "$TopPwd/hslibs/util/cbits"
+ )
+ , 'lang concurrent' # Syslib dependencies
+ , '' # extra ghc opts
+ , '' # extra cc opts
+ , '' # extra ld opts
+ ],
+
win32,
[ # where to slurp interface files from
( $INSTALLING
: "$TopPwd/hslibs/win32/src"
)
, ''
- , 'exts' # Syslib dependencies
+ , 'lang' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '-luser32 -lgdi32' # extra ld opts
],
+
com,
[ # where to slurp interface files from
( $INSTALLING
: "$TopPwd/hdirect/lib"
)
, ''
- , 'exts' # Syslib dependencies
+ , 'lang' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '-luser32 -lole32 -loleaut32 -ladvapi32'
# This check is here to avoid syslib loops from
# spoiling the party. A side-effect of it is that
# it disallows multiple mentions of a syslib on a command-line,
- # explicit *and* implicit ones (i.e., "-syslib exts -syslib misc"
- # is not equal to "-syslib exts -syslib misc -syslib exts",
+ # explicit *and* implicit ones (i.e., "-syslib lang -syslib misc"
+ # is not equal to "-syslib lang -syslib misc -syslib lang",
# which it needs to be)
#
# Since our current collection of syslibs don't have any
$Syslibs_added{$syslib} = 1;
- local ($hi_dir, $lib_dir, $lib_cbits_dir,
+ local ($hi_dirs, $lib_dir, $lib_cbits_dir,
$syslib_deps, $syslib_ghc_opts,
$syslib_cc_opts, $syslib_ld_opts) = @{ $Supported_syslibs{$syslib} };
-
- unshift(@SysImport_dir, $hi_dir);
+ foreach(split(':',$hi_dirs)) {
+ unshift(@SysImport_dir, $_);
+ }
push(@SysLibrary_dir, $lib_dir);
push(@SysLibrary_dir, $lib_cbits_dir) if ( $lib_cbits_dir ne '');
/^-fticky-ticky$/ && do { push(@HsC_flags,$_); next arg; };
/^-fgransim$/ && do { push(@HsC_flags,$_); next arg; };
/^-fparallel$/ && do { push(@HsC_flags,$_); next arg; };
+ /^-fsmp$/ && do { push(@HsC_flags,$_); next arg; };
/^-split-objs$/ && do {
if ( $TargetPlatform !~ /^(alpha|hppa1\.1|i386|m68k|mips|powerpc|rs6000|sparc)-/ ) {
/^-fglasgow-exts$/
&& do { push(@HsC_flags, $_);
- # -fglasgow-exts implies -syslib exts
- &add_syslib('exts');
+ # -fglasgow-exts implies -syslib lang
+ &add_syslib('lang');
next arg; };
/^-funfolding-.*$/
&& do { push(@HsC_flags, $_); next arg };
+ /^-fliberate-case-.*$/
+ && do { push(@HsC_flags, $_); next arg };
+
/^-funfold-casms-in-hi-file$/
&& do { push(@HsC_flags, $_); next arg };
} elsif ($heap_size >= $Specific_heap_size) {
$Specific_heap_size = $heap_size;
} else {
- print STDERR "$Pgm: ignoring heap-size-setting option ($_)...not the largest seen\n";
+ print STDERR "$Pgm: ignoring heap-size-setting option ($_)...not the largest seen\n" if $Verbose;
}
next arg; };
} elsif ($stk_size >= $Specific_stk_size) {
$Specific_stk_size = $stk_size;
} else {
- print STDERR "$Pgm: ignoring stack-size-setting option ($flag $stk_size)...not the largest seen\n";
+ print STDERR "$Pgm: ignoring stack-size-setting option ($flag $stk_size)...not the largest seen\n" if $Verbose;
}
next arg; };