Skip to content
  • wolfgang's avatar
    [project @ 2005-01-14 08:01:26 by wolfgang] · 4f457f34
    wolfgang authored
    Dynamic Linking, Part 2:
    
    Hack the Makefiles to build dynamic libraries.
    This allows you to actually use dynamic libraries to greatly reduce binary
    sizes on Darwin/PowerPC and on powerpc64-linux (for now).
    
    To use this, add the following to your build.mk
    
    SplitObjs=NO
    GhcBuildDylibs=YES
    GhcStage2HcOpts=-dynamic
    GhcLibHcOpts+=-fPIC -dynamic
    GhcRtsHcOpts+=-fPIC -dynamic
    GHC_CC_OPTS+=-fPIC
    
    (You can leave out the last three lines on powerpc64-linux).
    
    Then, to compile a program using dynamic libraries, pass the -dynamic option to GHC.
    To make GHCi use the dynamic libraries instead of .o files, just delete the HS*.o files.
    
    The dynamic library files are named libHSfoo_dyn.dylib or libHSfoo_dyn.so.
    
    Note that the dynamic and static libraries are build from the same .o files,
    but we really want to build the static libraries with SplitObjs and without
    -fPIC -dynamic to achieve better code size and performance.
    
    ghc/compiler/ghci/Linker.lhs:
        When looking for a library, look for HSfoo.o first (as before),
        then look for libHSfoo_dyn.[so/dylib] before looking for
        libHSfoo.[so/dylib].
    
    ghc/compiler/main/DriverPipeline.hs:
        Main.dll_o and PrelMain.dll_o are dead, at least for now.
    
    ghc/compiler/main/Packages.lhs:
        When -dynamic is specified, add "_dyn" to all libraries specified in
        hs-libraries (not to the extra-libs).
    
    ghc/lib/compat/Makefile:
        Never build libghccompat as a dynamic lib.
    
    mk/package.mk:
        if GhcBuildDylibs is set to YES, build dynamic libraries.
    
    mk/target.mk:
        When installing .dylibs (Darwin only), update the install_name to point
        to the final location.
        (Somebody please read Apple's documentation on what install_names are,
        and then comment on whether this is a useful feature or whether it should
        be done the "normal" unix way).
    4f457f34