/* The driver will give warnings if -split-objs,
but that's cool...
*/
-GHC_OPTS=-iprelude:glaExts -dcore-lint \
- -fshow-pragma-name-errs -fshow-import-specs \
- -optP-genSPECS0 -cpp -fglasgow-exts \
- -DUSE_FOLDR_BUILD -D__OVERLAPPING_INSTANCES__ \
- HcMaxHeapFlag $(EXTRA_HC_OPTS)
+GHC_OPTS=-iprelude:glaExts \
+ -dcore-lint \
+ -fshow-pragma-name-errs \
+ -fshow-import-specs \
+ -fomit-default-instance-methods \
+ -cpp -fglasgow-exts -genSPECS \
+ -DUSE_FOLDR_BUILD -D__OVERLAPPING_INSTANCES__ \
+ HcMaxHeapFlag $(EXTRA_HC_OPTS)
+
+/* For building with unboxed stuff add:
+
+ -fspecialise-unboxed -genSPECSunboxed -D__UNBOXED_INSTANCES__ -D__UNBOXED_SPECS__
+
+ This is currently done using -user-way-b = -unboxed-specialisation
+*/
/* For the "Prelude" bits: mostly we do not want it to pick
up interface information from anywhere except *here*.
CAT2(blob,_HC_m) = $(CAT2(blob,_HS):.hs=_m.hc) @@\
CAT2(blob,_HC_n) = $(CAT2(blob,_HS):.hs=_n.hc) @@\
CAT2(blob,_HC_o) = $(CAT2(blob,_HS):.hs=_o.hc) @@\
+CAT2(blob,_HC_A) = $(CAT2(blob,_HS):.hs=_A.hc) @@\
+CAT2(blob,_HC_B) = $(CAT2(blob,_HS):.hs=_B.hc) @@\
@@\
CAT2(blob,_DEP_norm) = $(CAT2(blob,_HC_norm):.hc=.o) @@\
CAT2(blob,_DEP_p) = $(CAT2(blob,_HC_p):.hc=.o) @@\
CAT2(blob,_DEP_m) = $(CAT2(blob,_HC_m):.hc=.o) @@\
CAT2(blob,_DEP_n) = $(CAT2(blob,_HC_n):.hc=.o) @@\
CAT2(blob,_DEP_o) = $(CAT2(blob,_HC_o):.hc=.o) @@\
+CAT2(blob,_DEP_A) = $(CAT2(blob,_HC_A):.hc=.o) @@\
+CAT2(blob,_DEP_B) = $(CAT2(blob,_HC_B):.hc=.o) @@\
@@\
CAT2(blob,_HIs_p) = $(CAT2(blob,_HIs):.hi=_p.hi) @@\
CAT2(blob,_HIs_t) = $(CAT2(blob,_HIs):.hi=_t.hi) @@\
CAT2(blob,_HIs_l) = $(CAT2(blob,_HIs):.hi=_l.hi) @@\
CAT2(blob,_HIs_m) = $(CAT2(blob,_HIs):.hi=_m.hi) @@\
CAT2(blob,_HIs_n) = $(CAT2(blob,_HIs):.hi=_n.hi) @@\
-CAT2(blob,_HIs_o) = $(CAT2(blob,_HIs):.hi=_o.hi)
+CAT2(blob,_HIs_o) = $(CAT2(blob,_HIs):.hi=_o.hi) @@\
+CAT2(blob,_HIs_A) = $(CAT2(blob,_HIs):.hi=_A.hi) @@\
+CAT2(blob,_HIs_B) = $(CAT2(blob,_HIs):.hi=_B.hi)
#define PrintFileStuff(blob,outf) \
@echo 'IfGhcBuild_m(' CAT2(blob,_HC_m) = $(CAT2(blob,_HC_m)) ')' >> outf @@\
@echo 'IfGhcBuild_n(' CAT2(blob,_HC_n) = $(CAT2(blob,_HC_n)) ')' >> outf @@\
@echo 'IfGhcBuild_o(' CAT2(blob,_HC_o) = $(CAT2(blob,_HC_o)) ')' >> outf @@\
+ @echo 'IfGhcBuild_A(' CAT2(blob,_HC_A) = $(CAT2(blob,_HC_A)) ')' >> outf @@\
+ @echo 'IfGhcBuild_B(' CAT2(blob,_HC_B) = $(CAT2(blob,_HC_B)) ')' >> outf @@\
@echo 'IfGhcBuild_p(' CAT2(blob,_DEP_p) = $(CAT2(blob,_DEP_p)) ')' >> outf @@\
@echo 'IfGhcBuild_t(' CAT2(blob,_DEP_t) = $(CAT2(blob,_DEP_t)) ')' >> outf @@\
@echo 'IfGhcBuild_u(' CAT2(blob,_DEP_u) = $(CAT2(blob,_DEP_u)) ')' >> outf @@\
@echo 'IfGhcBuild_m(' CAT2(blob,_DEP_m) = $(CAT2(blob,_DEP_m)) ')' >> outf @@\
@echo 'IfGhcBuild_n(' CAT2(blob,_DEP_n) = $(CAT2(blob,_DEP_n)) ')' >> outf @@\
@echo 'IfGhcBuild_o(' CAT2(blob,_DEP_o) = $(CAT2(blob,_DEP_o)) ')' >> outf @@\
+ @echo 'IfGhcBuild_A(' CAT2(blob,_DEP_A) = $(CAT2(blob,_DEP_A)) ')' >> outf @@\
+ @echo 'IfGhcBuild_B(' CAT2(blob,_DEP_B) = $(CAT2(blob,_DEP_B)) ')' >> outf @@\
@echo 'IfGhcBuild_p(' CAT2(blob,_HIs_p) = $(CAT2(blob,_HIs_p)) ')' >> outf @@\
@echo 'IfGhcBuild_t(' CAT2(blob,_HIs_t) = $(CAT2(blob,_HIs_t)) ')' >> outf @@\
@echo 'IfGhcBuild_u(' CAT2(blob,_HIs_u) = $(CAT2(blob,_HIs_u)) ')' >> outf @@\
@echo 'IfGhcBuild_l(' CAT2(blob,_HIs_l) = $(CAT2(blob,_HIs_l)) ')' >> outf @@\
@echo 'IfGhcBuild_m(' CAT2(blob,_HIs_m) = $(CAT2(blob,_HIs_m)) ')' >> outf @@\
@echo 'IfGhcBuild_n(' CAT2(blob,_HIs_n) = $(CAT2(blob,_HIs_n)) ')' >> outf @@\
- @echo 'IfGhcBuild_o(' CAT2(blob,_HIs_o) = $(CAT2(blob,_HIs_o)) ')' >> outf
+ @echo 'IfGhcBuild_o(' CAT2(blob,_HIs_o) = $(CAT2(blob,_HIs_o)) ')' >> outf @@\
+ @echo 'IfGhcBuild_A(' CAT2(blob,_HIs_A) = $(CAT2(blob,_HIs_A)) ')' >> outf @@\
+ @echo 'IfGhcBuild_B(' CAT2(blob,_HIs_B) = $(CAT2(blob,_HIs_B)) ')' >> outf
BASIC_HS = $(BASIC_LHS:.lhs=.hs) $(BASIC_HS_PREL)
BASIC_OBJS_DIRS = $(BASIC_HS:.hs=)
IfGhcBuild_m(hcs_m :: $(BASIC_HC_m) $(ONE3_HC_m) $(GHCLIB_HC_m) $(HBCLIB_HC_m))
IfGhcBuild_n(hcs_n :: $(BASIC_HC_n) $(ONE3_HC_n) $(GHCLIB_HC_n) $(HBCLIB_HC_n))
IfGhcBuild_o(hcs_o :: $(BASIC_HC_o) $(ONE3_HC_o) $(GHCLIB_HC_o) $(HBCLIB_HC_o))
+IfGhcBuild_A(hcs_A :: $(BASIC_HC_A) $(ONE3_HC_A) $(GHCLIB_HC_A) $(HBCLIB_HC_A))
+IfGhcBuild_B(hcs_B :: $(BASIC_HC_B) $(ONE3_HC_B) $(GHCLIB_HC_B) $(HBCLIB_HC_B))
IfGhcBuild_normal(libs:: libHS.a libHS13.a libHSghc.a libHShbc.a)
IfGhcBuild_p(libs_p :: libHS_p.a libHS13_p.a libHSghc_p.a libHShbc_p.a)
IfGhcBuild_m(libs_m :: libHS_m.a libHS13_m.a libHSghc_m.a libHShbc_m.a)
IfGhcBuild_n(libs_n :: libHS_n.a libHS13_n.a libHSghc_n.a libHShbc_n.a)
IfGhcBuild_o(libs_o :: libHS_o.a libHS13_o.a libHSghc_o.a libHShbc_o.a)
+IfGhcBuild_A(libs_A :: libHS_A.a libHS13_A.a libHSghc_A.a libHShbc_A.a)
+IfGhcBuild_B(libs_B :: libHS_B.a libHS13_B.a libHSghc_B.a libHShbc_B.a)
/* maybe for GNU make only? */
-.PHONY :: hcs hcs_p hcs_t hcs_mg hcs_mr hcs_mt hcs_mp hcs_mg hcs_a hcs_b hcs_c hcs_d hcs_e hcs_f hcs_g hcs_h hcs_i hcs_j hcs_k hcs_l hcs_m hcs_n hcs_o
+.PHONY :: hcs hcs_p hcs_t hcs_mg hcs_mr hcs_mt hcs_mp hcs_mg hcs_a hcs_b hcs_c hcs_d hcs_e hcs_f hcs_g hcs_h hcs_i hcs_j hcs_k hcs_l hcs_m hcs_n hcs_o hcs_A hcs_B
#endif /* reasonable make */
ghc/MatchPS.hi \
ghc/Pretty.hi \
ghc/Set.hi \
- ghc/Util.hi __readline_hi __sockets_hi
+ ghc/Util.hi
ONE3_HIs = haskell-1.3/LibSystem.hi \
haskell-1.3/LibCPUTime.hi \
, $(ONE3_DEP_o), $(ONE3_HIs_o) \
))
+IfGhcBuild_A(BigBuildTarget(_A,'*_A.o',his_A \
+, $(BASIC_DEP_A), $(BASIC_HIs_A) \
+, $(GHCLIB_DEP_A), $(GHCLIB_HIs_A) \
+, $(HBCLIB_DEP_A), $(HBCLIB_HIs_A) \
+, $(ONE3_DEP_A), $(ONE3_HIs_A) \
+))
+
+IfGhcBuild_B(BigBuildTarget(_B,'*_B.o',his_B \
+, $(BASIC_DEP_B), $(BASIC_HIs_B) \
+, $(GHCLIB_DEP_B), $(GHCLIB_HIs_B) \
+, $(HBCLIB_DEP_B), $(HBCLIB_HIs_B) \
+, $(ONE3_DEP_B), $(ONE3_HIs_B) \
+))
+
/****************************************************************
* *
* Creating the individual .hc files: *
IfGhcBuild_l(DoHs(file,isuf,_l, flags $(GHC_OPTS_l), '_l.o', '*_l.o')) \
IfGhcBuild_m(DoHs(file,isuf,_m, flags $(GHC_OPTS_m), '_m.o', '*_m.o')) \
IfGhcBuild_n(DoHs(file,isuf,_n, flags $(GHC_OPTS_n), '_n.o', '*_n.o')) \
-IfGhcBuild_o(DoHs(file,isuf,_o, flags $(GHC_OPTS_o), '_o.o', '*_o.o'))
+IfGhcBuild_o(DoHs(file,isuf,_o, flags $(GHC_OPTS_o), '_o.o', '*_o.o')) \
+IfGhcBuild_A(DoHs(file,isuf,_A, flags $(GHC_OPTS_A), '_A.o', '*_A.o')) \
+IfGhcBuild_B(DoHs(file,isuf,_B, flags $(GHC_OPTS_B), '_B.o', '*_B.o'))
/* now use the macro: */
CompilePreludishly(prelude/TyIO,hs, $(PREL_OPTS) -split-objs TyIO -fmin-builtin-names -ohi prelude/TyIO.hi)
CompilePreludishly(prelude/TyRatio,hs, $(PREL_OPTS) -split-objs TyRatio -fmin-builtin-names -nohi)
-CompilePreludishly(prelude/IArray,hs, $(PREL_OPTS) -split-objs IArray -H14m -ohi prelude/IArray.hi)
+CompilePreludishly(prelude/IArray,hs, $(PREL_OPTS) -split-objs IArray -H18m -ohi prelude/IArray.hi)
CompilePreludishly(prelude/IBool,hs, $(PREL_OPTS) -split-objs IBool -ohi prelude/IBool.hi)
CompilePreludishly(prelude/IChar,hs, $(PREL_OPTS) -split-objs IChar -ohi prelude/IChar.hi)
CompilePreludishly(prelude/IComplex,hs, $(PREL_OPTS) -split-objs IComplex -H16m -ohi prelude/IComplex.hi)
CompilePreludishly(prelude/IFloat,hs, $(PREL_OPTS) -split-objs IFloat -ohi prelude/IFloat.hi)
CompilePreludishly(prelude/IInt,hs, $(PREL_OPTS) -split-objs IInt -ohi prelude/IInt.hi -monly-4-regs)
CompilePreludishly(prelude/IInteger,hs, $(PREL_OPTS) -split-objs IInteger -ohi prelude/IInteger.hi)
-CompilePreludishly(prelude/IList,hs, $(PREL_OPTS) -split-objs IList -ohi prelude/IList.hi)
+CompilePreludishly(prelude/IList,hs, $(PREL_OPTS) -split-objs IList -H12m -ohi prelude/IList.hi)
CompilePreludishly(prelude/IRatio,hs, $(PREL_OPTS) -split-objs IRatio -H16m -ohi prelude/IRatio.hi)
CompilePreludishly(prelude/ITup0,hs, $(PREL_OPTS) -split-objs ITup0 -ohi prelude/ITup0.hi)
-CompilePreludishly(prelude/ITup2,hs, $(PREL_OPTS) -split-objs ITup2 -ohi prelude/ITup2.hi)
+CompilePreludishly(prelude/ITup2,hs, $(PREL_OPTS) -split-objs ITup2 -H40m -K2m -ohi prelude/ITup2.hi)
CompilePreludishly(prelude/ITup3,hs, $(PREL_OPTS) -split-objs ITup3 -ohi prelude/ITup3.hi)
CompilePreludishly(prelude/ITup4,hs, $(PREL_OPTS) -split-objs ITup4 -H16m -ohi prelude/ITup4.hi)
CompilePreludishly(prelude/ITup5,hs, $(PREL_OPTS) -split-objs ITup5 -H24m -ohi prelude/ITup5.hi)
CompilePreludishly(prelude/Cls,hs, $(PREL_OPTS) -split-objs Cls -H24m -fmin-builtin-names -ohi prelude/Cls.hi)
CompilePreludishly(prelude/Builtin,hs, $(PREL_OPTS) -split-objs Builtin -ohi prelude/Builtin.hi)
-CompilePreludishly(prelude/Core,hs, $(PREL_OPTS) -split-objs Core -ohi prelude/Core.hi)
+CompilePreludishly(prelude/Core,hs, $(PREL_OPTS) -split-objs Core -H24m -ohi prelude/Core.hi)
CompilePreludishly(prelude/IO,hs, $(PREL_OPTS) -split-objs IO -ohi prelude/IO.hi)
-CompilePreludishly(prelude/List,hs, $(PREL_OPTS) -split-objs List -H14m -ohi prelude/List.hi)
+CompilePreludishly(prelude/List,hs, $(PREL_OPTS) -split-objs List -H24m -ohi prelude/List.hi -fno-snapback-to-append)
CompilePreludishly(prelude/PS,lhs, $(PREL_OPTS) -split-objs PS -ohi prelude/PS.hi -monly-2-regs)
CompilePreludishly(prelude/Prel,hs, $(PREL_OPTS) -split-objs Prel -H14m -ohi prelude/Prel.hi -monly-2-regs)
-CompilePreludishly(prelude/Text,hs, $(PREL_OPTS) -split-objs Text -H14m -ohi prelude/Text.hi -monly-4-regs)
+CompilePreludishly(prelude/Text,hs, $(PREL_OPTS) -split-objs Text -H30m -ohi prelude/Text.hi -monly-4-regs)
CompilePreludishly(prelude/FoldrBuild,hs, $(PREL_OPTS) -split-objs FoldrBuild -nohi)
/* --- 1.3 I/O support --- */
CompilePreludishly(haskell-1.3/LibSystem,lhs, -fhaskell-1.3 -split-objs LibSystem '-#include"stgio.h"')
CompilePreludishly(haskell-1.3/LibCPUTime,lhs, -fhaskell-1.3 -split-objs LibCPUTime '-#include"stgio.h"')
CompilePreludishly(haskell-1.3/LibDirectory,lhs, -fhaskell-1.3 -split-objs LibDirectory '-#include"stgio.h"' -monly-3-regs)
-CompilePreludishly(haskell-1.3/LibTime,lhs, -fhaskell-1.3 -split-objs LibTime '-#include"stgio.h"' '-#include"timezone.h"' -H12m -monly-3-regs -optcO-DNON_POSIX_SOURCE)
+CompilePreludishly(haskell-1.3/LibTime,lhs, -fhaskell-1.3 -split-objs LibTime '-#include"stgio.h"' '-#include"timezone.h"' -H12m -K2m -monly-3-regs)
CompilePreludishly(haskell-1.3/LibPosix,lhs, -fhaskell-1.3 -split-objs LibPosix '-#include"stgio.h"' '-#include"libposix.h"')
CompilePreludishly(haskell-1.3/LibPosixDB,lhs, -fhaskell-1.3 -split-objs LibPosixDB '-#include"stgio.h"' '-#include"libposix.h"')
#endif
#if GhcWithSockets == YES
CompilePreludishly(ghc/Socket,lhs, -ighc -fhaskell-1.3)
-CompilePreludishly(ghc/SocketPrim,lhs, -ighc -fhaskell-1.3 -K2m -optcO-DNON_POSIX_SOURCE '-#include"ghcSockets.h"')
+CompilePreludishly(ghc/SocketPrim,lhs, -ighc -fhaskell-1.3 -H12m -K2m -optcO-DNON_POSIX_SOURCE '-#include"ghcSockets.h"')
CompilePreludishly(ghc/BSD,lhs, -ighc -fhaskell-1.3 -optcO-DNON_POSIX_SOURCE '-#include"ghcSockets.h"')
CompilePreludishly(ghc/CError,lhs, -ighc -fhaskell-1.3 -K2m -fomit-derived-read)
#endif
CompilePreludishly(ghc/Set,lhs, -ighc -fhaskell-1.3)
-CompilePreludishly(ghc/Util,lhs, -ighc -fhaskell-1.3)
+CompilePreludishly(ghc/Util,lhs, -H12m -ighc -fhaskell-1.3)
/* --- HBC-compatibility library --- */
CompilePreludishly(hbc/ListUtil,hs, -ihbc -fhaskell-1.3)
CompilePreludishly(hbc/Miranda,hs, -ihbc)
CompilePreludishly(hbc/NameSupply,hs, )
-CompilePreludishly(hbc/Native,hs, -ihbc -fhaskell-1.3)
-CompilePreludishly(hbc/Number,hs, )
-CompilePreludishly(hbc/Parse,hs, -ihbc -fhaskell-1.3)
+CompilePreludishly(hbc/Native,hs, -H12m -ihbc -fhaskell-1.3 -fno-omit-default-instance-methods)
+CompilePreludishly(hbc/Number,hs, -H12m -K2m -fno-omit-default-instance-methods)
+CompilePreludishly(hbc/Parse,hs, -H12m -ihbc -fhaskell-1.3)
CompilePreludishly(hbc/Polynomial,hs, -ihbc) /* this code could not ever have worked */
CompilePreludishly(hbc/Pretty,hs, )
-CompilePreludishly(hbc/Printf,hs, )
+CompilePreludishly(hbc/Printf,hs, -H12m)
CompilePreludishly(hbc/QSort,hs, )
CompilePreludishly(hbc/Random,hs, -monly-4-regs)
CompilePreludishly(hbc/SimpleLex,hs, )
-CompilePreludishly(hbc/Time,hs, )
+CompilePreludishly(hbc/Time,hs, -H12m)
CompilePreludishly(hbc/Trace,hs, -fglasgow-exts)
-CompilePreludishly(hbc/Word,hs, -K2m -monly-4-regs)
+CompilePreludishly(hbc/Word,hs, -H12m -K2m -monly-4-regs)
/****************************************************************
* *
/* now include the extra dependencies so generated */
#include "Jmake.inc5"
+/* for unix-libs.lit */
+LitSuffixRule(.lhs,.hs)
+LitDocRootTarget(unix-libs,lit)
+
/* should be *LAST* */
#if HaskellCompilerType != HC_USE_HC_FILES
/* otherwise, the dependencies jeopardize our .hc files --