Commit 15797302 authored by Alp Mestanogullari's avatar Alp Mestanogullari Committed by Andrey Mokhov

Preliminary bindist rule (#555)

* Preliminary bindist rule

For now, we only ship `<build root>/{bin, lib}` and the few make build system
related files that are needed to support a simple

```
./configure [--prefix=PATH] && make install
```

workflow. The current binary distributions of GHC support a wider range
of parameters, but I figured it would be a good thing to start with this
and enhance it as we all see fit and perhaps using feedback from GHC HQ
(@bgamari in particular) and bindist users.

* document binary distribution rule in README

* sdist-ghc -> source-dist, Rules.Bindist -> Rules.BinaryDist
parent a8ad5af8
......@@ -125,7 +125,18 @@ are currently not supported.
#### Source distribution
To build a GHC source distribution tarball, run `build sdist-ghc`.
To build a GHC source distribution tarball, run `build source-dist`.
#### Binary distribution
To build a GHC binary distribution, run `build binary-dist`. The resulting
tarball contains just enough to support the
``` sh
$ ./configure [--prefix=PATH] && make install
```
workflow, for now.
#### Testing
......
......@@ -7,6 +7,7 @@
alex = @AlexCmd@
ar = @ArCmd@
autoreconf = autoreconf
cc = @CC@
happy = @HappyCmd@
hs-cpp = @HaskellCPPCmd@
......
......@@ -51,6 +51,7 @@ executable hadrian
, Oracles.Setting
, Oracles.ModuleFiles
, Rules
, Rules.BinaryDist
, Rules.Clean
, Rules.Compile
, Rules.Configure
......
......@@ -89,6 +89,7 @@ instance NFData HaddockMode
-- @GhcPkg Stage1@ is the one built in Stage0.
data Builder = Alex
| Ar ArMode Stage
| Autoreconf FilePath
| DeriveConstants
| Cc CcMode Stage
| Configure FilePath
......@@ -174,6 +175,7 @@ instance H.Builder Builder where
runtimeDependencies :: Builder -> Action [FilePath]
runtimeDependencies = \case
Autoreconf dir -> return [dir -/- "configure.ac"]
Configure dir -> return [dir -/- "configure"]
Ghc _ Stage0 -> return []
......@@ -232,6 +234,7 @@ instance H.Builder Builder where
Ar Unpack _ -> cmd echo [Cwd output] [path] buildArgs
Autoreconf dir -> cmd echo [Cwd dir] [path] buildArgs
Configure dir -> do
-- Inject /bin/bash into `libtool`, instead of /bin/sh,
-- otherwise Windows breaks. TODO: Figure out why.
......@@ -287,6 +290,7 @@ systemBuilderPath builder = case builder of
Alex -> fromKey "alex"
Ar _ Stage0 -> fromKey "system-ar"
Ar _ _ -> fromKey "ar"
Autoreconf _ -> fromKey "autoreconf"
Cc _ Stage0 -> fromKey "system-cc"
Cc _ _ -> fromKey "cc"
-- We can't ask configure for the path to configure!
......
......@@ -13,6 +13,7 @@ data HaddockMode = BuildPackage | BuildIndex
data Builder = Alex
| Ar ArMode Stage
| Autoreconf FilePath
| DeriveConstants
| Cc CcMode Stage
| Configure FilePath
......
......@@ -8,15 +8,16 @@ import qualified Hadrian.Oracles.TextFile
import Expression
import GHC
import qualified Oracles.ModuleFiles
import qualified Rules.BinaryDist
import qualified Rules.Compile
import qualified Rules.PackageData
import qualified Rules.Configure
import qualified Rules.Dependencies
import qualified Rules.Documentation
import qualified Rules.Generate
import qualified Rules.Configure
import qualified Rules.Gmp
import qualified Rules.Libffi
import qualified Rules.Library
import qualified Rules.PackageData
import qualified Rules.Program
import qualified Rules.Register
import Settings
......@@ -122,6 +123,7 @@ packageRules = do
buildRules :: Rules ()
buildRules = do
Rules.BinaryDist.bindistRules
Rules.Configure.configureRules
Rules.Generate.copyRules
Rules.Generate.generateRules
......
......@@ -9,7 +9,7 @@ import Rules.Clean
sourceDistRules :: Rules ()
sourceDistRules = do
"sdist-ghc" ~> do
"source-dist" ~> do
-- We clean the source tree first.
-- See https://github.com/snowleopard/hadrian/issues/384.
-- TODO: Do we still need to clean the tree?
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment