Pull recent Hadrian changes from upstream
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Wed, 15 Nov 2017 21:58:19 +0000 (21:58 +0000)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Wed, 15 Nov 2017 21:58:19 +0000 (21:58 +0000)
Merge commit 'c1fcd9b3f60e8420dd228cd4e3efeb9cfa793aa5'

12 files changed:
1  2 
hadrian/.travis.yml
hadrian/README.md
hadrian/appveyor.yml
hadrian/cabal.project
hadrian/circle.yml
hadrian/doc/cross-compile.md
hadrian/hadrian.cabal
hadrian/src/CommandLine.hs
hadrian/src/Rules/Configure.hs
hadrian/src/Settings/Packages/GhcCabal.hs
hadrian/src/Settings/Packages/Rts.hs
hadrian/stack.yaml

index e2455b2,0000000..b89f42b
mode 100644,000000..100644
--- /dev/null
@@@ -1,90 -1,0 +1,92 @@@
-               - ./build.sh selftest
 +sudo: true
 +matrix:
 +    include:
 +        - os: linux
 +          env: MODE="--flavour=quickest inplace/bin/ghc-stage1"
 +          compiler: "GHC 8.0.2"
 +          addons:
 +              apt:
 +                  packages:
 +                      - ghc-8.0.2
 +                      - cabal-install-2.0
 +                      - zlib1g-dev
 +                  sources: hvr-ghc
 +
 +          before_install:
 +              - PATH="/opt/ghc/8.0.2/bin:$PATH"
 +              - PATH="/opt/cabal/2.0/bin:$PATH"
 +
 +          script:
 +              # Run internal Hadrian tests
-               - ./build.sh -j $MODE --no-progress --progress-colour=never --profile=-
++              - ./build.sh -c selftest
 +
 +              # Build GHC
-               - ./build.sh -j $MODE --no-progress --progress-colour=never --profile=-
++              - ./build.sh -j -c $MODE --no-progress --progress-colour=never --profile=-
 +
 +        - os: linux
 +          env: MODE="--flavour=quickest --integer-simple"
 +          compiler: "GHC 8.2.1"
 +          addons:
 +              apt:
 +                  packages:
 +                      - ghc-8.2.1
 +                      - cabal-install-1.22
 +                      - zlib1g-dev
 +                  sources: hvr-ghc
 +
 +          before_install:
 +              - PATH="/opt/ghc/8.2.1/bin:$PATH"
 +              - PATH="/opt/cabal/1.22/bin:$PATH"
 +
 +          script:
 +              # Build GHC
-               - ./build.sh -j $MODE --no-progress --progress-colour=never --profile=-
++              - ./build.sh -j -c $MODE --no-progress --progress-colour=never --profile=-
 +
 +              # Test GHC binary
 +              - cd ..
 +              - inplace/bin/ghc-stage2 -e 1+2
 +
 +        - os: osx
 +          osx_image: xcode8
 +          env: MODE="--flavour=quickest --integer-simple inplace/bin/ghc-stage1"
 +          before_install:
 +              - brew update
 +              - brew install ghc cabal-install python3
 +
 +          script:
 +              # Due to timeout limit of OS X build on Travis CI,
 +              # we will ignore selftest and build only stage1
-     - mkdir ghc/hadrian
++              - ./build.sh -j -c $MODE --no-progress --progress-colour=never --profile=-
 +
 +install:
 +    # Add Cabal to PATH
 +    - PATH="$HOME/.cabal/bin:$PATH"
 +    - export PATH
 +    - env
 +
 +    # Fetch GHC sources into ./ghc
 +    - git --version
 +    - git config --global url."git://github.com/ghc/packages-".insteadOf git://github.com/ghc/packages/
 +    - git clone --depth 1 --recursive git://github.com/ghc/ghc
 +    # --shallow-submodules is not supported on travis standard git 1.8 (linux), but it is supported
 +    # on Travis Mac OS X machines. But it does not work with github mirrors because it cannot
 +    # find commits.
 +
 +    # Install all Hadrian and GHC build dependencies
 +    - cabal update
 +    - cabal install alex happy
 +
