daml/bazel_tools/ghc-lib
dylant-da 32d6a4a2dc
Improve error message when implementing non-interface (Issue #13823) (#14249)
* Improve error for `implements` on non-interface using GHC source-map

* Pass source location for implements directly

* Update GHC revision to pick up updated implements location

* Change revision to point to merged GHC source location changes

CHANGELOG_BEGIN
CHANGELOG_END

* Handlers output strings in convertInterfaceTyCon

* Improve error for requires on non-interface

* Use prettyPrint instead of GHC.showSDocUnsafe . ppr

* Test error messages for implement/require noninterface

* Fix error line numbers, point to merged GHC changes instead of branch

* Enable interfaces in new tests, Fix copyright year

* Add trailing newline to interface tests

Co-authored-by: Remy <remy.haemmerle@daml.com>

Co-authored-by: Remy <remy.haemmerle@daml.com>
2022-06-28 10:14:53 +01:00
..
ghc-lib Speed up ghc-lib(-parser) sdist generation (#14076) 2022-06-09 09:15:19 +02:00
ghc-lib-parser Speed up ghc-lib(-parser) sdist generation (#14076) 2022-06-09 09:15:19 +02:00
BUILD.bazel Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
BUILD.ghc Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
BUILD.ghc-lib-gen Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
BUILD.nix-deps Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
defs.bzl Use -DDAML_PRIM cpp flag for building ghc-lib{,-parser} (#14074) 2022-06-03 15:04:23 +00:00
ghc-lib-no-stack.patch Speed up ghc-lib(-parser) sdist generation (#14076) 2022-06-09 09:15:19 +02:00
lib.sh Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
README.md Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
repositories.bzl Bazelify ghc-lib (#12508) 2022-05-19 10:49:16 +02:00
version.bzl Improve error message when implementing non-interface (Issue #13823) (#14249) 2022-06-28 10:14:53 +01:00

GHC-LIB

This setup builds ghc-lib and ghc-lib-parser entirely within Bazel, including the generation of the Cabal sdists performed by ghc-lib-gen.

The generated sdists are built by Bazel using haskell_cabal_library rules and then included in the stack_snapshot rule for @stackage as vendored_packages.

Note, stack_snapshot's vendoring mechanism requries the Cabal files to be sources files, i.e. it cannot reference generated Cabal files. Therefore, the Cabal files are checked in and need to be updated when ghc-lib(-parser) changes.

Build

  • To build the sdists of ghc-lib(-parser) use the following commands:
    $ bazel build @da-ghc//:ghc-lib-parser
    $ bazel build @da-ghc//:ghc-lib
    
  • To build the Cabal libraries ghc-lib(-parser) use the following commands:
    $ bazel build //bazel_tools/ghc-lib/ghc-lib-parser
    $ bazel build //bazel_tools/ghc-lib/ghc-lib
    
    or alternatively you can use the aliases exposed by stack_snapshot's vendored_packages.
    $ bazel build @stackage//:ghc-lib-parser
    $ bazel build @stackage//:ghc-lib
    
  • To depend on ghc-lib(-parser) use the targets exposed by stack_snapshot:
    @stackage//:ghc-lib-parser
    @stackage//:ghc-lib
    

Update

Note, an update of any of these may affect ghc-lib(-parser)'s Cabal files. If so, see below for updating the checked in Cabal files.

  • To update the GHC revision used to build ghc-lib change the GHC_REV variable within bazel_tools/ghc-lib/version.bzl. If needed update the patches listed within GHC_PATCHES, see below.
  • To update the GHC version used to build ghc-lib also update the GHC_FLAVOR and GHC_LIB_VERSION variables within bazel_tools/ghc-lib/version.bzl.
  • To update the ghc-lib revision, which provides the ghc-lib-gen tool, change the GHC_LIB_REV and GHC_LIB_SHA256 variables within bazel_tools/ghc-lib/version.bzl and update the patches in GHC_LIB_PATCHES if needed.
  • To update the checked in Cabal files execute the following Bazel commands.
    $ bazel run //bazel_tools/ghc-lib/ghc-lib-parser:cabal-update
    $ bazel run //bazel_tools/ghc-lib/ghc-lib:cabal-update
    

Patches

  • ghc-lib-no-stack.patch patch ghc-lib-gen to use a prebuilt Hadrian binary. With this change ghc-lib-gen no longer requires stack.