Skip to content
  • Rodrigo Mesquita's avatar
    ghc-toolchain: Toolchain Selection · 31dcd26c
    Rodrigo Mesquita authored and Matthew Pickering's avatar Matthew Pickering committed
    This commit integrates ghc-toolchain, the brand new way of configuring
    toolchains for GHC, with the Hadrian build system, with configure, and
    extends and improves the first iteration of ghc-toolchain.
    
    The general overview is
    
    * We introduce a program invoked `ghc-toolchain --triple=...` which, when run,
      produces a file with a `Target`. A `GHC.Toolchain.Target.Target`
      describes the properties of a target and the toolchain (executables
      and configured flags) to produce code for that target
    
    * Hadrian was modified to read Target files, and will both
      * Invoke the toolchain configured in the Target file as needed
      * Produce a `settings` file for GHC based on the Target file for that stage
    
    * `./configure` will invoke ghc-toolchain to generate target files, but
      it will also generate target files based on the flags configure itself
      configured (through `.in` files that are substituted)
    
      * By default, the Targets generated by configure are still (for now) the ones used by Hadrian
    
      * But we additionally validate the Target files generated by
        ghc-toolchain against the ones generated by configure, to get a head
        start on catching configuration bugs before we transition
        completely.
    
      * When we make that transition, we will want to drop a lot of the
        toolchain configuration logic from configure, but keep it otherwise.
    
    * For each compiler stage we should have 1 target file (up to a stage compiler we can't run in our machine)
      * We just have a HOST target file, which we use as the target for stage0
      * And a TARGET target file, which we use for stage1 (and later stages, if not cross compiling)
      * Note there is no BUILD target file, because we only support cross compilation where BUILD=HOST
      * (for more details on cross-compilation see discussion on !9263)
    
    See also
    * Note [How we configure the bundled windows toolchain]
    * Note [ghc-toolchain consistency checking]
    * Note [ghc-toolchain overview]
    
    Ticket: #19877
    MR: !9263
    31dcd26c