@@ -18,6 +18,8 @@ module Distribution.Simple.Program.Ld
18
18
import Distribution.Compat.Prelude
19
19
import Prelude ()
20
20
21
+ import qualified Data.Map as Map
22
+
21
23
import Distribution.Simple.Compiler (arResponseFilesSupported )
22
24
import Distribution.Simple.Flag
23
25
( fromFlagOrDefault
@@ -67,10 +69,14 @@ combineObjectFiles verbosity lbi ld target files = do
67
69
-- have a slight problem. What we have to do is link files in batches into
68
70
-- a temp object file and then include that one in the next batch.
69
71
70
- let simpleArgs = [" -r" , " -o" , target]
72
+ putStrLn " \n\n\n "
73
+ print ld
74
+ putStrLn " \n\n\n "
75
+
76
+ let simpleArgs = prependRelocatableFlag [" -o" , target]
71
77
72
- initialArgs = [ " -r " , " -o" , target]
73
- middleArgs = [ " -r " , " -o" , target, tmpfile]
78
+ initialArgs = prependRelocatableFlag [ " -o" , target]
79
+ middleArgs = prependRelocatableFlag [ " -o" , target, tmpfile]
74
80
finalArgs = middleArgs
75
81
76
82
simple = programInvocation ld simpleArgs
@@ -104,3 +110,10 @@ combineObjectFiles verbosity lbi ld target files = do
104
110
runProgramInvocation verbosity inv
105
111
renameFile target tmpfile
106
112
run invs
113
+
114
+ -- Prepend "-r" to the list if the linker supports relocatable outputs.
115
+ prependRelocatableFlag :: [String ] -> [String ]
116
+ prependRelocatableFlag xs =
117
+ case Map. lookup " Supports relocatable output" $ programProperties ld of
118
+ Just " YES" -> " -r" : xs
119
+ _other -> xs
0 commit comments