Merge branch 'skate'
authorReto Achermann <reto.achermann@inf.ethz.ch>
Tue, 13 Jun 2017 06:54:10 +0000 (08:54 +0200)
committerReto Achermann <reto.achermann@inf.ethz.ch>
Tue, 13 Jun 2017 06:54:18 +0000 (08:54 +0200)
This brings the Skate DSL to specify SKB facts and their relations.
Skate repalces Sockeye.
See technote 020.

Signed-off-by: Reto Achermann <reto.achermann@inf.ethz.ch>

1  2 
hake/Args.hs
hake/RuleDefs.hs

diff --combined hake/Args.hs
@@@ -40,10 -40,10 +40,11 @@@ data Args = Args 
        omitIncludes :: [String],
        addLinkFlags :: [String],
        addLibraries :: [String],
 +      addModules :: [String],
        addGeneratedDependencies :: [String],
        architectures :: [String],
-       sockeyeSchema :: [String],
+       skateSchemaDefs :: [String],  -- just the Skate Schema headers
+       skateSchemas :: [String],      -- Schema headers and functions
        installDirs :: InstallDirs
  }
  
@@@ -77,10 -77,10 +78,11 @@@ defaultArgs = Args 
        omitIncludes = [],
        addLinkFlags = [],
        addLibraries = [],
 +      addModules = [],
        addGeneratedDependencies = [],
        architectures = allArchitectures,
