Loading cc/binary.go +1 −1 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ func (binary *binaryDecorator) link(ctx ModuleContext, linkerDeps = append(linkerDeps, ndkSharedLibDeps(ctx)...) } validations = append(validations, objs.tidyFiles...) validations = append(validations, objs.tidyDepFiles...) linkerDeps = append(linkerDeps, flags.LdFlagsDeps...) // Register link action. Loading cc/builder.go +19 −12 Original line number Diff line number Diff line Loading @@ -388,6 +388,7 @@ type builderFlags struct { // True if these extra features are enabled. tidy bool needTidyFiles bool gcovCoverage bool sAbiDump bool emitXrefs bool Loading Loading @@ -420,6 +421,7 @@ type StripFlags struct { type Objects struct { objFiles android.Paths tidyFiles android.Paths tidyDepFiles android.Paths // link dependent .tidy files coverageFiles android.Paths sAbiDumpFiles android.Paths kytheFiles android.Paths Loading @@ -429,6 +431,7 @@ func (a Objects) Copy() Objects { return Objects{ objFiles: append(android.Paths{}, a.objFiles...), tidyFiles: append(android.Paths{}, a.tidyFiles...), tidyDepFiles: append(android.Paths{}, a.tidyDepFiles...), coverageFiles: append(android.Paths{}, a.coverageFiles...), sAbiDumpFiles: append(android.Paths{}, a.sAbiDumpFiles...), kytheFiles: append(android.Paths{}, a.kytheFiles...), Loading @@ -439,6 +442,7 @@ func (a Objects) Append(b Objects) Objects { return Objects{ objFiles: append(a.objFiles, b.objFiles...), tidyFiles: append(a.tidyFiles, b.tidyFiles...), tidyDepFiles: append(a.tidyDepFiles, b.tidyDepFiles...), coverageFiles: append(a.coverageFiles, b.coverageFiles...), sAbiDumpFiles: append(a.sAbiDumpFiles, b.sAbiDumpFiles...), kytheFiles: append(a.kytheFiles, b.kytheFiles...), Loading @@ -452,9 +456,8 @@ func escapeSingleQuotes(s string) string { } // Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, noTidySrcs android.Paths, func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs android.Paths, flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { // Source files are one-to-one with tidy, coverage, or kythe files, if enabled. objFiles := make(android.Paths, len(srcFiles)) var tidyFiles android.Paths Loading Loading @@ -540,8 +543,7 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no // Multiple source files have build rules usually share the same cFlags or tidyFlags. // Define only one version in this module and share it in multiple build rules. // To simplify the code, the shared variables are all named as $flags<nnn>. numSharedFlags := 0 flagsMap := make(map[string]string) shared := ctx.getSharedFlags() // Share flags only when there are multiple files or tidy rules. var hasMultipleRules = len(srcFiles) > 1 || flags.tidy Loading @@ -553,11 +555,11 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no return flags } mapKey := kind + flags n, ok := flagsMap[mapKey] n, ok := shared.flagsMap[mapKey] if !ok { numSharedFlags += 1 n = strconv.Itoa(numSharedFlags) flagsMap[mapKey] = n shared.numSharedFlags += 1 n = strconv.Itoa(shared.numSharedFlags) shared.flagsMap[mapKey] = n ctx.Variable(pctx, kind+n, flags) } return "$" + kind + n Loading Loading @@ -720,9 +722,14 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no } var tidyDepFiles android.Paths if flags.needTidyFiles { tidyDepFiles = tidyFiles } return Objects{ objFiles: objFiles, tidyFiles: tidyFiles, tidyDepFiles: tidyDepFiles, coverageFiles: coverageFiles, sAbiDumpFiles: sAbiDumpFiles, kytheFiles: kytheFiles, Loading cc/cc.go +24 −5 Original line number Diff line number Diff line Loading @@ -211,7 +211,8 @@ type Flags struct { SystemIncludeFlags []string Toolchain config.Toolchain Tidy bool // True if clang-tidy is enabled. Tidy bool // True if ninja .tidy rules should be generated. NeedTidyFiles bool // True if module link should depend on .tidy files GcovCoverage bool // True if coverage files should be generated. SAbiDump bool // True if header abi dumps should be generated. EmitXrefs bool // If true, generate Ninja rules to generate emitXrefs input files for Kythe Loading Loading @@ -516,6 +517,12 @@ type ModuleContextIntf interface { directlyInAnyApex() bool isPreventInstall() bool isCfiAssemblySupportEnabled() bool getSharedFlags() *SharedFlags } type SharedFlags struct { numSharedFlags int flagsMap map[string]string } type ModuleContext interface { Loading Loading @@ -827,6 +834,9 @@ type Module struct { // Flags used to compile this module flags Flags // Shared flags among build rules of this module sharedFlags SharedFlags // only non-nil when this is a shared library that reuses the objects of a static library staticAnalogue *StaticLibraryInfo Loading Loading @@ -1605,6 +1615,15 @@ func (ctx *moduleContextImpl) isPreventInstall() bool { return ctx.mod.Properties.PreventInstall } func (ctx *moduleContextImpl) getSharedFlags() *SharedFlags { shared := &ctx.mod.sharedFlags if shared.flagsMap == nil { shared.numSharedFlags = 0 shared.flagsMap = make(map[string]string) } return shared } func (ctx *moduleContextImpl) isCfiAssemblySupportEnabled() bool { return ctx.mod.isCfiAssemblySupportEnabled() } Loading cc/compiler.go +1 −1 Original line number Diff line number Diff line Loading @@ -675,7 +675,7 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD } // Compile a list of source files into objects a specified subdirectory func compileObjs(ctx android.ModuleContext, flags builderFlags, subdir string, func compileObjs(ctx ModuleContext, flags builderFlags, subdir string, srcFiles, noTidySrcs, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { return transformSourceToObj(ctx, subdir, srcFiles, noTidySrcs, flags, pathDeps, cFlagsDeps) Loading cc/library.go +2 −2 Original line number Diff line number Diff line Loading @@ -1340,7 +1340,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, } } transformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, nil, objs.tidyFiles) transformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, nil, objs.tidyDepFiles) library.coverageOutputFile = transformCoverageFilesToZip(ctx, library.objects, ctx.ModuleName()) Loading Loading @@ -1487,7 +1487,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, linkerDeps = append(linkerDeps, deps.LateSharedLibsDeps...) transformObjToDynamicBinary(ctx, objs.objFiles, sharedLibs, deps.StaticLibs, deps.LateStaticLibs, deps.WholeStaticLibs, linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs, objs.tidyFiles) linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs, objs.tidyDepFiles) objs.coverageFiles = append(objs.coverageFiles, deps.StaticLibObjs.coverageFiles...) objs.coverageFiles = append(objs.coverageFiles, deps.WholeStaticLibObjs.coverageFiles...) Loading Loading
cc/binary.go +1 −1 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ func (binary *binaryDecorator) link(ctx ModuleContext, linkerDeps = append(linkerDeps, ndkSharedLibDeps(ctx)...) } validations = append(validations, objs.tidyFiles...) validations = append(validations, objs.tidyDepFiles...) linkerDeps = append(linkerDeps, flags.LdFlagsDeps...) // Register link action. Loading
cc/builder.go +19 −12 Original line number Diff line number Diff line Loading @@ -388,6 +388,7 @@ type builderFlags struct { // True if these extra features are enabled. tidy bool needTidyFiles bool gcovCoverage bool sAbiDump bool emitXrefs bool Loading Loading @@ -420,6 +421,7 @@ type StripFlags struct { type Objects struct { objFiles android.Paths tidyFiles android.Paths tidyDepFiles android.Paths // link dependent .tidy files coverageFiles android.Paths sAbiDumpFiles android.Paths kytheFiles android.Paths Loading @@ -429,6 +431,7 @@ func (a Objects) Copy() Objects { return Objects{ objFiles: append(android.Paths{}, a.objFiles...), tidyFiles: append(android.Paths{}, a.tidyFiles...), tidyDepFiles: append(android.Paths{}, a.tidyDepFiles...), coverageFiles: append(android.Paths{}, a.coverageFiles...), sAbiDumpFiles: append(android.Paths{}, a.sAbiDumpFiles...), kytheFiles: append(android.Paths{}, a.kytheFiles...), Loading @@ -439,6 +442,7 @@ func (a Objects) Append(b Objects) Objects { return Objects{ objFiles: append(a.objFiles, b.objFiles...), tidyFiles: append(a.tidyFiles, b.tidyFiles...), tidyDepFiles: append(a.tidyDepFiles, b.tidyDepFiles...), coverageFiles: append(a.coverageFiles, b.coverageFiles...), sAbiDumpFiles: append(a.sAbiDumpFiles, b.sAbiDumpFiles...), kytheFiles: append(a.kytheFiles, b.kytheFiles...), Loading @@ -452,9 +456,8 @@ func escapeSingleQuotes(s string) string { } // Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, noTidySrcs android.Paths, func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs android.Paths, flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { // Source files are one-to-one with tidy, coverage, or kythe files, if enabled. objFiles := make(android.Paths, len(srcFiles)) var tidyFiles android.Paths Loading Loading @@ -540,8 +543,7 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no // Multiple source files have build rules usually share the same cFlags or tidyFlags. // Define only one version in this module and share it in multiple build rules. // To simplify the code, the shared variables are all named as $flags<nnn>. numSharedFlags := 0 flagsMap := make(map[string]string) shared := ctx.getSharedFlags() // Share flags only when there are multiple files or tidy rules. var hasMultipleRules = len(srcFiles) > 1 || flags.tidy Loading @@ -553,11 +555,11 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no return flags } mapKey := kind + flags n, ok := flagsMap[mapKey] n, ok := shared.flagsMap[mapKey] if !ok { numSharedFlags += 1 n = strconv.Itoa(numSharedFlags) flagsMap[mapKey] = n shared.numSharedFlags += 1 n = strconv.Itoa(shared.numSharedFlags) shared.flagsMap[mapKey] = n ctx.Variable(pctx, kind+n, flags) } return "$" + kind + n Loading Loading @@ -720,9 +722,14 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, no } var tidyDepFiles android.Paths if flags.needTidyFiles { tidyDepFiles = tidyFiles } return Objects{ objFiles: objFiles, tidyFiles: tidyFiles, tidyDepFiles: tidyDepFiles, coverageFiles: coverageFiles, sAbiDumpFiles: sAbiDumpFiles, kytheFiles: kytheFiles, Loading
cc/cc.go +24 −5 Original line number Diff line number Diff line Loading @@ -211,7 +211,8 @@ type Flags struct { SystemIncludeFlags []string Toolchain config.Toolchain Tidy bool // True if clang-tidy is enabled. Tidy bool // True if ninja .tidy rules should be generated. NeedTidyFiles bool // True if module link should depend on .tidy files GcovCoverage bool // True if coverage files should be generated. SAbiDump bool // True if header abi dumps should be generated. EmitXrefs bool // If true, generate Ninja rules to generate emitXrefs input files for Kythe Loading Loading @@ -516,6 +517,12 @@ type ModuleContextIntf interface { directlyInAnyApex() bool isPreventInstall() bool isCfiAssemblySupportEnabled() bool getSharedFlags() *SharedFlags } type SharedFlags struct { numSharedFlags int flagsMap map[string]string } type ModuleContext interface { Loading Loading @@ -827,6 +834,9 @@ type Module struct { // Flags used to compile this module flags Flags // Shared flags among build rules of this module sharedFlags SharedFlags // only non-nil when this is a shared library that reuses the objects of a static library staticAnalogue *StaticLibraryInfo Loading Loading @@ -1605,6 +1615,15 @@ func (ctx *moduleContextImpl) isPreventInstall() bool { return ctx.mod.Properties.PreventInstall } func (ctx *moduleContextImpl) getSharedFlags() *SharedFlags { shared := &ctx.mod.sharedFlags if shared.flagsMap == nil { shared.numSharedFlags = 0 shared.flagsMap = make(map[string]string) } return shared } func (ctx *moduleContextImpl) isCfiAssemblySupportEnabled() bool { return ctx.mod.isCfiAssemblySupportEnabled() } Loading
cc/compiler.go +1 −1 Original line number Diff line number Diff line Loading @@ -675,7 +675,7 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD } // Compile a list of source files into objects a specified subdirectory func compileObjs(ctx android.ModuleContext, flags builderFlags, subdir string, func compileObjs(ctx ModuleContext, flags builderFlags, subdir string, srcFiles, noTidySrcs, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { return transformSourceToObj(ctx, subdir, srcFiles, noTidySrcs, flags, pathDeps, cFlagsDeps) Loading
cc/library.go +2 −2 Original line number Diff line number Diff line Loading @@ -1340,7 +1340,7 @@ func (library *libraryDecorator) linkStatic(ctx ModuleContext, } } transformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, nil, objs.tidyFiles) transformObjToStaticLib(ctx, library.objects.objFiles, deps.WholeStaticLibsFromPrebuilts, builderFlags, outputFile, nil, objs.tidyDepFiles) library.coverageOutputFile = transformCoverageFilesToZip(ctx, library.objects, ctx.ModuleName()) Loading Loading @@ -1487,7 +1487,7 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, linkerDeps = append(linkerDeps, deps.LateSharedLibsDeps...) transformObjToDynamicBinary(ctx, objs.objFiles, sharedLibs, deps.StaticLibs, deps.LateStaticLibs, deps.WholeStaticLibs, linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs, objs.tidyFiles) linkerDeps, deps.CrtBegin, deps.CrtEnd, false, builderFlags, outputFile, implicitOutputs, objs.tidyDepFiles) objs.coverageFiles = append(objs.coverageFiles, deps.StaticLibObjs.coverageFiles...) objs.coverageFiles = append(objs.coverageFiles, deps.WholeStaticLibObjs.coverageFiles...) Loading