Rodrigo Mesquita pushed to branch wip/romes/24212 at Glasgow Haskell Compiler / GHC
Commits:
-
7ad095f0
by Rodrigo Mesquita at 2025-07-10T18:31:48+01:00
3 changed files:
Changes:
| ... | ... | @@ -417,6 +417,34 @@ AC_OUTPUT |
| 417 | 417 | |
| 418 | 418 | VALIDATE_GHC_TOOLCHAIN([default.target],[default.target.ghc-toolchain])
|
| 419 | 419 | |
| 420 | +if test "$EnableDistroToolchain" = "YES"; then
|
|
| 421 | + # If the user specified --enable-distro-toolchain then we just use the
|
|
| 422 | + # executable names, not paths. We do this by finding strings of paths to
|
|
| 423 | + # programs and keeping the basename only:
|
|
| 424 | + cp default.target default.target.bak
|
|
| 425 | + |
|
| 426 | + while IFS= read -r line; do
|
|
| 427 | + if echo "$line" | grep -q 'prgPath = "'; then
|
|
| 428 | + path=$(echo "$line" | sed -E 's/.*prgPath = "([[^"]]+)".*/\1/')
|
|
| 429 | + base=$(basename "$path")
|
|
| 430 | + echo "$line" | sed "s|$path|$base|"
|
|
| 431 | + else
|
|
| 432 | + echo "$line"
|
|
| 433 | + fi
|
|
| 434 | + done < default.target.bak > default.target
|
|
| 435 | + echo "Applied --enable-distro-toolchain basename substitution to default.target:"
|
|
| 436 | + cat default.target
|
|
| 437 | +fi
|
|
| 438 | + |
|
| 439 | +if test "$windows" = YES -a "$EnableDistroToolchain" = "NO"; then
|
|
| 440 | + # Handle the Windows toolchain installed in FP_SETUP_WINDOWS_TOOLCHAIN.
|
|
| 441 | + # We need to issue a substitution to use $tooldir,
|
|
| 442 | + # See Note [tooldir: How GHC finds mingw on Windows]
|
|
| 443 | + SUBST_TOOLDIR([default.target])
|
|
| 444 | + echo "Applied tooldir substitution to default.target:"
|
|
| 445 | + cat default.target
|
|
| 446 | +fi
|
|
| 447 | + |
|
| 420 | 448 | rm -Rf acargs acghc-toolchain actmp-ghc-toolchain
|
| 421 | 449 | |
| 422 | 450 | echo "****************************************************"
|
| ... | ... | @@ -87,6 +87,7 @@ lib/settings : config.mk |
| 87 | 87 | @rm -f $@
|
| 88 | 88 | @echo '[("target os", "$(HaskellTargetOs)")' >> $@
|
| 89 | 89 | @echo ',("target arch", "$(HaskellTargetArch)")' >> $@
|
| 90 | + @echo ',("target has libm", "$(TargetHasLibm)")' >> $@
|
|
| 90 | 91 | @echo ',("unlit command", "$$topdir/../bin/$(CrossCompilePrefix)unlit")' >> $@
|
| 91 | 92 | @echo ',("target RTS linker only supports shared libraries", "$(TargetRTSLinkerOnlySupportsSharedLibs)")' >> $@
|
| 92 | 93 | @echo ',("Use interpreter", "$(GhcWithInterpreter)")' >> $@
|
| ... | ... | @@ -97,9 +98,10 @@ lib/settings : config.mk |
| 97 | 98 | @echo ',("base unit-id", "$(BaseUnitId)")' >> $@
|
| 98 | 99 | @echo "]" >> $@
|
| 99 | 100 | |
| 100 | -lib/targets/default.target : config.mk
|
|
| 101 | +lib/targets/default.target : config.mk default.target
|
|
| 101 | 102 | @rm -f $@
|
| 102 | - @echo "DOING DEFAULT.TARGET"
|
|
| 103 | + @echo "Copying the bindist-configured default.target to lib/targets/default.target"
|
|
| 104 | + cp default.target $@
|
|
| 103 | 105 | |
| 104 | 106 | # We need to install binaries relative to libraries.
|
| 105 | 107 | BINARIES = $(wildcard ./bin/*)
|
| 1 | +dnl Note [How we configure the bundled windows toolchain]
|
|
| 2 | +dnl ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
| 3 | +dnl As per Note [tooldir: How GHC finds mingw on Windows], when using the
|
|
| 4 | +dnl bundled windows toolchain, the GHC settings file must refer to the
|
|
| 5 | +dnl toolchain through a path relative to $tooldir (binary distributions on
|
|
| 6 | +dnl Windows should work without configure, so the paths must be relative to the
|
|
| 7 | +dnl installation). However, hadrian expects the configured toolchain to use
|
|
| 8 | +dnl full paths to the executable.
|
|
| 9 | +dnl
|
|
| 10 | +dnl This is how the bundled windows toolchain is configured, to define the
|
|
| 11 | +dnl toolchain with paths to the executables, while still writing into GHC
|
|
| 12 | +dnl settings the paths relative to $tooldir:
|
|
| 13 | +dnl
|
|
| 14 | +dnl * If using the bundled toolchain, FP_SETUP_WINDOWS_TOOLCHAIN will be invoked
|
|
| 15 | +dnl
|
|
| 16 | +dnl * FP_SETUP_WINDOWS_TOOLCHAIN will set the toolchain variables to paths
|
|
| 17 | +dnl to the bundled toolchain (e.g. CFLAGS=/full/path/to/mingw/bin/gcc)
|
|
| 18 | +dnl
|
|
| 19 | +dnl * Later on, at the end of distrib/configure.ac, we substitute occurrences of the path to the
|
|
| 20 | +dnl mingw tooldir by $tooldir (see SUBST_TOOLDIR).
|
|
| 21 | +dnl The reason is the Settings* variants of toolchain variables are used by the bindist configure to
|
|
| 22 | +dnl create the settings file, which needs the windows bundled toolchain to be relative to $tooldir.
|
|
| 23 | +dnl
|
|
| 24 | +dnl The ghc-toolchain program isn't concerned with any of these complications:
|
|
| 25 | +dnl it is passed either the full paths to the toolchain executables, or the bundled
|
|
| 26 | +dnl mingw path is set first on $PATH before invoking it. And ghc-toolchain
|
|
| 27 | +dnl will, as always, output target files with full paths to the executables.
|
|
| 28 | +dnl
|
|
| 29 | +dnl Hadrian accounts for this as it does for the toolchain executables
|
|
| 30 | +dnl configured by configure -- in fact, hadrian doesn't need to know whether
|
|
| 31 | +dnl the toolchain description file was generated by configure or by
|
|
| 32 | +dnl ghc-toolchain.
|
|
| 33 | + |
|
| 34 | +# SUBST_TOOLDIR
|
|
| 35 | +# ----------------------------------
|
|
| 36 | +# $1 - the filepath where to search for occurrences of the path to the
|
|
| 37 | +# inplace mingw, and update by substituting said occurrences by
|
|
| 38 | +# the value of $mingw_install_prefix, where the mingw toolchain will be at
|
|
| 39 | +# install time
|
|
| 40 | +#
|
|
| 41 | +# See Note [How we configure the bundled windows toolchain]
|
|
| 42 | +AC_DEFUN([SUBST_TOOLDIR],
|
|
| 43 | +[
|
|
| 44 | + sed -i.bkp $1 's%'"$mingw_prefix"'%'"$mingw_install_prefix"'%g'
|
|
| 45 | +]) |