-       sockeyeSchema = [],
+       skateSchemaDefs = [],
+       skateSchemas = [],
        installDirs = InstallDirs {
              bindir = "/sbin",
              libdir = "/lib"
@@@ -123,8 -123,8 +125,9 @@@ showArgs prefix a 
      ++ "\n  omitIncludes:          " ++ (show $ omitIncludes a)
      ++ "\n  addLinkFlags:          " ++ (show $ addLinkFlags a)
      ++ "\n  addLibraries:          " ++ (show $ addLibraries a)
 +    ++ "\n  addModules:            " ++ (show $ addModules a)
      ++ "\n  addDeps:               " ++ (show $ addGeneratedDependencies a)
      ++ "\n  architectures:         " ++ (show $ architectures a)
-     ++ "\n  sockeyeSchema:         " ++ (show $ sockeyeSchema a)
+     ++ "\n  skateSchemaDefs:       " ++ (show $ skateSchemaDefs a)
+     ++ "\n  skateSchemas:          " ++ (show $ skateSchemas a)
      ++ "\n"
diff --combined hake/RuleDefs.hs
@@@ -263,13 -263,13 +263,13 @@@ archive opts objs libs name libnam
      | optArch opts == "armv8" = ARMv8.archive opts objs libs name libname
      | otherwise = [ ErrorMsg ("Can't build a library for " ++ (optArch opts)) ]
  
 -linker :: Options -> [String] -> [String] -> String -> [RuleToken]
 -linker opts objs libs bin
 -    | optArch opts == "x86_64" = X86_64.linker opts objs libs bin
 -    | optArch opts == "k1om" = K1om.linker opts objs libs bin
 -    | optArch opts == "x86_32" = X86_32.linker opts objs libs bin
 -    | optArch opts == "armv7" = ARMv7.linker opts objs libs bin
 -    | optArch opts == "armv8" = ARMv8.linker opts objs libs bin
 +linker :: Options -> [String] -> [String] -> [String] -> String -> [RuleToken]
 +linker opts objs libs mods bin
 +    | optArch opts == "x86_64" = X86_64.linker opts objs libs mods bin
 +    | optArch opts == "k1om" = K1om.linker opts objs libs mods bin
 +    | optArch opts == "x86_32" = X86_32.linker opts objs libs mods bin
 +    | optArch opts == "armv7" = ARMv7.linker opts objs libs mods bin
 +    | optArch opts == "armv8" = ARMv8.linker opts objs libs mods bin
      | otherwise = [ ErrorMsg ("Can't link executables for " ++ (optArch opts)) ]
  
  strip :: Options -> String -> String -> String -> [RuleToken]
@@@ -290,10 -290,10 +290,10 @@@ debug opts src targe
      | optArch opts == "armv8" = ARMv8.debug opts src target
      | otherwise = [ ErrorMsg ("Can't extract debug symbols for " ++ (optArch opts)) ]
  
 -cxxlinker :: Options -> [String] -> [String] -> String -> [RuleToken]
 -cxxlinker opts objs libs bin
 -    | optArch opts == "x86_64" = X86_64.cxxlinker opts objs libs bin
 -    | optArch opts == "k1om" = K1om.cxxlinker opts objs libs bin
 +cxxlinker :: Options -> [String] -> [String] -> [String] -> String -> [RuleToken]
 +cxxlinker opts objs libs mods bin
 +    | optArch opts == "x86_64" = X86_64.cxxlinker opts objs libs mods bin
 +    | optArch opts == "k1om" = K1om.cxxlinker opts objs libs mods bin
      | otherwise = [ ErrorMsg ("Can't link C++ executables for " ++ (optArch opts)) ]
  
  --
@@@ -407,9 -407,9 +407,9 @@@ archiveLibrary opts name objs libs 
  --
  -- Link an executable
  --
 -linkExecutable :: Options -> [String] -> [String] -> String -> [RuleToken]
 -linkExecutable opts objs libs bin =
 -    linker opts objs libs (applicationPath opts bin)
 +linkExecutable :: Options -> [String] -> [String] -> [String] -> String -> [RuleToken]
 +linkExecutable opts objs libs mods bin =
 +    linker opts objs libs mods (applicationPath opts bin)
  
  --
  -- Strip debug symbols from an executable
@@@ -429,9 -429,9 +429,9 @@@ debugExecutable opts src target 
  --
  -- Link a C++ executable
  --
 -linkCxxExecutable :: Options -> [String] -> [String] -> String -> [RuleToken]
 -linkCxxExecutable opts objs libs bin =
 -    cxxlinker opts objs libs (applicationPath opts bin)
 +linkCxxExecutable :: Options -> [String] -> [String] -> [String] -> String -> [RuleToken]
 +linkCxxExecutable opts objs libs mods bin =
 +    cxxlinker opts objs libs mods (applicationPath opts bin)
  
  -------------------------------------------------------------------------
  
@@@ -722,36 -722,64 +722,64 @@@ flounderRules opts args csrcs 
        allIf = nub $ Args.flounderDefs args ++ [f | (f,_) <- Args.flounderExtraDefs args]
  
  
- --
- -- Build a Sockeye library
- --
+  --
+  -- Build a Skate library and header file
+  --
  
- sockeyeSchemaCPath :: Options -> String -> String
- sockeyeSchemaCPath opts schema =
-     ((optSuffix opts)) </> (schema ++ ".c")
  
- sockeyeCompileFile :: String -> String -> String -> String -> HRule
- sockeyeCompileFile arch opt in_file out_file =
-     Rule [
-         In InstallTree "tools" "/bin/sockeye",
-         Str opt,
-         In SrcTree "src" (in_file ++ ".sockeye"),
-         Out arch out_file
-     ]
+ skateSchemaPath opts ifn = (optSuffix opts) </> (ifn ++ "_skate_schema.c")
+ skateProgLoc = In InstallTree "tools" "/bin/skate"
+ skateSksFileLoc schema = In SrcTree "src" ("/schemas" </> (schema ++ ".sks"))
+ skateSchemaDefsPath schema = "/include/schemas" </> (schema ++ "_schema.h")
+ skateSchemaHelper :: Options -> String -> String -> [String] -> HRule
+ skateSchemaHelper opts ifn cfile srcs = Rules $
+     [ skateRule opts $ args ++ [
+         Str "-o", Out arch cfile, skateSksFileLoc ifn],
+         compileGeneratedCFile opts cfile,
+         skateDefsDepend opts ifn srcs]
+     ++ [extraGeneratedCDependency opts (skateSchemaDefsPath ifn) cfile]
+     where
+         arch = optArch opts
+         archfam = optArchFamily opts
+         args = [Str "-a", Str archfam, Str "-C"]
+ skateSchema :: Options -> String -> [String] -> HRule
+ skateSchema opts schema =
+     skateSchemaHelper opts schema (skateSchemaPath opts schema)
+ skateDefsDepend :: Options -> String -> [String] -> HRule
+ skateDefsDepend opts schema srcs = Rules $
+     [(extraCDependencies opts (skateSchemaDefsPath schema) srcs)]
+ skateRules :: Options -> Args.Args -> [String] -> [HRule]
+ skateRules opts args csrcs =
+     ([ skateSchema opts f csrcs | f <- Args.skateSchemas args ]
+      ++
+      [ skateDefsDepend opts f csrcs | f <- nub $ Args.skateSchemaDefs args ])
+ skateIncludes :: Options -> [RuleToken]
+ skateIncludes opts = []
+ skateRule :: Options -> [RuleToken] -> HRule
+ skateRule opts args = Rule $ [ skateProgLoc ] ++ (skateIncludes opts) ++ args
+ skateGenSchemas :: Options -> String -> HRule
+ skateGenSchemas opts schema =
+  Rules $ [skateRule opts [
+         Str "-H",
+         Str "-o", Out (optArch opts) (skateSchemaDefsPath schema),
+         skateSksFileLoc schema
+       ]]
  
  
- sockeyeCompileSchema :: Options -> Args.Args -> String -> HRule
- sockeyeCompileSchema opts args file =
-     let arch = optArch opts
-         cfile = sockeyeSchemaCPath opts file
-         hfile = "/include/schema" </> file ++ ".h"
-         opts' = opts { extraDependencies = [ Dep BuildTree arch hfile ] }
-     in
-         Rules [
-             sockeyeCompileFile arch "-H" file hfile,
-             sockeyeCompileFile arch "-C" file cfile,
-             compileGeneratedCFile opts' cfile
-          ]
  
  --
  -- Build a Fugu library
@@@ -821,12 -849,12 +849,12 @@@ hamletFile opts file 
  --
  -- Link a set of object files and libraries together
  --
 -link :: Options -> [String] -> [ String ] -> String -> HRule
 -link opts objs libs bin =
 +link :: Options -> [String] -> [String] -> [String] -> String -> HRule
 +link opts objs libs mods bin =
      let full = bin ++ ".full"
          debug = bin ++ ".debug"
      in Rules [
 -        Rule $ linkExecutable opts objs libs full,
 +        Rule $ linkExecutable opts objs libs mods full,
          Rule $ debugExecutable opts full debug,
          Rule $ stripExecutable opts full debug bin
      ]
  --
  -- Link a set of C++ object files and libraries together
  --
 -linkCxx :: Options -> [String] -> [ String ] -> String -> HRule
 -linkCxx opts objs libs bin =
 -    Rule (linkCxxExecutable opts objs libs bin)
 +linkCxx :: Options -> [String] -> [String] -> [String] -> String -> HRule
 +linkCxx opts objs libs mods bin =
 +    Rule (linkCxxExecutable opts objs libs mods bin)
  
  --
  -- Link a CPU driver.  This is where it gets distinctly architecture-specific.
@@@ -1015,8 -1043,8 +1043,8 @@@ allObjectPaths opts args 
                  [ flounderTHCStubPath opts f
                        | f <- (Args.flounderTHCStubs args)]
                  ++
-                 [ sockeyeSchemaCPath opts f
-                       | f <- (Args.sockeyeSchema args)]
+                 [ skateSchemaPath opts f
+                       | f <- (Args.skateSchemas args)]
                  ++
                  (Args.generatedCFiles args) ++ (Args.generatedCxxFiles args)
      ]
