Fix gcc.exe: error: CreateProcess: No such file or directory
authorMoritz Angermann <moritz.angermann@gmail.com>
Wed, 20 Jun 2018 03:27:53 +0000 (23:27 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 20 Jun 2018 15:17:26 +0000 (11:17 -0400)
commit227ede4aa0b6df1a2b5a95dbba9f3cabc88bc15e
tree67cb0eddac2aed3ac22c9fe72e95e9774225f86f
parent76e110fb3219f4e4b3d3fdef42f0027cbd13d49c
Fix gcc.exe: error: CreateProcess: No such file or directory

When GHC links binaries on windows, we pass a -L and -l flag
to gcc for each dependency in the transitive dependency
closure.  As this will usually overflow the command argument
limit on windows, we use response files to pass all arguments
to gcc.  gcc however internally passes only the -l flags via
a response file to the collect2 command, but puts the -L flags
on the command line. As such if we pass enough -L flags to
gcc--even via a response file--we will eventually overflow the
command line argument length limit due to gcc passing them
to collect2 without resorting to a response file.

To prevent this from happening we move all lirbaries into a
shared temporary folder, and only need to pass a single -L
flag to gcc.  Ideally however this was fixed in gcc.

Reviewers: bgamari, Phyx

Reviewed By: bgamari

Subscribers: erikd, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4762
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
compiler/main/FileCleanup.hs
compiler/main/Packages.hs