diff options
| -rw-r--r-- | hadrian/src/Rules/Gmp.hs | 14 | ||||
| -rw-r--r-- | hadrian/src/Rules/Library.hs | 7 |
2 files changed, 15 insertions, 6 deletions
diff --git a/hadrian/src/Rules/Gmp.hs b/hadrian/src/Rules/Gmp.hs index 32265fe401..0194518d05 100644 --- a/hadrian/src/Rules/Gmp.hs +++ b/hadrian/src/Rules/Gmp.hs @@ -1,5 +1,5 @@ module Rules.Gmp ( - gmpRules, gmpBuildPath, gmpObjectsDir, gmpLibraryH + gmpRules, gmpBuildPath, gmpObjects, gmpLibraryH ) where import Base @@ -9,6 +9,18 @@ import Packages import Target import Utilities +-- | Build GMP library objects and return their paths. +gmpObjects :: Action [FilePath] +gmpObjects = do + gmpPath <- gmpBuildPath + need [gmpPath -/- gmpLibraryH] + -- We need to use the untracked version of 'getDirectoryFiles', because the + -- contents of 'gmpObjectsDir' is built by Hadrian (in 'gmpRules'). Using + -- the tracked version can lead to Shake Lint failure. + -- See: https://ghc.haskell.org/trac/ghc/ticket/15971. + map unifyPath <$> + liftIO (getDirectoryFilesIO "" [gmpPath -/- gmpObjectsDir -/- "*.o"]) + gmpBase :: FilePath gmpBase = pkgPath integerGmp -/- "gmp" diff --git a/hadrian/src/Rules/Library.hs b/hadrian/src/Rules/Library.hs index 122004084a..8bd7067202 100644 --- a/hadrian/src/Rules/Library.hs +++ b/hadrian/src/Rules/Library.hs @@ -103,11 +103,8 @@ cObjects context = do -- 'Context' is @integer-gmp@. extraObjects :: Context -> Action [FilePath] extraObjects context - | package context == integerGmp = do - gmpPath <- gmpBuildPath - need [gmpPath -/- gmpLibraryH] - map unifyPath <$> getDirectoryFiles "" [gmpPath -/- gmpObjectsDir -/- "*.o"] - | otherwise = return [] + | package context == integerGmp = gmpObjects + | otherwise = return [] -- | Return all the object files to be put into the library we're building for -- the given 'Context'. |
