Hadrian: Take care of assembler source files
authorStefan Schulze Frielinghaus <stefansf@linux.ibm.com>
Tue, 8 Oct 2019 08:23:21 +0000 (10:23 +0200)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Sat, 12 Oct 2019 02:10:51 +0000 (22:10 -0400)
Fixes #17286.

hadrian/src/Rules/Compile.hs
hadrian/src/Rules/Library.hs
hadrian/src/Rules/Program.hs

index 92a94fe..546ce08 100644 (file)
@@ -41,6 +41,9 @@ compilePackage rs = do
       [ root -/- "**/build/s/**/*." ++ wayPat ++ "o"
         | wayPat <- wayPats] |%> compileNonHsObject rs Asm
 
+      [ root -/- "**/build/S/**/*." ++ wayPat ++ "o"
+        | wayPat <- wayPats] |%> compileNonHsObject rs Asm
+
       -- All else is haskell.
       -- This comes last as it overlaps with the above rules' file patterns.
       forM_ ((,) <$> hsExts <*> wayPats) $ \ ((oExt, hiExt), wayPat) ->
index 0daf468..320f45a 100644 (file)
@@ -112,11 +112,13 @@ allObjects context = (++) <$> nonHsObjects context <*> hsObjects context
 -- (object files built from C, C-- and sometimes other things).
 nonHsObjects :: Context -> Action [FilePath]
 nonHsObjects context = do
+    asmSrcs <- interpretInContext context (getContextData asmSrcs)
+    asmObjs <- mapM (objectPath context) asmSrcs
     cObjs   <- cObjects context
     cmmSrcs <- interpretInContext context (getContextData cmmSrcs)
     cmmObjs <- mapM (objectPath context) cmmSrcs
     eObjs   <- extraObjects context
-    return $ cObjs ++ cmmObjs ++ eObjs
+    return $ asmObjs ++ cObjs ++ cmmObjs ++ eObjs
 
 -- | Return all the C object files needed to build the given library context.
 cObjects :: Context -> Action [FilePath]
index 6273f3d..df542c0 100644 (file)
@@ -114,10 +114,12 @@ buildBinary rs bin context@Context {..} = do
     when (stage > Stage0) $ do
         ways <- interpretInContext context (getLibraryWays <> getRtsWays)
         needLibrary [ (rtsContext stage) { way = w } | w <- ways ]
-    cSrcs  <- interpretInContext context (getContextData cSrcs)
-    cObjs  <- mapM (objectPath context) cSrcs
-    hsObjs <- hsObjects context
-    let binDeps = cObjs ++ hsObjs
+    asmSrcs <- interpretInContext context (getContextData asmSrcs)
+    asmObjs <- mapM (objectPath context) asmSrcs
+    cSrcs   <- interpretInContext context (getContextData cSrcs)
+    cObjs   <- mapM (objectPath context) cSrcs
+    hsObjs  <- hsObjects context
+    let binDeps = asmObjs ++ cObjs ++ hsObjs
     need binDeps
     buildWithResources rs $ target context (Ghc LinkHs stage) binDeps [bin]
     synopsis <- pkgSynopsis package