Hake: adding handling of generated source and include files to Hake.
authorReto Achermann <reto.achermann@inf.ethz.ch>
Mon, 8 Dec 2014 17:58:27 +0000 (18:58 +0100)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Mon, 8 Dec 2014 17:58:27 +0000 (18:58 +0100)
hake/Args.hs
hake/RuleDefs.hs

index 0882a56..90d9389 100644 (file)
@@ -34,6 +34,7 @@ data Args = Args {
       omitCFlags :: [String],
       omitCxxFlags :: [String],
       addIncludes :: [String],
+      addGeneratedIncludes :: [String],
       omitIncludes :: [String],
       addLinkFlags :: [String],
       addLibraries :: [String],
@@ -61,6 +62,7 @@ defaultArgs = Args {
       omitCFlags = [],
       omitCxxFlags = [],
       addIncludes = [],
+      addGeneratedIncludes = [],
       omitIncludes = [],
       addLinkFlags = [],
       addLibraries = [],
index 82185ef..39a33df 100644 (file)
@@ -457,6 +457,15 @@ compileGeneratedCFile opts src =
               makeDependObj o2 arch src
             ]
 
+compileGeneratedCxxFile :: Options -> String -> HRule
+compileGeneratedCxxFile opts src =
+    let o2 = opts { optSuffix = "" }
+        arch = optArch o2
+    in
+      Rules [ Rule (cxxCompiler o2 arch src (objectFilePath o2 src) ),
+              makeDependCxxObj o2 arch src
+            ]
+
 compileCFiles :: Options -> [String] -> HRule
 compileCFiles opts srcs = Rules [ compileCFile opts s | s <- srcs ]
 compileCxxFiles :: Options -> [String] -> HRule
@@ -464,6 +473,9 @@ compileCxxFiles opts srcs = Rules [ compileCxxFile opts s | s <- srcs ]
 compileGeneratedCFiles :: Options -> [String] -> HRule
 compileGeneratedCFiles opts srcs =
     Rules [ compileGeneratedCFile opts s | s <- srcs ]
+compileGeneratedCxxFiles :: Options -> [String] -> HRule
+compileGeneratedCxxFiles opts srcs =
+    Rules [ compileGeneratedCxxFile opts s | s <- srcs ]
 
 --
 -- Add a set of C (or whatever) dependences on a *generated* file.
@@ -882,6 +894,8 @@ allObjectPaths opts args =
                 ++
                 [ flounderTHCStubPath opts f
                       | f <- (Args.flounderTHCStubs args)]
+                ++
+                (Args.generatedCFiles args) ++ (Args.generatedCxxFiles args)
     ]
 
 allLibraryPaths :: Args.Args -> [String]
@@ -911,7 +925,9 @@ applicationBuildFn af tf args =
 
 appGetOptionsForArch arch args =
     (options arch) { extraIncludes =
-                         [ NoDep SrcTree "src" a | a <- Args.addIncludes args],
+                         [ NoDep SrcTree "src" a | a <- Args.addIncludes args]
+                         ++                         
+                         [ NoDep BuildTree arch a | a <- Args.addGeneratedIncludes args],
                      optIncludes = (optIncludes $ options arch) \\
                          [ NoDep SrcTree "src" i | i <- Args.omitIncludes args ],
                      optFlags = (optFlags $ options arch) \\
@@ -930,6 +946,8 @@ appBuildArch af tf args arch =
         opts = appGetOptionsForArch arch args
         csrcs = Args.cFiles args
         cxxsrcs = Args.cxxFiles args
+        gencsrc = Args.generatedCFiles args
+        gencxxsrc = Args.generatedCxxFiles args
         appname = Args.target args
         -- XXX: Not sure if this is correct. Currently assuming that if the app
         -- contains C++ files, we have to use the C++ linker.
@@ -941,6 +959,8 @@ appBuildArch af tf args arch =
               ++
               [ compileCFiles opts csrcs,
                 compileCxxFiles opts cxxsrcs,
+                compileGeneratedCFiles opts gencsrc,
+                compileGeneratedCxxFiles opts gencxxsrc,
                 assembleSFiles opts (Args.assemblyFiles args),
                 mylink opts (allObjectPaths opts args) (allLibraryPaths args) appname
               ]
@@ -984,6 +1004,8 @@ arrakisAppBuildArch af tf args arch =
         opts = arrakisAppGetOptionsForArch arch args
         csrcs = Args.cFiles args
         cxxsrcs = Args.cxxFiles args
+        gencsrc = Args.generatedCFiles args
+        gencxxsrc = Args.generatedCxxFiles args
         appname = Args.target args
         -- XXX: Not sure if this is correct. Currently assuming that if the app
         -- contains C++ files, we have to use the C++ linker.
@@ -995,6 +1017,8 @@ arrakisAppBuildArch af tf args arch =
               ++
               [ compileCFiles opts csrcs,
                 compileCxxFiles opts cxxsrcs,
+                compileGeneratedCFiles opts gencsrc,
+                compileGeneratedCxxFiles opts gencxxsrc,
                 assembleSFiles opts (Args.assemblyFiles args),
                 mylink opts (allObjectPaths opts args) (allLibraryPaths args) appname
               ]
@@ -1032,6 +1056,8 @@ libBuildArch af tf args arch =
         opts = libGetOptionsForArch arch args
         csrcs = Args.cFiles args
         cxxsrcs = Args.cxxFiles args
+        gencsrc = Args.generatedCFiles args
+        gencxxsrc = Args.generatedCxxFiles args
     in
       Rules ( flounderRules opts args csrcs
               ++
@@ -1039,6 +1065,8 @@ libBuildArch af tf args arch =
               ++
               [ compileCFiles opts csrcs,
                 compileCxxFiles opts cxxsrcs,
+                compileGeneratedCFiles opts gencsrc,
+                compileGeneratedCxxFiles opts gencxxsrc,
                 assembleSFiles opts (Args.assemblyFiles args),
                 staticLibrary opts (Args.target args) (allObjectPaths opts args) (allLibraryPaths args)
               ]