Skip to content
Snippets Groups Projects
Commit fec3a3cf authored by GHC GitLab CI's avatar GHC GitLab CI Committed by Ben Gamari
Browse files

configure: Avoid hard-coded ld path on Windows

The fix to #17962 ended up regressing on Windows as it failed to
replicate the logic responsible for overriding the toolchain paths on
Windows. This resulted in a hard-coded path to a directory that likely
doesn't exist on the user's system (#18550).

(cherry picked from commit 34e0fa96)
parent 8a85216c
No related branches found
No related tags found
No related merge requests found
...@@ -516,6 +516,10 @@ AC_DEFUN([FP_SETTINGS], ...@@ -516,6 +516,10 @@ AC_DEFUN([FP_SETTINGS],
SettingsHaskellCPPCommand="${mingw_bin_prefix}gcc.exe" SettingsHaskellCPPCommand="${mingw_bin_prefix}gcc.exe"
SettingsHaskellCPPFlags="$HaskellCPPArgs" SettingsHaskellCPPFlags="$HaskellCPPArgs"
SettingsLdCommand="${mingw_bin_prefix}ld.exe" SettingsLdCommand="${mingw_bin_prefix}ld.exe"
# Overrides FIND_MERGE_OBJECTS in order to avoid hard-coding linker
# path on Windows (#18550).
SettingsMergeObjectsCommand="${SettingsLdCommand}"
SettingsMergeObjectsFlags="-r --oformat=pe-bigobj-x86-64"
SettingsArCommand="${mingw_bin_prefix}ar.exe" SettingsArCommand="${mingw_bin_prefix}ar.exe"
SettingsRanlibCommand="${mingw_bin_prefix}ranlib.exe" SettingsRanlibCommand="${mingw_bin_prefix}ranlib.exe"
SettingsDllWrapCommand="${mingw_bin_prefix}dllwrap.exe" SettingsDllWrapCommand="${mingw_bin_prefix}dllwrap.exe"
...@@ -529,6 +533,8 @@ AC_DEFUN([FP_SETTINGS], ...@@ -529,6 +533,8 @@ AC_DEFUN([FP_SETTINGS],
SettingsHaskellCPPCommand="$(basename $HaskellCPPCmd)" SettingsHaskellCPPCommand="$(basename $HaskellCPPCmd)"
SettingsHaskellCPPFlags="$HaskellCPPArgs" SettingsHaskellCPPFlags="$HaskellCPPArgs"
SettingsLdCommand="$(basename $LdCmd)" SettingsLdCommand="$(basename $LdCmd)"
SettingsMergeObjectsCommand="$(basename $MergeObjsCmd)"
SettingsMergeObjectsFlags="$MergeObjsArgs"
SettingsArCommand="$(basename $ArCmd)" SettingsArCommand="$(basename $ArCmd)"
SettingsDllWrapCommand="$(basename $DllWrapCmd)" SettingsDllWrapCommand="$(basename $DllWrapCmd)"
SettingsWindresCommand="$(basename $WindresCmd)" SettingsWindresCommand="$(basename $WindresCmd)"
...@@ -538,6 +544,8 @@ AC_DEFUN([FP_SETTINGS], ...@@ -538,6 +544,8 @@ AC_DEFUN([FP_SETTINGS],
SettingsHaskellCPPCommand="$HaskellCPPCmd" SettingsHaskellCPPCommand="$HaskellCPPCmd"
SettingsHaskellCPPFlags="$HaskellCPPArgs" SettingsHaskellCPPFlags="$HaskellCPPArgs"
SettingsLdCommand="$LdCmd" SettingsLdCommand="$LdCmd"
SettingsMergeObjectsCommand="$MergeObjsCmd"
SettingsMergeObjectsFlags="$MergeObjsArgs"
SettingsArCommand="$ArCmd" SettingsArCommand="$ArCmd"
SettingsRanlibCommand="$RanlibCmd" SettingsRanlibCommand="$RanlibCmd"
if test -z "$DllWrapCmd" if test -z "$DllWrapCmd"
...@@ -592,6 +600,8 @@ AC_DEFUN([FP_SETTINGS], ...@@ -592,6 +600,8 @@ AC_DEFUN([FP_SETTINGS],
AC_SUBST(SettingsCCompilerSupportsNoPie) AC_SUBST(SettingsCCompilerSupportsNoPie)
AC_SUBST(SettingsLdCommand) AC_SUBST(SettingsLdCommand)
AC_SUBST(SettingsLdFlags) AC_SUBST(SettingsLdFlags)
AC_SUBST(SettingsMergeObjectsCommand)
AC_SUBST(SettingsMergeObjectsFlags)
AC_SUBST(SettingsArCommand) AC_SUBST(SettingsArCommand)
AC_SUBST(SettingsRanlibCommand) AC_SUBST(SettingsRanlibCommand)
AC_SUBST(SettingsDllWrapCommand) AC_SUBST(SettingsDllWrapCommand)
...@@ -2589,7 +2599,7 @@ AC_DEFUN([CHECK_FOR_GOLD_T22266],[ ...@@ -2589,7 +2599,7 @@ AC_DEFUN([CHECK_FOR_GOLD_T22266],[
]) ])
$CC -c -o conftest.a.o conftest.a.c || AC_MSG_ERROR([Failed to compile test]) $CC -c -o conftest.a.o conftest.a.c || AC_MSG_ERROR([Failed to compile test])
$SettingsMergeObjectsCommand $SettingsMergeObjectsFlags -T conftest.t conftest.a.o -o conftest.ar.o || AC_MSG_ERROR([Failed to merge test object]) $MergeObjsCmd $MergeObjsArgs -T conftest.t conftest.a.o -o conftest.ar.o || AC_MSG_ERROR([Failed to merge test object])
$CC -c -o conftest.main.o conftest.main.c || AC_MSG_ERROR([Failed to compile test driver]) $CC -c -o conftest.main.o conftest.main.c || AC_MSG_ERROR([Failed to compile test driver])
$CC conftest.ar.o conftest.main.o -o conftest || AC_MSG_ERROR([Failed to link test driver]) $CC conftest.ar.o conftest.main.o -o conftest || AC_MSG_ERROR([Failed to link test driver])
...@@ -2609,33 +2619,30 @@ AC_DEFUN([CHECK_FOR_GOLD_T22266],[ ...@@ -2609,33 +2619,30 @@ AC_DEFUN([CHECK_FOR_GOLD_T22266],[
# ------------------ # ------------------
# Find which linker to use to merge object files. # Find which linker to use to merge object files.
# #
# See Note [Merging object files for GHCi] in GHC.Driver.Pipeline.
AC_DEFUN([FIND_MERGE_OBJECTS],[ AC_DEFUN([FIND_MERGE_OBJECTS],[
AC_REQUIRE([FIND_LD]) AC_REQUIRE([FIND_LD])
if test -z "$SettingsMergeObjectsCommand"; then if test -z "$MergeObjsCmd"; then
SettingsMergeObjectsCommand="$LD" MergeObjsCmd="$LD"
fi fi
if test -z "$SettingsMergeObjectsFlags"; then if test -z "$MergeObjsArgs"; then
SettingsMergeObjectsFlags="-r" MergeObjsArgs="-r"
fi fi
CHECK_FOR_GOLD_T22266($SettingsMergeObjectsCommand) CHECK_FOR_GOLD_T22266($MergeObjsCmd)
if test "$result" = "1"; then if test "$result" = "1"; then
AC_MSG_NOTICE([$SettingsMergeObjectsCommand is broken due to binutils 22266, looking for another linker...]) AC_MSG_NOTICE([$MergeObjsCmd is broken due to binutils 22266, looking for another linker...])
SettingsMergeObjectsCommand="" MergeObjsCmd=""
AC_CHECK_TARGET_TOOL([SettingsMergeObjectsCommand], [ld]) AC_CHECK_TARGET_TOOL([MergeObjsCmd], [ld])
CHECK_FOR_GOLD_T22266($SettingsMergeObjectsCommand) CHECK_FOR_GOLD_T22266($MergeObjsCmd)
if test "$result" = "1"; then if test "$result" = "1"; then
AC_MSG_ERROR([Linker is affected by binutils 22266 but couldn't find another unaffected linker. Please set the SettingsMergeObjectsCommand variable to a functional linker.]) AC_MSG_ERROR([Linker is affected by binutils 22266 but couldn't find another unaffected linker. Please set the MergeObjsCmd variable to a functional linker.])
fi fi
fi fi
if test "$windows" = YES -a "$EnableDistroToolchain" = "NO" -a "$WORD_SIZE" = 64; then AC_SUBST([MergeObjsCmd])
SettingsMergeObjectsFlags="$SettingsMergeObjectsFlags --oformat=pe-bigobj-x86-64" AC_SUBST([MergeObjsArgs])
fi
AC_SUBST(SettingsMergeObjectsCommand)
AC_SUBST(SettingsMergeObjectsFlags)
]) ])
# FIND_PYTHON # FIND_PYTHON
......
...@@ -141,7 +141,7 @@ initSettings top_dir = do ...@@ -141,7 +141,7 @@ initSettings top_dir = do
as_args = map Option cc_args as_args = map Option cc_args
ld_prog = cc_prog ld_prog = cc_prog
ld_args = map Option (cc_args ++ words cc_link_args_str) ld_args = map Option (cc_args ++ words cc_link_args_str)
ld_r_prog <- getSetting "Merge objects command" ld_r_prog <- getToolSetting "Merge objects command"
ld_r_args <- getSetting "Merge objects flags" ld_r_args <- getSetting "Merge objects flags"
llvmTarget <- getSetting "LLVM target" llvmTarget <- getSetting "LLVM target"
......
...@@ -429,6 +429,8 @@ then ...@@ -429,6 +429,8 @@ then
NM="${mingwbin}nm.exe" NM="${mingwbin}nm.exe"
RANLIB="${mingwbin}ranlib.exe" RANLIB="${mingwbin}ranlib.exe"
OBJDUMP="${mingwbin}objdump.exe" OBJDUMP="${mingwbin}objdump.exe"
MergeObjsCmd="$LD"
MergeObjsArgs="-r --oformat=pe-bigobj-x86-64"
fp_prog_ar="${mingwbin}ar.exe" fp_prog_ar="${mingwbin}ar.exe"
AC_PATH_PROG([Genlib],[genlib]) AC_PATH_PROG([Genlib],[genlib])
......
...@@ -14,6 +14,7 @@ hs-cpp = @HaskellCPPCmd@ ...@@ -14,6 +14,7 @@ hs-cpp = @HaskellCPPCmd@
ld = @LdCmd@ ld = @LdCmd@
make = @MakeCmd@ make = @MakeCmd@
nm = @NmCmd@ nm = @NmCmd@
merge-objects = @MergeObjsCmd@
objdump = @ObjdumpCmd@ objdump = @ObjdumpCmd@
ranlib = @REAL_RANLIB_CMD@ ranlib = @REAL_RANLIB_CMD@
sphinx-build = @SPHINXBUILD@ sphinx-build = @SPHINXBUILD@
...@@ -114,10 +115,10 @@ conf-ld-linker-args-stage1 = @CONF_LD_LINKER_OPTS_STAGE1@ ...@@ -114,10 +115,10 @@ conf-ld-linker-args-stage1 = @CONF_LD_LINKER_OPTS_STAGE1@
conf-ld-linker-args-stage2 = @CONF_LD_LINKER_OPTS_STAGE2@ conf-ld-linker-args-stage2 = @CONF_LD_LINKER_OPTS_STAGE2@
conf-ld-linker-args-stage3 = @CONF_LD_LINKER_OPTS_STAGE3@ conf-ld-linker-args-stage3 = @CONF_LD_LINKER_OPTS_STAGE3@
conf-merge-objects-args-stage0 = @SettingsMergeObjectsFlags@ conf-merge-objects-args-stage0 = @MergeObjsArgs@
conf-merge-objects-args-stage1 = @SettingsMergeObjectsFlags@ conf-merge-objects-args-stage1 = @MergeObjsArgs@
conf-merge-objects-args-stage2 = @SettingsMergeObjectsFlags@ conf-merge-objects-args-stage2 = @MergeObjsArgs@
conf-merge-objects-args-stage3 = @SettingsMergeObjectsFlags@ conf-merge-objects-args-stage3 = @MergeObjsArgs@
# Settings: # Settings:
......
...@@ -313,7 +313,7 @@ systemBuilderPath builder = case builder of ...@@ -313,7 +313,7 @@ systemBuilderPath builder = case builder of
Happy -> fromKey "happy" Happy -> fromKey "happy"
HsCpp -> fromKey "hs-cpp" HsCpp -> fromKey "hs-cpp"
Ld _ -> fromKey "ld" Ld _ -> fromKey "ld"
MergeObjects _ -> fromKey "settings-merge-objects-command" MergeObjects _ -> fromKey "merge-objects"
Make _ -> fromKey "make" Make _ -> fromKey "make"
Makeinfo -> fromKey "makeinfo" Makeinfo -> fromKey "makeinfo"
Nm -> fromKey "nm" Nm -> fromKey "nm"
......
...@@ -556,6 +556,16 @@ LD_STAGE1 = $(LD) ...@@ -556,6 +556,16 @@ LD_STAGE1 = $(LD)
LD_STAGE2 = $(LD) LD_STAGE2 = $(LD)
LD_STAGE3 = $(LD) LD_STAGE3 = $(LD)
MERGE_OBJS_STAGE0 = @MergeObjsCmd@
MERGE_OBJS_STAGE1 = @MergeObjsCmd@
MERGE_OBJS_STAGE2 = @MergeObjsCmd@
MERGE_OBJS_STAGE3 = @MergeObjsCmd@
MERGE_OBJS_STAGE0_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE1_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE2_FLAGS = @MergeObjsArgs@
MERGE_OBJS_STAGE3_FLAGS = @MergeObjsArgs@
# Cross-compiling options # Cross-compiling options
# See Note [CrossCompiling vs Stage1Only] # See Note [CrossCompiling vs Stage1Only]
CrossCompiling = @CrossCompiling@ CrossCompiling = @CrossCompiling@
......
...@@ -107,6 +107,7 @@ endif ...@@ -107,6 +107,7 @@ endif
endif endif
# Build the GHCi library # Build the GHCi library
# See Note [Merging object files for GHCi] in GHC.Driver.Pipeline.
ifneq "$(filter $3, v p)" "" ifneq "$(filter $3, v p)" ""
$1_$2_$3_GHCI_LIB = $1/$2/build/HS$$($1_$2_COMPONENT_ID).$$($3_osuf) $1_$2_$3_GHCI_LIB = $1/$2/build/HS$$($1_$2_COMPONENT_ID).$$($3_osuf)
ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES" ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES"
...@@ -116,7 +117,7 @@ BINDIST_LIBS += $$($1_$2_$3_GHCI_LIB) ...@@ -116,7 +117,7 @@ BINDIST_LIBS += $$($1_$2_$3_GHCI_LIB)
endif endif
endif endif
$$($1_$2_$3_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS) $$($1_$2_LD_SCRIPT) $$($1_$2_$3_GHCI_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS) $$($1_$2_LD_SCRIPT)
$$(call cmd,SettingsMergeObjectsCommand) $(SettingsMergeObjectsFlags) $$(if $$($1_$2_LD_SCRIPT),$$($1_$2_LD_SCRIPT_CMD) $$($1_$2_LD_SCRIPT)) -o $$@ $$(EXTRA_LD_LINKER_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS) $$(call cmd,MERGE_OBJS_STAGE$4) $(MERGE_OBJS_STAGE$4_FLAGS) $$(if $$($1_$2_LD_SCRIPT),$$($1_$2_LD_SCRIPT_CMD) $$($1_$2_LD_SCRIPT)) -o $$@ $$(EXTRA_LD_LINKER_OPTS) $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES" ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES"
# Don't bother making ghci libs for bootstrapping packages # Don't bother making ghci libs for bootstrapping packages
ifneq "$4" "0" ifneq "$4" "0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment