+++ /dev/null
-/* This is the Jmakefile for the runtime-system stuff.
- This stuff is written in C (and cannot be written in Haskell).
-
- Things are organised into exactly one level of subdirs.
-
- At the moment, there are a few such subdirs:
- c-as-asm -- mini-interpreter & register hackery
- gum -- GUM-specific stuff
- main -- "main", associated startup stuff, & MISC things
- prims -- code for primitives that must be written in C
- profiling -- cost-centre profiling
- storage -- the storage manager(s)
-
- We create two libraries. One, libHSrts<tag>.a, is built separately
- for each "build". The other, libHSclib.a is built once: it is just
- .lc files that end up the same no matter what, i.e. completely
- ordinary C.
-
- Other sorta independent, compile-once subdirs are:
-
- gmp -- GNU multi-precision library (for Integer)
-*/
-
-#define IHaveSubdirs
-
-SUBDIRS = gmp
-
-/****************************************************************
-* *
-* Jmakefile preamble-y things *
-* *
-****************************************************************/
-
-GhcDriverNeededHere(depend all) /* we use its C-compiling know-how */
-EtagsNeededHere(tags)
-UnlitNeededHere(depend)
-
-/****************************************************************
-* *
-* options used for compiling/etc. things *
-* *
-****************************************************************/
-
-/*
-If you use EXTRA_HC_OPTS on the command line (which you shouldn't,
-strictly speaking), it will probably work -- it is pinned onto
-GHC_OPTS, just for fun.
-*/
-
-GHC_OPTS = $(EXTRA_HC_OPTS)
-
-/* per-build options: shared with libraries */
-#define rts_or_lib(r,l) r
-#include "../mkworld/GHC_OPTS"
-
-MKDEPENDC_OPTS= \
- -I$(TOP_PWD)/$(CURRENT_DIR)/$(GHC_INCLUDES)
-
-/****************************************************************
-* *
-* what it is we are compiling; *
-* these are long and tedious lists, but c'est la guerre *
-* *
-****************************************************************/
-
-RTS_LH = \
- storage/SMmarkDefs.lh \
- storage/SMcopying.lh \
- storage/SMcompacting.lh \
- storage/SMextn.lh \
- storage/SMinternal.lh
-
-RTS_LC = \
- c-as-asm/CallWrap_C.lc \
- c-as-asm/HpOverflow.lc \
- c-as-asm/StablePtr.lc \
- c-as-asm/StablePtrOps.lc \
- c-as-asm/StgDebug.lc \
- c-as-asm/StgMiniInt.lc \
- gum/GlobAddr.lc \
- gum/HLComms.lc \
- gum/Hash.lc \
- gum/LLComms.lc \
- gum/Pack.lc \
- gum/ParInit.lc \
- gum/RBH.lc \
- gum/Sparks.lc \
- gum/Unpack.lc \
- main/GranSim.lc \
- main/Itimer.lc \
- main/Ticky.lc \
- main/SMRep.lc \
- main/Select.lc \
- main/Signals.lc \
- main/StgOverflow.lc \
- main/Threads.lc \
- main/RtsFlags.lc \
- main/main.lc \
- prims/PrimArith.lc \
- prims/PrimMisc.lc \
- profiling/CostCentre.lc \
- profiling/Hashing.lc \
- profiling/HeapProfile.lc \
- profiling/Indexing.lc \
- profiling/Timer.lc \
- storage/SM1s.lc \
- storage/SM2s.lc \
- storage/SMap.lc \
- storage/SMcheck.lc \
- storage/SMcompacting.lc \
- storage/SMcopying.lc \
- storage/SMdu.lc \
- storage/SMevac.lc \
- storage/SMextn.lc \
- storage/SMinit.lc /*could clib except for GCdu option! */ \
- storage/SMmarking.lc \
- storage/SMscan.lc \
- storage/SMscav.lc \
- storage/SMstacks.lc \
- storage/SMstatic.lc \
- storage/SMstats.lc /*could clib except GCap affects printing*/ \
- storage/mprotect.lc
-
-/*LATER?: storage/SMgen.lc */
-
-RTS_LHC = \
- main/StgStartup.lhc \
- main/StgUpdate.lhc \
- main/StgThreads.lhc \
- c-as-asm/PerformIO.lhc \
- storage/SMmark.lhc \
- gum/FetchMe.lhc
-
-CLIB_LC = \
- hooks/ErrorHdr.lc \
- hooks/FreeForeignObj.lc \
- hooks/OutOfHeap.lc \
- hooks/OutOfStk.lc \
- hooks/OutOfVM.lc \
- hooks/NoRunnableThrds.lc \
- hooks/PatErrorHdr.lc \
- hooks/TraceHooks.lc \
- hooks/SizeHooks.lc \
- hooks/InitEachPE.lc \
- main/Mallocs.lc
-
-H_FILES = $(RTS_LH:.lh=.h)
-C_FILES = $(RTS_LC:.lc=.c) $(RTS_LHC:.lhc=.hc) $(CLIB_LC:.lc=.c)
-
-/* Header files */
-
-all depend :: $(H_FILES)
-
-ExtraStuffToClean ( $(C_FILES) )
-
-/* Literate-pgmming suffix rules used herein */
-UnlitSuffixRule(.lhc,.hc)
-UnlitSuffixRule(.lc,.c)
-UnlitSuffixRule(.lh,.h)
-
-/****************************************************************
-* *
-* interesting collections of .o files *
-* *
-****************************************************************/
-
-RTS_OBJS_norm = $(RTS_LC:.lc=.o) $(RTS_LHC:.lhc=.o)
-RTS_OBJS_p = $(RTS_LC:.lc=.p_o) $(RTS_LHC:.lhc=.p_o)
-RTS_OBJS_t = $(RTS_LC:.lc=.t_o) $(RTS_LHC:.lhc=.t_o)
-RTS_OBJS_u = $(RTS_LC:.lc=.u_o) $(RTS_LHC:.lhc=.u_o)
-RTS_OBJS_mc = $(RTS_LC:.lc=.mc_o) $(RTS_LHC:.lhc=.mc_o)
-RTS_OBJS_mr = $(RTS_LC:.lc=.mr_o) $(RTS_LHC:.lhc=.mr_o)
-RTS_OBJS_mt = $(RTS_LC:.lc=.mt_o) $(RTS_LHC:.lhc=.mt_o)
-RTS_OBJS_mp = $(RTS_LC:.lc=.mp_o) $(RTS_LHC:.lhc=.mp_o)
-RTS_OBJS_mg = $(RTS_LC:.lc=.mg_o) $(RTS_LHC:.lhc=.mg_o)
-RTS_OBJS_2s = $(RTS_LC:.lc=.2s_o) $(RTS_LHC:.lhc=.2s_o)
-RTS_OBJS_1s = $(RTS_LC:.lc=.1s_o) $(RTS_LHC:.lhc=.1s_o)
-RTS_OBJS_du = $(RTS_LC:.lc=.du_o) $(RTS_LHC:.lhc=.du_o)
-RTS_OBJS_a = $(RTS_LC:.lc=.a_o) $(RTS_LHC:.lhc=.a_o)
-RTS_OBJS_b = $(RTS_LC:.lc=.b_o) $(RTS_LHC:.lhc=.b_o)
-RTS_OBJS_c = $(RTS_LC:.lc=.c_o) $(RTS_LHC:.lhc=.c_o)
-RTS_OBJS_d = $(RTS_LC:.lc=.d_o) $(RTS_LHC:.lhc=.d_o)
-RTS_OBJS_e = $(RTS_LC:.lc=.e_o) $(RTS_LHC:.lhc=.e_o)
-RTS_OBJS_f = $(RTS_LC:.lc=.f_o) $(RTS_LHC:.lhc=.f_o)
-RTS_OBJS_g = $(RTS_LC:.lc=.g_o) $(RTS_LHC:.lhc=.g_o)
-RTS_OBJS_h = $(RTS_LC:.lc=.h_o) $(RTS_LHC:.lhc=.h_o)
-RTS_OBJS_i = $(RTS_LC:.lc=.i_o) $(RTS_LHC:.lhc=.i_o)
-RTS_OBJS_j = $(RTS_LC:.lc=.j_o) $(RTS_LHC:.lhc=.j_o)
-RTS_OBJS_k = $(RTS_LC:.lc=.k_o) $(RTS_LHC:.lhc=.k_o)
-RTS_OBJS_l = $(RTS_LC:.lc=.l_o) $(RTS_LHC:.lhc=.l_o)
-RTS_OBJS_m = $(RTS_LC:.lc=.m_o) $(RTS_LHC:.lhc=.m_o)
-RTS_OBJS_n = $(RTS_LC:.lc=.n_o) $(RTS_LHC:.lhc=.n_o)
-RTS_OBJS_o = $(RTS_LC:.lc=.o_o) $(RTS_LHC:.lhc=.o_o)
-RTS_OBJS_A = $(RTS_LC:.lc=.A_o) $(RTS_LHC:.lhc=.A_o)
-RTS_OBJS_B = $(RTS_LC:.lc=.B_o) $(RTS_LHC:.lhc=.B_o)
-
-CLIB_OBJS = $(CLIB_LC:.lc=.o)
-
-/****************************************************************
-* *
-* knock the "clib" (completely ordinary C, compiled once) *
-* stuff over the head first... *
-* *
-****************************************************************/
-
-NormalLibraryTarget(HSclib,$(CLIB_OBJS))
-ExtraStuffToClean($(CLIB_OBJS))
-#if DoInstallGHCSystem == YES
-InstallLibraryTarget(HSclib,$(INSTLIBDIR_GHC))
-#endif
-
-/* all .lc files, so far */
-CompileCBitsly(GHC,hooks/ErrorHdr,)
-CompileCBitsly(GHC,hooks/FreeForeignObj,)
-CompileCBitsly(GHC,hooks/OutOfHeap,)
-CompileCBitsly(GHC,hooks/OutOfStk,)
-CompileCBitsly(GHC,hooks/OutOfVM,)
-CompileCBitsly(GHC,hooks/NoRunnableThrds,)
-CompileCBitsly(GHC,hooks/PatErrorHdr,)
-CompileCBitsly(GHC,hooks/TraceHooks,)
-CompileCBitsly(GHC,hooks/SizeHooks,)
-CompileCBitsly(GHC,hooks/InitEachPE,)
-CompileCBitsly(GHC,main/Mallocs,)
-CompileCBitsly(GHC,main/TopClosure,)
-
-ExtraStuffToClean(main/TopClosure.o)
-
-all :: main/TopClosure.o
-
-install :: main/TopClosure.o
- $(INSTALL) -c $(INSTLIBFLAGS) main/TopClosure.o $(INSTLIBDIR_GHC)/TopClosure.o
-
-#if Build_mp == YES
-# if solaris2_TARGET_OS
-# define __socket_libs -lsocket -lnsl
-# else
-# define __socket_libs /*none*/
-# endif
-
-AllTarget(gum/SysMan)
-gum/SysMan : gum/SysMan.mp_o gum/LLComms.mp_o main/Mallocs.o hooks/OutOfVM.o
- $(RM) $@
- $(CC) -o $@ gum/SysMan.mp_o gum/LLComms.mp_o main/Mallocs.o hooks/OutOfVM.o -L$$PVM_ROOT/lib/$$PVM_ARCH -lpvm3 -lgpvm3 __socket_libs
-ExtraStuffToClean(gum/SysMan.mp_o gum/SysMan)
-# if DoInstallGHCSystem == YES
-install :: gum/SysMan
- $(INSTALL) -c $(INSTBINFLAGS) gum/SysMan $(INSTLIBDIR_GHC)/SysMan
-# endif
-#endif
-
-/****************************************************************
-* *
-* special local make-world macros *
-* *
-****************************************************************/
-
-/* to build and install the per-build rts stuff */
-
-#ifndef SpecialGhcRtsLibTarget
-#define SpecialGhcRtsLibTarget(tag,objs) @@\
-AllTarget(CAT3(libHSrts,tag,.a)) @@\
-ExtraStuffToClean(objs CAT3(libHSrts,tag,.a)) @@\
-CAT3(libHSrts,tag,.a):: $(H_FILES) objs @@\
- $(RM) $@ @@\
- $(AR) $@ objs @@\
- $(RANLIB) $@
-#endif /* SpecialGhcRtsLibTarget */
-
-#ifndef SpecialGhcRtsLibInstallTarget
-#if DoInstallGHCSystem == YES
-#define SpecialGhcRtsLibInstallTarget(tag) @@\
-install :: CAT3(libHSrts,tag,.a) @@\
- $(INSTALL) $(INSTLIBFLAGS) \ @@\
- CAT3(libHSrts,tag,.a) \ @@\
- $(INSTLIBDIR_GHC)/CAT3(libHSrts,tag,.a) @@\
- $(RANLIB) $(INSTLIBDIR_GHC)/CAT3(libHSrts,tag,.a)
-#else /* ! DoInstallGHC... */
-#define SpecialGhcRtsLibInstallTarget(tag) /*nothing*/
-#endif /* ! DoInstallGHC... */
-#endif /* SpecialGhcRtsLibInstallTarget */
-
-#define BigBuildRtsTarget(tag,objs) \
-SpecialGhcRtsLibTarget(tag,objs) @@\
-SpecialGhcRtsLibInstallTarget(tag)
-
-/****************************************************************
-* *
-* creating and installing libHSrts.a (in its many flavors) *
-* *
-****************************************************************/
-
-#if DoInstallGHCSystem == YES
-MakeDirectories(install, $(INSTLIBDIR_GHC))
-#endif /* DoInstallGHCSystem */
-
-IfBuild_normal(BigBuildRtsTarget(,$(RTS_OBJS_norm)))
-IfBuild_p(BigBuildRtsTarget(_p, $(RTS_OBJS_p)))
-IfBuild_t(BigBuildRtsTarget(_t, $(RTS_OBJS_t)))
-IfBuild_u(BigBuildRtsTarget(_u, $(RTS_OBJS_u)))
-IfBuild_mc(BigBuildRtsTarget(_mc, $(RTS_OBJS_mc)))
-IfBuild_mr(BigBuildRtsTarget(_mr, $(RTS_OBJS_mr)))
-IfBuild_mt(BigBuildRtsTarget(_mt, $(RTS_OBJS_mt)))
-IfBuild_mp(BigBuildRtsTarget(_mp, $(RTS_OBJS_mp)))
-IfBuild_mg(BigBuildRtsTarget(_mg, $(RTS_OBJS_mg)))
-IfBuild_2s(BigBuildRtsTarget(_2s, $(RTS_OBJS_2s)))
-IfBuild_1s(BigBuildRtsTarget(_1s, $(RTS_OBJS_1s)))
-IfBuild_du(BigBuildRtsTarget(_du, $(RTS_OBJS_du)))
-IfBuild_a(BigBuildRtsTarget(_a, $(RTS_OBJS_a)))
-IfBuild_b(BigBuildRtsTarget(_b, $(RTS_OBJS_b)))
-IfBuild_c(BigBuildRtsTarget(_c, $(RTS_OBJS_c)))
-IfBuild_d(BigBuildRtsTarget(_d, $(RTS_OBJS_d)))
-IfBuild_e(BigBuildRtsTarget(_e, $(RTS_OBJS_e)))
-IfBuild_f(BigBuildRtsTarget(_f, $(RTS_OBJS_f)))
-IfBuild_g(BigBuildRtsTarget(_g, $(RTS_OBJS_g)))
-IfBuild_h(BigBuildRtsTarget(_h, $(RTS_OBJS_h)))
-IfBuild_i(BigBuildRtsTarget(_i, $(RTS_OBJS_i)))
-IfBuild_j(BigBuildRtsTarget(_j, $(RTS_OBJS_j)))
-IfBuild_k(BigBuildRtsTarget(_k, $(RTS_OBJS_k)))
-IfBuild_l(BigBuildRtsTarget(_l, $(RTS_OBJS_l)))
-IfBuild_m(BigBuildRtsTarget(_m, $(RTS_OBJS_m)))
-IfBuild_n(BigBuildRtsTarget(_n, $(RTS_OBJS_n)))
-IfBuild_o(BigBuildRtsTarget(_o, $(RTS_OBJS_o)))
-IfBuild_A(BigBuildRtsTarget(_A, $(RTS_OBJS_A)))
-IfBuild_B(BigBuildRtsTarget(_B, $(RTS_OBJS_B)))
-
-
-/****************************************************************
-* *
-* compile the individual RTS files *
-* *
-****************************************************************/
-
-#define DoRtsFile(file,isuf,way,vsuf,flags) @@\
-CAT3(file.,way,o) : CAT2(file,isuf) @@\
- $(RM) $@ @@\
- $(GHC) -c -o CAT3(file.,way,o) $(GHCFLAGS) flags $(CAT3(GHC,_OPTS,vsuf)) CAT2(file,isuf)
-
-#define CompileRTSishly(file,isuf,flags) @@\
-IfBuild_normal(DoRtsFile(file,isuf,,_norm,flags)) \
-IfBuild_p(DoRtsFile(file,isuf,p_,_p, flags)) \
-IfBuild_t(DoRtsFile(file,isuf,t_,_t, flags)) \
-IfBuild_u(DoRtsFile(file,isuf,u_,_u, flags)) \
-IfBuild_mc(DoRtsFile(file,isuf,mc_,_mc, flags)) \
-IfBuild_mr(DoRtsFile(file,isuf,mr_,_mr, flags)) \
-IfBuild_mt(DoRtsFile(file,isuf,mt_,_mt, flags)) \
-IfBuild_mp(DoRtsFile(file,isuf,mp_,_mp, flags)) \
-IfBuild_mg(DoRtsFile(file,isuf,mg_,_mg, flags)) \
-IfBuild_2s(DoRtsFile(file,isuf,2s_,_2s, flags)) \
-IfBuild_1s(DoRtsFile(file,isuf,1s_,_1s, flags)) \
-IfBuild_du(DoRtsFile(file,isuf,du_,_du, flags)) \
-IfBuild_a(DoRtsFile(file,isuf,a_,_a, flags)) \
-IfBuild_b(DoRtsFile(file,isuf,b_,_b, flags)) \
-IfBuild_c(DoRtsFile(file,isuf,c_,_c, flags)) \
-IfBuild_d(DoRtsFile(file,isuf,d_,_d, flags)) \
-IfBuild_e(DoRtsFile(file,isuf,e_,_e, flags)) \
-IfBuild_f(DoRtsFile(file,isuf,f_,_f, flags)) \
-IfBuild_g(DoRtsFile(file,isuf,g_,_g, flags)) \
-IfBuild_h(DoRtsFile(file,isuf,h_,_h, flags)) \
-IfBuild_i(DoRtsFile(file,isuf,i_,_i, flags)) \
-IfBuild_j(DoRtsFile(file,isuf,j_,_j, flags)) \
-IfBuild_k(DoRtsFile(file,isuf,k_,_k, flags)) \
-IfBuild_l(DoRtsFile(file,isuf,l_,_l, flags)) \
-IfBuild_m(DoRtsFile(file,isuf,m_,_m, flags)) \
-IfBuild_n(DoRtsFile(file,isuf,n_,_n, flags)) \
-IfBuild_o(DoRtsFile(file,isuf,o_,_o, flags)) \
-IfBuild_A(DoRtsFile(file,isuf,A_,_A, flags)) \
-IfBuild_B(DoRtsFile(file,isuf,B_,_B, flags))
-
-/* here we go: */
-
-CompileRTSishly(c-as-asm/CallWrap_C,.c,)
-CompileRTSishly(c-as-asm/HpOverflow,.c,)
-CompileRTSishly(c-as-asm/PerformIO,.hc,-optc-DIN_GHC_RTS=1)
-CompileRTSishly(c-as-asm/StablePtr,.c,)
-CompileRTSishly(c-as-asm/StablePtrOps,.c,)
-CompileRTSishly(c-as-asm/StgDebug,.c,)
-CompileRTSishly(c-as-asm/StgMiniInt,.c,)
-CompileRTSishly(gum/FetchMe,.hc,-optc-DIN_GHC_RTS=1)
-CompileRTSishly(gum/GlobAddr,.c,)
-CompileRTSishly(gum/HLComms,.c,)
-CompileRTSishly(gum/Hash,.c,)
-CompileRTSishly(gum/LLComms,.c,)
-CompileRTSishly(gum/Pack,.c,)
-CompileRTSishly(gum/ParInit,.c,)
-CompileRTSishly(gum/RBH,.c,)
-CompileRTSishly(gum/Sparks,.c,)
-CompileRTSishly(gum/SysMan,.c,) /* NB: not in library */
-CompileRTSishly(gum/Unpack,.c,)
-CompileRTSishly(main/GranSim,.c,)
-CompileRTSishly(main/Itimer,.c,)
-CompileRTSishly(main/Ticky,.c,)
-CompileRTSishly(main/SMRep,.c,)
-CompileRTSishly(main/Select,.c,)
-CompileRTSishly(main/Signals,.c,)
-CompileRTSishly(main/StgOverflow,.c,)
-CompileRTSishly(main/StgStartup,.hc,-optc-DIN_GHC_RTS=1)
-CompileRTSishly(main/StgThreads,.hc,-optc-DIN_GHC_RTS=1)
-CompileRTSishly(main/StgUpdate,.hc,-optc-DIN_GHC_RTS=1)
-CompileRTSishly(main/Threads,.c,)
-CompileRTSishly(main/RtsFlags,.c,)
-CompileRTSishly(main/main,.c,)
-CompileRTSishly(profiling/CostCentre,.c,)
-CompileRTSishly(profiling/Hashing,.c,)
-CompileRTSishly(profiling/HeapProfile,.c,)
-CompileRTSishly(profiling/Indexing,.c,)
-CompileRTSishly(profiling/Timer,.c,)
-CompileRTSishly(prims/PrimArith,.c,)
-CompileRTSishly(prims/PrimMisc,.c,)
-CompileRTSishly(storage/SM1s,.c,)
-CompileRTSishly(storage/SM2s,.c,)
-CompileRTSishly(storage/SMap,.c,)
-CompileRTSishly(storage/SMcheck,.c,)
-CompileRTSishly(storage/SMcompacting,.c,)
-CompileRTSishly(storage/SMcopying,.c,)
-CompileRTSishly(storage/SMdu,.c,)
-CompileRTSishly(storage/SMevac,.c,)
-CompileRTSishly(storage/SMextn,.c,)
-CompileRTSishly(storage/SMgen,.c,)
-CompileRTSishly(storage/SMinit,.c,)
-CompileRTSishly(storage/SMmark,.hc,-optc-DIN_GHC_RTS=1 -optc-DMARK_REG_MAP)
-CompileRTSishly(storage/SMmarking,.c,)
-CompileRTSishly(storage/SMscan,.c,)
-CompileRTSishly(storage/SMscav,.c,)
-CompileRTSishly(storage/SMstacks,.c,)
-CompileRTSishly(storage/SMstatic,.c,)
-CompileRTSishly(storage/SMstats,.c,)
-CompileRTSishly(storage/mprotect,.c,)
-
-/****************************************************************
-* *
-* misc "make" targets -- depend, clean, tags *
-* *
-****************************************************************/
-
-ClearTagsFile()
-/* this is not the way we should do this [WDP [lazy] 94/09] */
-CTagsTarget( $(RTS_LC) $($RTS_LHC) $(CLIB_LC) )
-CTagsTarget( gmp/[a-z]*.c )
-
-CDependTarget( $(RTS_LC) $($RTS_LHC) $(CLIB_LC) )