Merge "Append whole_static_libs deps from .a files instead of the list of objects." am: 5b79950e99
Change-Id: I41244296f1a790aac195cf614e5687b767519d5d
This commit is contained in:
@@ -99,6 +99,15 @@ var (
|
|||||||
},
|
},
|
||||||
"arCmd", "arFlags")
|
"arCmd", "arFlags")
|
||||||
|
|
||||||
|
arWithLibs = pctx.AndroidStaticRule("arWithLibs",
|
||||||
|
blueprint.RuleParams{
|
||||||
|
Command: "rm -f ${out} && $arCmd $arObjFlags $out @${out}.rsp && $arCmd $arLibFlags $out $arLibs",
|
||||||
|
CommandDeps: []string{"$arCmd"},
|
||||||
|
Rspfile: "${out}.rsp",
|
||||||
|
RspfileContent: "${arObjs}",
|
||||||
|
},
|
||||||
|
"arCmd", "arObjFlags", "arObjs", "arLibFlags", "arLibs")
|
||||||
|
|
||||||
darwinStrip = pctx.AndroidStaticRule("darwinStrip",
|
darwinStrip = pctx.AndroidStaticRule("darwinStrip",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: "${config.MacStripPath} -u -r -o $out $in",
|
Command: "${config.MacStripPath} -u -r -o $out $in",
|
||||||
@@ -609,26 +618,45 @@ func TransformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate a rule for compiling multiple .o files to a static library (.a)
|
// Generate a rule for compiling multiple .o files to a static library (.a)
|
||||||
func TransformObjToStaticLib(ctx android.ModuleContext, objFiles android.Paths,
|
func TransformObjToStaticLib(ctx android.ModuleContext,
|
||||||
|
objFiles android.Paths, wholeStaticLibs android.Paths,
|
||||||
flags builderFlags, outputFile android.ModuleOutPath, deps android.Paths) {
|
flags builderFlags, outputFile android.ModuleOutPath, deps android.Paths) {
|
||||||
|
|
||||||
arCmd := "${config.ClangBin}/llvm-ar"
|
arCmd := "${config.ClangBin}/llvm-ar"
|
||||||
arFlags := "crsPD"
|
arFlags := ""
|
||||||
if !ctx.Darwin() {
|
if !ctx.Darwin() {
|
||||||
arFlags += " -format=gnu"
|
arFlags += " -format=gnu"
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Build(pctx, android.BuildParams{
|
if len(wholeStaticLibs) == 0 {
|
||||||
Rule: ar,
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Description: "static link " + outputFile.Base(),
|
Rule: ar,
|
||||||
Output: outputFile,
|
Description: "static link " + outputFile.Base(),
|
||||||
Inputs: objFiles,
|
Output: outputFile,
|
||||||
Implicits: deps,
|
Inputs: objFiles,
|
||||||
Args: map[string]string{
|
Implicits: deps,
|
||||||
"arFlags": arFlags,
|
Args: map[string]string{
|
||||||
"arCmd": arCmd,
|
"arFlags": "crsPD" + arFlags,
|
||||||
},
|
"arCmd": arCmd,
|
||||||
})
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ctx.Build(pctx, android.BuildParams{
|
||||||
|
Rule: arWithLibs,
|
||||||
|
Description: "static link " + outputFile.Base(),
|
||||||
|
Output: outputFile,
|
||||||
|
Inputs: append(objFiles, wholeStaticLibs...),
|
||||||
|
Implicits: deps,
|
||||||
|
Args: map[string]string{
|
||||||
|
"arCmd": arCmd,
|
||||||
|
"arObjFlags": "crsPD" + arFlags,
|
||||||
|
"arObjs": strings.Join(objFiles.Strings(), " "),
|
||||||
|
"arLibFlags": "cqsL" + arFlags,
|
||||||
|
"arLibs": strings.Join(wholeStaticLibs.Strings(), " "),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries,
|
// Generate a rule for compiling multiple .o files, plus static libraries, whole static libraries,
|
||||||
|
14
cc/cc.go
14
cc/cc.go
@@ -124,10 +124,16 @@ type PathDeps struct {
|
|||||||
StaticLibs, LateStaticLibs, WholeStaticLibs android.Paths
|
StaticLibs, LateStaticLibs, WholeStaticLibs android.Paths
|
||||||
|
|
||||||
// Paths to .o files
|
// Paths to .o files
|
||||||
Objs Objects
|
Objs Objects
|
||||||
|
// Paths to .o files in dependencies that provide them. Note that these lists
|
||||||
|
// aren't complete since prebuilt modules don't provide the .o files.
|
||||||
StaticLibObjs Objects
|
StaticLibObjs Objects
|
||||||
WholeStaticLibObjs Objects
|
WholeStaticLibObjs Objects
|
||||||
|
|
||||||
|
// Paths to .a files in prebuilts. Complements WholeStaticLibObjs to contain
|
||||||
|
// the libs from all whole_static_lib dependencies.
|
||||||
|
WholeStaticLibsFromPrebuilts android.Paths
|
||||||
|
|
||||||
// Paths to generated source files
|
// Paths to generated source files
|
||||||
GeneratedSources android.Paths
|
GeneratedSources android.Paths
|
||||||
GeneratedHeaders android.Paths
|
GeneratedHeaders android.Paths
|
||||||
@@ -2482,7 +2488,11 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
|
|||||||
}
|
}
|
||||||
ctx.AddMissingDependencies(missingDeps)
|
ctx.AddMissingDependencies(missingDeps)
|
||||||
}
|
}
|
||||||
depPaths.WholeStaticLibObjs = depPaths.WholeStaticLibObjs.Append(staticLib.objs())
|
if _, ok := ccWholeStaticLib.linker.(prebuiltLinkerInterface); ok {
|
||||||
|
depPaths.WholeStaticLibsFromPrebuilts = append(depPaths.WholeStaticLibsFromPrebuilts, linkFile.Path())
|
||||||
|
} else {
|
||||||
|
depPaths.WholeStaticLibObjs = depPaths.WholeStaticLibObjs.Append(staticLib.objs())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ctx.ModuleErrorf(
|
ctx.ModuleErrorf(
|
||||||
"non-cc.Modules cannot be included as whole static libraries.", depName)
|
"non-cc.Modules cannot be included as whole static libraries.", depName)
|
||||||
|
@@ -874,7 +874,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TransformObjToStaticLib(ctx, library.objects.objFiles, builderFlags, outputFile, objs.tidyFiles)
|
TransformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, objs.tidyFiles)
|
||||||
|
|
||||||
library.coverageOutputFile = TransformCoverageFilesToZip(ctx, library.objects, ctx.ModuleName())
|
library.coverageOutputFile = TransformCoverageFilesToZip(ctx, library.objects, ctx.ModuleName())
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user