@@@ -1026,10 -1054,6 +1054,10 @@@ allLibraryPaths opts args 
      [ libraryPath opts l | l <- Args.addLibraries args ]
  
  
 +allModulesPaths :: Options -> Args.Args -> [String]
 +allModulesPaths opts args =
 +    [ libraryPath opts l | l <- Args.addModules args ]
 +
  ---------------------------------------------------------------------
  --
  -- Very large-scale macros
@@@ -1098,6 -1122,8 +1126,8 @@@ appBuildArch tdb tf args arch 
      in
        Rules ( flounderRules opts args csrcs
                ++
+               skateRules opts args csrcs
+               ++
                [ mackerelDependencies opts m csrcs | m <- Args.mackerelDevices args ]
                ++
                [ compileCFiles opts csrcs,
                  compileGeneratedCFiles opts gencsrc,
                  compileGeneratedCxxFiles opts gencxxsrc,
                  assembleSFiles opts (Args.assemblyFiles args),
 -                mylink opts (allObjectPaths opts args) (allLibraryPaths opts args)
 +                mylink opts (allObjectPaths opts args) (allLibraryPaths opts args) (allModulesPaths opts args)
                         appname,
                  fullTarget opts arch appname
                ]
@@@ -1159,6 -1185,8 +1189,8 @@@ arrakisAppBuildArch tdb tf args arch 
      in
        Rules ( flounderRules opts args csrcs
                ++
+               skateRules opts args csrcs
+               ++
                [ mackerelDependencies opts m csrcs | m <- Args.mackerelDevices args ]
                ++
                [ compileCFiles opts csrcs,
                  compileGeneratedCFiles opts gencsrc,
                  compileGeneratedCxxFiles opts gencxxsrc,
                  assembleSFiles opts (Args.assemblyFiles args),
 -                mylink opts (allObjectPaths opts args) (allLibraryPaths opts args) appname
 +                mylink opts (allObjectPaths opts args) (allLibraryPaths opts args) (allModulesPaths opts args) appname
                ]
              )
  
@@@ -1208,7 -1236,7 +1240,7 @@@ libBuildArch tdb tf args arch 
      in
        Rules ( flounderRules opts args csrcs
                ++
-               [ sockeyeCompileSchema opts args schema | schema <- Args.sockeyeSchema args ]
+               skateRules opts args csrcs
                ++
                [ mackerelDependencies opts m csrcs | m <- Args.mackerelDevices args ]
                ++