Add gen-dll as replacement for dll-split
authorTamar Christina <tamar@zhox.com>
Tue, 29 Aug 2017 22:09:09 +0000 (23:09 +0100)
committerTamar Christina <tamar@zhox.com>
Tue, 29 Aug 2017 22:09:09 +0000 (23:09 +0100)
commit5f6a82040694f7c8c2b394c1b418c0167b963e0b
treec176440e824dd48e2ee54814272642ce453f664f
parent3c6b2fc3b5ca11a5410405664e4640767ef941dd
Add gen-dll as replacement for dll-split

Summary:
This tool can be used to generate dll's for any list of object files
given to it. It will then repartition them automatically to fit within
a dll and generates as many dll's as needed to do this. Cyclic dependencies
between these generated dlls are handle automatically so there is no need
to tell it how to partition.

It is also a lot more general than `dll-split` as it is able to split any
package not just `libGHC`. It also uses a trick using GNU style import libraries
to hide the splitting from the rest of the pipeline. Which means come linking time
you don't need to know which dll contains what symbol or how many split dlls were
created.

The import libraries are by default created with libtool. However since libtool is BFD
based it is very slow. So if present and detected by configure the `genlib` tool
from the msys2 project is used. This makes a difference of about ~45 minutes when compiling.

To install `genlib` run `pacman -Sy mingw-w64-$(uname -m)-tools-git`.

More detailed explaination of the process can be found here
https://ghc.haskell.org/trac/ghc/wiki/WindowsDynamicLinking

Test Plan: ./validate

Reviewers: austin, hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, thomie, erikd, #ghc_windows_task_force

GHC Trac Issues: #5987

Differential Revision: https://phabricator.haskell.org/D3883
.gitignore
aclocal.m4
configure.ac
docs/users_guide/8.4.1-notes.rst
ghc.mk
rts/ghc.mk
rules/build-package-way.mk
utils/gen-dll/Main.hs [new file with mode: 0644]
utils/gen-dll/Makefile [new file with mode: 0644]
utils/gen-dll/gen-dll.cabal.in [new file with mode: 0644]
utils/gen-dll/ghc.mk [new file with mode: 0644]