Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3147242 authored by Yu Liu's avatar Yu Liu Committed by Gerrit Code Review
Browse files

Merge "Collect kythe, obj and tidy files using ModuleProxy." into main

parents 09b2a147 ec7043df
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ func init() {
	gob.Register(extraFilesZip{})
	gob.Register(InstallPath{})
	gob.Register(ModuleGenPath{})
	gob.Register(ModuleObjPath{})
	gob.Register(ModuleOutPath{})
	gob.Register(OutputPath{})
	gob.Register(PhonyPath{})
+3 −0
Original line number Diff line number Diff line
@@ -1822,6 +1822,8 @@ type CommonPropertiesProviderData struct {
	Enabled bool
	// Whether the module has been replaced by a prebuilt
	ReplacedByPrebuilt bool
	// The Target of artifacts that this module variant is responsible for creating.
	CompileTarget Target
}

var CommonPropertiesProviderKey = blueprint.NewProvider[CommonPropertiesProviderData]()
@@ -2086,6 +2088,7 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)

	commonData := CommonPropertiesProviderData{
		ReplacedByPrebuilt: m.commonProperties.ReplacedByPrebuilt,
		CompileTarget:      m.commonProperties.CompileTarget,
	}
	if m.commonProperties.ForcedDisabled {
		commonData.Enabled = false
+22 −1
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ type SingletonContext interface {

	VisitAllModulesBlueprint(visit func(blueprint.Module))
	VisitAllModules(visit func(Module))
	VisitAllModuleProxies(visit func(proxy ModuleProxy))
	VisitAllModulesIf(pred func(Module) bool, visit func(Module))

	VisitDirectDeps(module Module, visit func(Module))
@@ -77,6 +78,8 @@ type SingletonContext interface {

	VisitAllModuleVariants(module Module, visit func(Module))

	VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy))

	PrimaryModule(module Module) Module
	FinalModule(module Module) Module

@@ -193,7 +196,7 @@ func (s *singletonContextAdaptor) Eval(pctx PackageContext, ninjaStr string) (st
}

// visitAdaptor wraps a visit function that takes an android.Module parameter into
// a function that takes an blueprint.Module parameter and only calls the visit function if the
// a function that takes a blueprint.Module parameter and only calls the visit function if the
// blueprint.Module is an android.Module.
func visitAdaptor(visit func(Module)) func(blueprint.Module) {
	return func(module blueprint.Module) {
@@ -203,6 +206,16 @@ func visitAdaptor(visit func(Module)) func(blueprint.Module) {
	}
}

// visitProxyAdaptor wraps a visit function that takes an android.ModuleProxy parameter into
// a function that takes a blueprint.ModuleProxy parameter.
func visitProxyAdaptor(visit func(proxy ModuleProxy)) func(proxy blueprint.ModuleProxy) {
	return func(module blueprint.ModuleProxy) {
		visit(ModuleProxy{
			module: module,
		})
	}
}

// predAdaptor wraps a pred function that takes an android.Module parameter
// into a function that takes an blueprint.Module parameter and only calls the visit function if the
// blueprint.Module is an android.Module, otherwise returns false.
@@ -224,6 +237,10 @@ func (s *singletonContextAdaptor) VisitAllModules(visit func(Module)) {
	s.SingletonContext.VisitAllModules(visitAdaptor(visit))
}

func (s *singletonContextAdaptor) VisitAllModuleProxies(visit func(proxy ModuleProxy)) {
	s.SingletonContext.VisitAllModuleProxies(visitProxyAdaptor(visit))
}

func (s *singletonContextAdaptor) VisitAllModulesIf(pred func(Module) bool, visit func(Module)) {
	s.SingletonContext.VisitAllModulesIf(predAdaptor(pred), visitAdaptor(visit))
}
@@ -248,6 +265,10 @@ func (s *singletonContextAdaptor) VisitAllModuleVariants(module Module, visit fu
	s.SingletonContext.VisitAllModuleVariants(module, visitAdaptor(visit))
}

func (s *singletonContextAdaptor) VisitAllModuleVariantProxies(module Module, visit func(proxy ModuleProxy)) {
	s.SingletonContext.VisitAllModuleVariantProxies(module, visitProxyAdaptor(visit))
}

func (s *singletonContextAdaptor) PrimaryModule(module Module) Module {
	return s.SingletonContext.PrimaryModule(module).(Module)
}
+29 −20
Original line number Diff line number Diff line
@@ -45,6 +45,14 @@ type CcMakeVarsInfo struct {

var CcMakeVarsInfoProvider = blueprint.NewProvider[*CcMakeVarsInfo]()

type CcObjectInfo struct {
	objFiles   android.Paths
	tidyFiles  android.Paths
	kytheFiles android.Paths
}

var CcObjectInfoProvider = blueprint.NewProvider[CcObjectInfo]()

func init() {
	RegisterCCBuildComponents(android.InitRegistrationContext)

@@ -653,10 +661,6 @@ type installer interface {
	installInRoot() bool
}

type xref interface {
	XrefCcFiles() android.Paths
}

type overridable interface {
	overriddenModules() []string
}
@@ -905,12 +909,6 @@ type Module struct {
	staticAnalogue *StaticLibraryInfo

	makeLinkType string
	// Kythe (source file indexer) paths for this compilation module
	kytheFiles android.Paths
	// Object .o file output paths for this compilation module
	objFiles android.Paths
	// Tidy .tidy file output paths for this compilation module
	tidyFiles android.Paths

	// For apex variants, this is set as apex.min_sdk_version
	apexSdkVersion android.ApiLevel
@@ -1478,10 +1476,6 @@ func InstallToBootstrap(name string, config android.Config) bool {
	return isBionic(name)
}

func (c *Module) XrefCcFiles() android.Paths {
	return c.kytheFiles
}

func (c *Module) isCfiAssemblySupportEnabled() bool {
	return c.sanitize != nil &&
		Bool(c.sanitize.Properties.Sanitize.Config.Cfi_assembly_support)
@@ -2053,9 +2047,6 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
		if ctx.Failed() {
			return
		}
		c.kytheFiles = objs.kytheFiles
		c.objFiles = objs.objFiles
		c.tidyFiles = objs.tidyFiles
	}

	if c.linker != nil {
@@ -2124,6 +2115,17 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
		c.hasYacc = b.hasSrcExt(ctx, ".y") || b.hasSrcExt(ctx, ".yy")
	}

	ccObjectInfo := CcObjectInfo{
		kytheFiles: objs.kytheFiles,
	}
	if !ctx.Config().KatiEnabled() || !android.ShouldSkipAndroidMkProcessing(ctx, c) {
		ccObjectInfo.objFiles = objs.objFiles
		ccObjectInfo.tidyFiles = objs.tidyFiles
	}
	if len(ccObjectInfo.kytheFiles)+len(ccObjectInfo.objFiles)+len(ccObjectInfo.tidyFiles) > 0 {
		android.SetProvider(ctx, CcObjectInfoProvider, ccObjectInfo)
	}

	c.setOutputFiles(ctx)

	if c.makeVarsInfo != nil {
@@ -2131,6 +2133,12 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
	}
}

func setOutputFilesIfNotEmpty(ctx ModuleContext, files android.Paths, tag string) {
	if len(files) > 0 {
		ctx.SetOutputFiles(files, tag)
	}
}

func (c *Module) setOutputFiles(ctx ModuleContext) {
	if c.outputFile.Valid() {
		ctx.SetOutputFiles(android.Paths{c.outputFile.Path()}, "")
@@ -4001,9 +4009,10 @@ type kytheExtractAllSingleton struct {

func (ks *kytheExtractAllSingleton) GenerateBuildActions(ctx android.SingletonContext) {
	var xrefTargets android.Paths
	ctx.VisitAllModules(func(module android.Module) {
		if ccModule, ok := module.(xref); ok {
			xrefTargets = append(xrefTargets, ccModule.XrefCcFiles()...)
	ctx.VisitAllModuleProxies(func(module android.ModuleProxy) {
		files := android.OtherModuleProviderOrDefault(ctx, module, CcObjectInfoProvider).kytheFiles
		if len(files) > 0 {
			xrefTargets = append(xrefTargets, files...)
		}
	})
	// TODO(asmundak): Perhaps emit a rule to output a warning if there were no xrefTargets
+5 −9
Original line number Diff line number Diff line
@@ -219,15 +219,11 @@ func collectTidyObjModuleTargets(ctx android.SingletonContext, module android.Mo
	subsetTidyFileGroups := make(map[string]android.Paths) // subset group name => tidy file Paths

	// (1) Collect all obj/tidy files into OS-specific groups.
	ctx.VisitAllModuleVariants(module, func(variant android.Module) {
		if ctx.Config().KatiEnabled() && android.ShouldSkipAndroidMkProcessing(ctx, variant) {
			return
		}
		if m, ok := variant.(*Module); ok {
			osName := variant.Target().Os.Name
			addToOSGroup(osName, m.objFiles, allObjFileGroups, subsetObjFileGroups)
			addToOSGroup(osName, m.tidyFiles, allTidyFileGroups, subsetTidyFileGroups)
		}
	ctx.VisitAllModuleVariantProxies(module, func(variant android.ModuleProxy) {
		osName := android.OtherModuleProviderOrDefault(ctx, variant, android.CommonPropertiesProviderKey).CompileTarget.Os.Name
		info := android.OtherModuleProviderOrDefault(ctx, variant, CcObjectInfoProvider)
		addToOSGroup(osName, info.objFiles, allObjFileGroups, subsetObjFileGroups)
		addToOSGroup(osName, info.tidyFiles, allTidyFileGroups, subsetTidyFileGroups)
	})

	// (2) Add an all-OS group, with "" or "subset" name, to include all os-specific phony targets.