summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@well-typed.com>2022-12-14 17:15:08 -0500
committerBen Gamari <ben@smart-cactus.org>2022-12-23 10:30:21 -0500
commit34d1f0fbb6f4ed6249e0fe7eab6e39aa28fc200b (patch)
treeb4e654c568a243bbbcdd0d0faaf466be028b279e
parent0476f4e64c9151d18854844a8803b27781da447b (diff)
downloadhaskell-34d1f0fbb6f4ed6249e0fe7eab6e39aa28fc200b.tar.gz
compiler: Ensure that GHC toolchain is first in search path
As noted in #22561, it is important that GHC's toolchain look first for its own headers and libraries to ensure that the system's are not found instead. If this happens things can break in surprising ways (e.g. see #22561). (cherry picked from commit 8071efc307ba2df7362ff3b96c898afc61addc21)
-rw-r--r--compiler/GHC/Settings/IO.hs10
-rw-r--r--m4/fp_settings.m48
2 files changed, 9 insertions, 9 deletions
diff --git a/compiler/GHC/Settings/IO.hs b/compiler/GHC/Settings/IO.hs
index 3706060b16..2c1b9880f9 100644
--- a/compiler/GHC/Settings/IO.hs
+++ b/compiler/GHC/Settings/IO.hs
@@ -79,11 +79,11 @@ initSettings top_dir = do
myExtraGccViaCFlags <- getSetting "GCC extra via C opts"
cc_prog <- getToolSetting "C compiler command"
cxx_prog <- getToolSetting "C++ compiler command"
- cc_args_str <- getSetting "C compiler flags"
- cxx_args_str <- getSetting "C++ compiler flags"
+ cc_args_str <- getToolSetting "C compiler flags"
+ cxx_args_str <- getToolSetting "C++ compiler flags"
gccSupportsNoPie <- getBooleanSetting "C compiler supports -no-pie"
cpp_prog <- getToolSetting "Haskell CPP command"
- cpp_args_str <- getSetting "Haskell CPP flags"
+ cpp_args_str <- getToolSetting "Haskell CPP flags"
platform <- either pgmError pure $ getTargetPlatform settingsFile mySettings
@@ -125,13 +125,13 @@ initSettings top_dir = do
-- Other things being equal, as and ld are simply gcc
- cc_link_args_str <- getSetting "C compiler link flags"
+ cc_link_args_str <- getToolSetting "C compiler link flags"
let as_prog = cc_prog
as_args = map Option cc_args
ld_prog = cc_prog
ld_args = map Option (cc_args ++ words cc_link_args_str)
ld_r_prog <- getToolSetting "Merge objects command"
- ld_r_args <- getSetting "Merge objects flags"
+ ld_r_args <- getToolSetting "Merge objects flags"
let ld_r
| null ld_r_prog = Nothing
| otherwise = Just (ld_r_prog, map Option $ words ld_r_args)
diff --git a/m4/fp_settings.m4 b/m4/fp_settings.m4
index 25c2ca30f9..617bc0c005 100644
--- a/m4/fp_settings.m4
+++ b/m4/fp_settings.m4
@@ -10,12 +10,12 @@ AC_DEFUN([FP_SETTINGS],
# See Note [tooldir: How GHC finds mingw on Windows]
mingw_bin_prefix='$$tooldir/mingw/bin/'
SettingsCCompilerCommand="${mingw_bin_prefix}clang.exe"
- SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2"
+ SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2 -I$$tooldir/mingw/include"
SettingsCxxCompilerCommand="${mingw_bin_prefix}clang++.exe"
- SettingsCxxCompilerFlags="$CONF_CXX_OPTS_STAGE2"
- SettingsCCompilerLinkFlags="$CONF_GCC_LINKER_OPTS_STAGE2"
+ SettingsCxxCompilerFlags="$CONF_CXX_OPTS_STAGE2 -I$$tooldir/mingw/include"
+ SettingsCCompilerLinkFlags="$CONF_GCC_LINKER_OPTS_STAGE2 -L$$tooldir/mingw/lib -L$$tooldir/mingw/x86_64-w64-mingw32/lib"
SettingsHaskellCPPCommand="${mingw_bin_prefix}clang.exe"
- SettingsHaskellCPPFlags="$HaskellCPPArgs"
+ SettingsHaskellCPPFlags="$HaskellCPPArgs -I$$tooldir/mingw/include"
SettingsLdCommand="${mingw_bin_prefix}ld.lld.exe"
SettingsLdFlags=""
# LLD does not support object merging (#21068)