++    # GHC comes with an older version of Hadrian, so we delete it
++    - rm -r ghc/hadrian/*
++
 +    # Travis has already cloned Hadrian into ./ and we need to move it
 +    # to ./ghc/hadrian -- one way to do it is to move the .git directory
 +    # and perform a hard reset in order to regenerate Hadrian files
 +    - mv .git ghc/hadrian
 +    - cd ghc/hadrian
 +    - git reset --hard HEAD
 +
 +cache:
 +    directories:
 +        - $HOME/.cabal
 +        - $HOME/.ghc
index eb3dd86,0000000..916edc2
mode 100644,000000..100644
--- /dev/null
@@@ -1,194 -1,0 +1,194 @@@
- simply as `build`. Note that Hadrian runs the `boot` and `configure` scripts automatically when
- needed. Use `--skip-configure` to suppress this behaviour (see the overview of command line
- flags below).
 +Hadrian
 +=======
 +
 +[![Linux & OS X status](https://img.shields.io/travis/snowleopard/hadrian/master.svg?label=Linux%20%26%20OS%20X)](https://travis-ci.org/snowleopard/hadrian) [![Windows status](https://img.shields.io/appveyor/ci/snowleopard/hadrian/master.svg?label=Windows)](https://ci.appveyor.com/project/snowleopard/hadrian) [![OS X status](https://img.shields.io/circleci/project/github/snowleopard/hadrian.svg?label=OS%20X)](https://circleci.com/gh/snowleopard/hadrian)
 +
 +Hadrian is a new build system for the [Glasgow Haskell Compiler][ghc]. It is based
 +on [Shake][shake] and we hope that it will soon replace the current
 +[Make-based build system][make]. If you are curious about the rationale behind the
 +project and the architecture of the build system you can find more details in
 +this [Haskell Symposium 2016 paper][paper] and this [Haskell eXchange 2016 talk][talk].
 +
 +The new build system can work side-by-side with the existing build system. Note, there is
 +some interaction between them: they put (some) build results in the same directories,
 +e.g. the resulting GHC is `inplace/bin/ghc-stage2`.
 +
 +Your first build
 +----------------
 +
 +Beware, the build system is in the alpha development phase. Things are shaky and sometimes
 +break; there are numerous [known issues][issues]. Not afraid? Then put on the helmet and
 +run the following command from root of the GHC tree:
 +
 +```
 +hadrian/build.sh -j
 +```
 +
 +or on Windows:
 +
 +```
 +hadrian/build.bat -j
 +```
 +
 +Here flag `-j` enables parallelism and is optional. We will further refer to the build script
- * `--skip-configure`: use this flag to suppress the default behaviour of Hadrian that
- runs the `boot` and `configure` scripts automatically when needed, so that you don't have
- to remember to run them manually. With `--skip-configure` you will need to manually run:
-     ```bash
-     ./boot
-     ./configure # On Windows run ./configure --enable-tarballs-autodownload
-     ```
-     as you normally do when using `make`. Beware, by default Hadrian may do network I/O on
- Windows to download necessary tarballs, which may sometimes be undesirable; `--skip-configure`
- is your friend in such cases.
++simply as `build`. Note that Hadrian can also run the `boot` and `configure` scripts
++automatically if you pass the flag `--configure`, or simply `-c`. See the overview of
++command line flags below.
 +
 +Notes:
 +
 +* If the default build script doesn't work, you might want to give a try to another one, e.g. based
 +on Cabal sandboxes (`build.cabal.*`), Stack (`build.stack.*`) or the global package database
 +(`build.global-db.*`). Also see [instructions for building GHC on Windows using Stack][windows-build].
 +
 +* Hadrian is written in Haskell and depends on the following packages:
 +`ansi-terminal extra mtl quickcheck shake`.
 +
 +* If you have never built GHC before, start with the [preparation guide][ghc-preparation].
 +
 +Using the build system
 +----------------------
 +Once your first build is successful, simply run `build` to rebuild. Build results
 +are placed into `_build` and `inplace` directories.
 +
 +#### Command line flags
 +
 +In addition to standard Shake flags (try `--help`), the build system
 +currently supports several others:
++
++* `--configure` or `-c`: use this flag to run the `boot` and `configure` scripts
++automatically, so that you don't have to remember to run them manually as you normally
++do when using Make (typically only in the first build):
++    ```bash
++    ./boot
++    ./configure # On Windows run ./configure --enable-tarballs-autodownload
++    ```
++    Beware that with this flag Hadrian may do network I/O on Windows to download necessary
++    tarballs, which may sometimes be undesirable.
++
 +* `--flavour=FLAVOUR`: choose a build flavour. The following settings are currently supported:
 +`default`, `quick`, `quickest`, `perf`, `prof`, `devel1` and `devel2`. As an example, the
 +`quickest` flavour adds `-O0` flag to all GHC invocations and builds libraries only in the
 +`vanilla` way, which speeds up builds by 3-4x. Build flavours are documented
 +[here](https://github.com/snowleopard/hadrian/blob/master/doc/flavours.md).
 +
 +* `--freeze1`: freeze Stage1 GHC, i.e. do not rebuild it even if some of its source files
 +are out-of-date. This allows to significantly reduce the rebuild time when you are working
 +on a feature that affects both Stage1 and Stage2 compilers, but may lead to incorrect
 +build results. To unfreeze Stage1 GHC simply drop the `--freeze1` flag and Hadrian will
 +rebuild all out-of-date files.
 +
 +* `--integer-simple`: build GHC using the `integer-simple` integer library (instead
 +of `integer-gmp`).
 +
 +* `--progress-colour=MODE`: choose whether to use colours when printing build progress
 +info. There are three settings: `never` (do not use colours), `auto` (attempt to detect
 +whether the console supports colours; this is the default setting), and `always` (use
 +colours).
 +
 +* `--progress-info=STYLE`: choose how build progress info is printed. There are four
 +settings: `none`, `brief` (one line per build command; this is the default setting),
 +`normal` (typically a box per build command), and `unicorn` (when `normal` just won't do).
 +
 +* `--split-objects`: generate split objects, which are switched off by default. Due to
 +a GHC [bug][ghc-split-objs-bug], you need a full clean rebuild when using this flag.
 +
 +* `--verbose`: run Hadrian in verbose mode. In particular this prints diagnostic messages
 +by Shake oracles.
 +
 +#### User settings
 +
 +The Make-based build system uses `mk/build.mk` to specify user build settings. We
 +use `hadrian/UserSettings.hs` for the same purpose, see [documentation](doc/user-settings.md).
 +
 +#### Clean and full rebuild
 +
 +* `build clean` removes all build artefacts.
 +
 +* `build -B` forces Shake to rerun all rules, even if the previous build results are
 +are still up-to-date.
 +
 +#### Documentation
 +
 +To build GHC documentation, run `build docs`. Note that finer-grain documentation
 +targets (e.g. building only HTML documentation or only the GHC User's Guide)
 +are currently not supported.
 +
 +#### Source distribution
 +
 +To build a GHC source distribution tarball, run `build sdist-ghc`.
 +
 +#### Installation
 +
 +To build and install GHC artifacts, run `build install`.
 +
 +By default, GHC will be installed to the specified _prefix_ path on your system,
 +relative to the root of the file system. For example on UNIX, GHC will be installed
 +to `/usr/local/bin`. By setting the command line flag `--install-destdir=[DESTDIR]`,
 +you can install GHC to path `DESTDIR/<prefix>` instead. Make sure you use correct
 +absolute path as `DESTDIR` on Windows, e.g. `C:/path`, which installs GHC
 +into `C:/path/usr/local`.
 +
 +#### Testing
 +
 +* `build validate` runs GHC tests by simply executing `make fast` in `testsuite/tests`
 +directory. This can be used instead of `sh validate --fast --no-clean` in the existing
 +build system. Note: this will rebuild Stage2 GHC, `ghc-pkg` and `hpc` if they are out of date.
 +
 +* `build test` runs GHC tests by calling the `testsuite/driver/runtests.py` python
 +script with appropriate flags. The current implementation is limited and cannot
 +replace the `validate` script (see [#187][validation-issue]).
 +
 +* `build selftest` runs tests of the build system. Current test coverage is close to
 +zero (see [#197][test-issue]).
 +
 +Current limitations
 +-------------------
 +The new build system still lacks many important features:
 +* Validation is not implemented: [#187][validation-issue].
 +* Dynamic linking on Windows is not supported [#343][dynamic-windows-issue].
 +* There is no support for binary distribution: [#219][bin-dist-issue].
 +
 +Check out [milestones] to see when we hope to resolve the above limitations.
 +
 +How to contribute
 +-----------------
 +
 +The best way to contribute is to try the new build system, report the issues
 +you found, and attempt to fix them. Please note: the codebase is very unstable
 +at present and we expect a lot of further refactoring. If you would like to
 +work on a particular issue, please let everyone know by adding a comment about
 +this. The issues that are currently on the critical path and therefore require
 +particular attention are listed in [#239](https://github.com/snowleopard/hadrian/issues/239).
 +Also have a look at [projects](https://github.com/snowleopard/hadrian/projects)
 +where open issues and pull requests are grouped into categories.
 +
 +Acknowledgements
 +----------------
 +
 +I started this project as part of my 6-month research visit to Microsoft
 +Research Cambridge, which was funded by Newcastle University, EPSRC, and
 +Microsoft Research. I would like to thank Simon Peyton Jones, Neil Mitchell
 +and Simon Marlow for kick-starting the project and for their guidance.
 +Zhen Zhang has done fantastic work on Hadrian as part of his Summer of
 +Haskell 2017 [project](https://summer.haskell.org/ideas.html#hadrian-ghc),
 +solving a few heavy and long-overdue issues. Last but not least, big thanks
 +to all other project [contributors][contributors], who helped me endure and
 +enjoy the project.
 +
 +[ghc]: https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
 +[shake]: https://github.com/ndmitchell/shake
 +[make]: https://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
 +[paper]: https://www.staff.ncl.ac.uk/andrey.mokhov/Hadrian.pdf
 +[talk]: https://skillsmatter.com/skillscasts/8722-meet-hadrian-a-new-build-system-for-ghc
 +[issues]: https://github.com/snowleopard/hadrian/issues
 +[ghc-preparation]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation
 +[ghc-windows-quick-build]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows#AQuickBuild
 +[windows-build]: https://github.com/snowleopard/hadrian/blob/master/doc/windows.md
 +[ghc-split-objs-bug]: https://ghc.haskell.org/trac/ghc/ticket/11315
 +[test-issue]: https://github.com/snowleopard/hadrian/issues/197
 +[validation-issue]: https://github.com/snowleopard/hadrian/issues/187
 +[dynamic-windows-issue]: https://github.com/snowleopard/hadrian/issues/343
 +[bin-dist-issue]: https://github.com/snowleopard/hadrian/issues/219
 +[milestones]: https://github.com/snowleopard/hadrian/milestones
 +[contributors]: https://github.com/snowleopard/hadrian/graphs/contributors
index fbedf8f,0000000..32fc436
mode 100644,000000..100644
--- /dev/null
@@@ -1,39 -1,0 +1,41 @@@
- clone_folder: "c:\\ghc\\hadrian"
++clone_folder: "c:\\new-hadrian"
 +environment:
 +  global:
 +    STACK_ROOT: "c:\\sr"
 +
 +cache:
 +    - "c:\\sr -> appveyor.yml"
 +
 +install:
 +    # Get Stack
 +    - curl -ostack.zip -LsS --insecure https://www.stackage.org/stack/windows-x86_64
 +    - 7z x stack.zip stack.exe
 +
++    # Note: AppVeyor has already cloned Hadrian into c:\new-hadrian
 +    # Fetch GHC sources into c:\ghc
-     # Note: AppVeyor has already cloned Hadrian into c:\ghc\hadrian, so it's tricky
 +    - cd ..
-     - git init
-     - git remote add origin git://git.haskell.org/ghc.git
-     - git pull --recurse-submodules origin master
-     - git submodule update --init --recursive --quiet
++    - git clone --recursive git://git.haskell.org/ghc.git
++    # GHC comes with an older version of Hadrian, so we delete it
++    - rm -rf ghc\hadrian
++    # Copy new Hadrian into ./ghc/hadrian
++    - cp -r new-hadrian ghc\hadrian
++
++    # Install Alex and Happy
++    - set PATH=C:\Users\appveyor\AppData\Roaming\local\bin;%PATH%
++    - ghc\hadrian\stack install --install-ghc alex happy > nul
 +
 +    # Install all Hadrian and GHC build dependencies
-     - cd hadrian
++    - cd ghc\hadrian
 +    - stack setup > nul
 +    - appveyor-retry stack exec -- pacman -S autoconf automake-wrapper make patch python tar --noconfirm
 +
 +build_script:
-     # Build Hadrian
-     - stack build alex happy # Otherwise 'build' fails on AppVeyor
-     # Run internal Hadrian tests
-     - build selftest
++    # Build Hadrian and run internal Hadrian tests
++    - build -c selftest
 +
 +    # Build GHC
-     - build -j --flavour=quickest --no-progress --progress-colour=never --profile=-
++    - build -j -c --flavour=quickest --no-progress --progress-colour=never --profile=-
 +
 +    # Test GHC binary
 +    - cd ..
 +    - inplace\bin\ghc-stage2 -e 1+2
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge