X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdriver%2Fghc.lprl;h=e3720e3fe74db2bb5060f8d0cfcb70564cba52b5;hb=f83a5a68edb4b9dbdff1eebeed84527711efc728;hp=1db52ea9e812b50a6df848ea6e41eaaaa673e49d;hpb=d6b8f1496c9e2df967908d02076e8a8a798be11d;p=ghc-hetmet.git diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl index 1db52ea..e3720e3 100644 --- a/ghc/driver/ghc.lprl +++ b/ghc/driver/ghc.lprl @@ -98,7 +98,7 @@ INSTALLING HOSTPLATFORM TARGETPLATFORM -ProjectName ProjectVersion ProjectVersionInt ProjectPatchLevel +ProjectName ProjectVersion ProjectVersionInt HscMajorVersion HscMinorVersion CcMajorVersion CcMinorVersion @@ -108,11 +108,11 @@ bindir libdir libexecdir datadir CURRENT_DIR TMPDIR -GHC_LIB_DIR GHC_RUNTIME_DIR GHC_UTILS_DIR GHC_INCLUDE_DIR +GHC_LIB_DIR GHC_RUNTIME_DIR GHC_INCLUDE_DIR GHC_OPT_HILEV_ASM GhcWithNativeCodeGen -GHC_UNLIT GHC_HSCPP GHC_HSC GHC_SYSMAN +GHC_UNLIT GHC_HSCPP GHC_MKDEPENDHS GHC_HSC GHC_SYSMAN CP RM CONTEXT_DIFF @@ -272,6 +272,8 @@ warnings that you get all the time are -fwarn-overlapping-patterns -fwarn-missing-methods + -fwarn-missing-fields + -fwarn-deprecations -fwarn-duplicate-exports these are turned off by -Wnot. @@ -279,6 +281,8 @@ these are turned off by -Wnot. \begin{code} @StandardWarnings = ('-fwarn-overlapping-patterns', '-fwarn-missing-methods', + '-fwarn-missing-fields', + '-fwarn-deprecations', '-fwarn-duplicate-exports'); @MinusWOpts = (@StandardWarnings, '-fwarn-unused-binds', @@ -303,6 +307,7 @@ $BuildTag = ''; # default is sequential build w/ Appel-style GC '_p', "Profiling", '_t', "Ticky-ticky Profiling", '_u', "Unregisterised", + '_s', "SMP", '_mp', "Parallel", '_mg', "Gransim", # system ways end @@ -350,8 +355,9 @@ $BuildTag = ''; # default is sequential build w/ Appel-style GC '_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", - '_mp', "-fstack-check -fparallel -D__PARALLEL_HASKELL__ -optc-DPAR", - '_mg', "-fstack-check -fconcurrent -fgransim -D__GRANSIM__ -D__CONCURRENT_HASKELL__ -optc-DCONCURRENT -optc-DGRAN"); + '_s', "-fsmp -optc-pthread -optl-pthread -optc-DSMP", + '_mp', "-fparallel -D__PARALLEL_HASKELL__ -optc-DPAR", + '_mg', "-fgransim -D__GRANSIM__ -optc-DGRAN"); # where to look for interface files (system hi's, i.e., prelude and syslibs) @SysImport_dir = ( $INSTALLING ) @@ -384,15 +390,10 @@ $Haskell1Version = 5; # i.e., Haskell 1.4 ) ); -$TopClosureFile # defaults to 1.2 one; will be mangled later - = ''; -# ( $INSTALLING) ? "$InstLibDirGhc/TopClosureXXXX.o" -# : "$TopPwd/$CURRENT_DIR/$GHC_RUNTIME_DIR/main/TopClosureXXXX.o"; - # make depend for Haskell $MkDependHS = ( $INSTALLING ) ? "$InstLibExecDirGhc/mkdependHS" - : "$TopPwd/$CURRENT_DIR/$GHC_UTILS_DIR/mkdependHS/mkdependHS"; + : "$TopPwd/$CURRENT_DIR/$GHC_MKDEPENDHS"; # Fill in later @MkDependHS_flags = (); @@ -572,7 +573,6 @@ Now slurp through the arguments. 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; @@ -693,7 +693,6 @@ sub setupOptimiseFlags { = ( '-fsimplify', '[', - '-finline-phase2', $Oopt_MaxSimplifierIterations, ']', @@ -722,6 +721,10 @@ sub setupOptimiseFlags { # ==> ...(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', ']', @@ -776,14 +779,23 @@ sub setupOptimiseFlags { # 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 @@ -793,6 +805,8 @@ sub setupOptimiseFlags { # ? '' # : "-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', @@ -863,7 +877,6 @@ Sort out @$BuildTag@, @$PROFing@, @$PARing@, \begin{code} sub setupBuildFlags { - # PROFILING stuff after argv mangling: if ( ! $PROFing ) { # add -auto sccs even if not profiling ! @@ -905,6 +918,9 @@ sub setupBuildFlags { exit(1); } + } elsif ( $SMPing eq 's') { + $BuildTag = '_s'; + } elsif ( $GRANing eq 'g' ) { if ($TICKYing eq 't') { print STDERR "$Pgm: Can't mix -gransim with -ticky.\n"; exit 1; } $BuildTag = '_mg'; @@ -1063,8 +1079,8 @@ sub setupLinkOpts { unshift(@Ld_flags, ( '-u', "${uscore}PrelBase_Izh_static_info" ,'-u', "${uscore}PrelBase_Czh_static_info" - ,'-u', "${uscore}PrelBase_Fzh_static_info" - ,'-u', "${uscore}PrelBase_Dzh_static_info" + ,'-u', "${uscore}PrelFloat_Fzh_static_info" + ,'-u', "${uscore}PrelFloat_Dzh_static_info" ,'-u', "${uscore}PrelAddr_Azh_static_info" ,'-u', "${uscore}PrelAddr_Wzh_static_info" ,'-u', "${uscore}PrelAddr_I64zh_static_info" @@ -1072,8 +1088,8 @@ sub setupLinkOpts { ,'-u', "${uscore}PrelStable_StablePtr_static_info" ,'-u', "${uscore}PrelBase_Izh_con_info" ,'-u', "${uscore}PrelBase_Czh_con_info" - ,'-u', "${uscore}PrelBase_Fzh_con_info" - ,'-u', "${uscore}PrelBase_Dzh_con_info" + ,'-u', "${uscore}PrelFloat_Fzh_con_info" + ,'-u', "${uscore}PrelFloat_Dzh_con_info" ,'-u', "${uscore}PrelAddr_Azh_con_info" ,'-u', "${uscore}PrelAddr_Wzh_con_info" ,'-u', "${uscore}PrelAddr_I64zh_con_info" @@ -1089,12 +1105,17 @@ sub setupLinkOpts { 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')); unshift(@Ld_flags, ('-Xlinker -bbigtoc')); } - + if ($TargetPlatform =~ /^hppa/) { + unshift(@Ld_flags, ('-Xlinker +vnocompatwarnings')); + } } # end of setupLinkOpts @@ -1140,7 +1161,7 @@ sub setupSyslibs { # to implement the itimers, since cygwin.dll does not # support it. Only reqd. for `ways' that use itimers. # - push(@SysLibrary, '-lwinmm') if $TargetPlatform eq 'i386-unknown-cygwin32'; + push(@SysLibrary, '-lwinmm') if ($TargetPlatform =~ /-(mingw32|cygwin32)$/); # Note: currently only tested with mingw, may cause conflicts when linking # with libcygwin.a push(@SysLibrary, '-lwsock32') if ($TargetPlatform =~ /-(mingw32|cygwin32)$/); @@ -1227,8 +1248,7 @@ if ($#Input_file < 0 && $#Link_file < 0) { Tell the world who we are, if they asked. \begin{code} -print STDERR "${ProjectName}, version ${ProjectVersion}, patchlevel ${ProjectPatchLevel}\n" - if $Verbose; +print STDERR "${ProjectName}, version ${ProjectVersion}\n" if $Verbose; \end{code} %************************************************************************ @@ -1470,9 +1490,13 @@ Now the Haskell compiler, C compiler, and assembler 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/; - &runGcc (0, $ofile_c_stub_target, $ofile_s_stub_target); - &runAs ($ofile_o_stub_target, $ofile_s_stub_target); + ($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); + } # # Bring the C stub protos into scope when compiling the .hc file. # @@ -1818,7 +1842,7 @@ Invoke the 'linker' - either the standard linker or the one used to build a (Win32) DLL. \begin{code} -sub runLinker() +sub runLinker { local($libdirs) = ''; @@ -1846,7 +1870,7 @@ sub runLinker() &prepareWin32DllLink(1); - local($to_do) = "$lnkr $Verbose @Ld_flags $output @Link_file $TopClosureFile $libdirs @UserLibrary @SysLibrary"; + local($to_do) = "$lnkr $Verbose @Ld_flags $output @Link_file $libdirs @UserLibrary @SysLibrary"; &run_something($to_do, 'Linker'); # finally, check the consistency info in the binary @@ -1891,7 +1915,8 @@ eval 'exec perl -S \$0 \${1+"\$@"}' if \$running_under_some_shell; # =!=!=!=!=!=!=!=!=!=!=! # This script is automatically generated: DO NOT EDIT!!! -# Generated by Glasgow Haskell, version ${ProjectVersion} ${ProjectPatchLevel} +# Generated by Glasgow Haskell, version ${ProjectVersion} +# ngoqvam choHbogh vaj' vIHoHnISbej !!!! # \$pvm_executable = '$pvm_executable'; \$pvm_executable_base = '$pvm_executable_base'; @@ -1923,7 +1948,9 @@ args: while ($a = shift(@ARGV)) { } if ( $a eq '-d' && $in_RTS_args ) { $debug = '-'; - } elsif ( $a =~ /^-N(\d+)/ && $in_RTS_args ) { + } elsif ( $a =~ /^-qN(\d+)/ && $in_RTS_args ) { + $nprocessors = $1; + } elsif ( $a =~ /^-qp(\d+)/ && $in_RTS_args ) { $nprocessors = $1; } else { push(@nonPVM_args, $a); @@ -1941,7 +1968,7 @@ EOSCRIPT2 } } -sub createWin32DLL() +sub createWin32DLL { local ($libdirs); @@ -1985,7 +2012,7 @@ sub createWin32DLL() &run_something($to_do, 'DLL creator'); } -sub prepareWin32DllLink () +sub prepareWin32DllLink { local($linking_main) = @_; @@ -2005,10 +2032,10 @@ sub prepareWin32DllLink () foreach $a ( @UserLibrary ) { $a = "${a}_imp" if ($a =~ /^-lHS/); } - push(@Link_file, ( $INSTALLING ) ? "$InstLibDirGhc/Main.o" - : "$TopPwd/$CURRENT_DIR/$GHC_RUNTIME_DIR/Main.o") if $linking_main; - push(@Link_file, ( $INSTALLING ) ? "$InstLibDirGhc/PrelMain.o" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/PrelMain.o") if $linking_main; + push(@Link_file, ( $INSTALLING ) ? "$InstLibDirGhc/Main.dll_o" + : "$TopPwd/$CURRENT_DIR/$GHC_RUNTIME_DIR/Main.dll_o") if $linking_main; + push(@Link_file, ( $INSTALLING ) ? "$InstLibDirGhc/PrelMain.dll_o" + : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/std/PrelMain.dll_o") if $linking_main; } push(@Ld_flags, "-mno-cygwin"); } @@ -2149,7 +2176,7 @@ sub runAs { # need to add the -I flags in case the file is going through cpp (.S files) local($includes) = '-I' . join(' -I', @Include_dir); - if ( ! $SplitObjFiles ) { + if ( ! $SplitObjFiles || $ifile_root =~ /_stub\.s$/ ) { local($to_do) = "$asmblr -o $as_out -c @As_flags $includes $cc_as"; push(@Files_to_tidy, $as_out ); &run_something($to_do, 'Unix assembler'); @@ -2241,12 +2268,24 @@ sub run_something { 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} @@ -2463,104 +2502,152 @@ sub add_syslib { # 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:$TopPwd/hslibs/lang/monads" ) , # 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:$TopPwd/hslibs/text/haxml" ) , # 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 @@ -2573,11 +2660,12 @@ sub add_syslib { : "$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 @@ -2590,7 +2678,7 @@ sub add_syslib { : "$TopPwd/hdirect/lib" ) , '' - , 'exts' # Syslib dependencies + , 'lang' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '-luser32 -lole32 -loleaut32 -ladvapi32' @@ -2609,8 +2697,8 @@ sub add_syslib { # 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 @@ -2622,12 +2710,13 @@ sub add_syslib { $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 ''); @@ -2666,7 +2755,7 @@ sub check_for_source_options { open(FILE,$file) || return(1); # No big loss while () { - if ( /^${comment_start} OPTIONS (.*)${comment_end}$/ ) { + if ( /^${comment_start} OPTIONS (.*)${comment_end}/ ) { # add the options found at the back of the command line. local(@entries) = split(/\s+/,$1); print STDERR "Found OPTIONS " . join(' ',@entries) . " in $file\n" if $Verbose; @@ -2736,9 +2825,24 @@ sub saveIntermediate { local ($final,$suffix,$tmp)= @_ ; local ($to_do); + local ($new_suffix); + # $final -- root of where to park ${final}.${suffix} # $tmp -- temporary file where hsc put the intermediate file. + # HWL: use -odir for .hc and .s files, too + if ( $Specific_output_dir ne '' ) { + $final = "${Specific_output_dir}/${final}"; + } + # HWL: use the same suffix as for $Osuffix in generating intermediate file, + # replacing o with hc or s, respectively. + if ( $Osuffix ne '' ) { + ($new_suffix = $Osuffix) =~ s/o$/hc/ if $suffix eq "hc"; + ($new_suffix = $Osuffix) =~ s/o$/s/ if $suffix eq "s"; + $suffix = $new_suffix; + print stderr "HWL says: suffix for intermediate file is $suffix; ${final}.${suffix} overall\n" if $Verbose; + } + # Delete the old file $to_do = "$Rm ${final}.${suffix}"; &run_something($to_do, "Removing old .${suffix} file"); @@ -2772,7 +2876,7 @@ arg: while($_ = $Args[0]) { if (/^-\?$/ || /^--?help$/) { print $LongUsage; exit $Status; } #-----------version ---------------------------------------------------- - /^--version$/ && do { print STDERR "${ProjectName}, version ${ProjectVersion}, patchlevel ${ProjectPatchLevel}\n"; exit $Status; }; + /^--version$/ && do { print STDERR "${ProjectName}, version ${ProjectVersion}\n"; exit $Status; }; #---------- verbosity and such ----------------------------------------- /^-v$/ && do { $Verbose = '-v'; $Time = 'time'; next arg; }; @@ -2946,6 +3050,7 @@ arg: while($_ = $Args[0]) { /^-gransim$/ && do { $GRANing = 'g'; &add_syslib('concurrent'); next arg; }; # GranSim /^-ticky$/ && do { $TICKYing = 't'; next arg; }; # ticky-ticky /^-parallel$/ && do { $PARing = 'p'; &add_syslib('concurrent'); next arg; }; # parallel Haskell + /^-smp$/ && do { $SMPing = 's'; &add_syslib('concurrent'); next arg; }; # parallel Haskell #-------------- "user ways" -------------------------------------------- @@ -3049,6 +3154,7 @@ arg: while($_ = $Args[0]) { /^-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)-/ ) { @@ -3077,8 +3183,8 @@ arg: while($_ = $Args[0]) { /^-fglasgow-exts$/ && do { push(@HsC_flags, $_); - # -fglasgow-exts implies -syslib exts - &add_syslib('exts'); + # -fglasgow-exts implies -syslib lang + &add_syslib('lang'); next arg; }; @@ -3120,6 +3226,9 @@ arg: while($_ = $Args[0]) { /^-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 }; @@ -3220,7 +3329,7 @@ arg: while($_ = $Args[0]) { } 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; }; @@ -3242,7 +3351,7 @@ arg: while($_ = $Args[0]) { } 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; };