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

Commit 5ba5c3ea authored by Yifan Hong's avatar Yifan Hong Committed by Automerger Merge Worker
Browse files

Merge "Check against xsd for building all matrices" into rvc-dev am:...

Merge "Check against xsd for building all matrices" into rvc-dev am: 64cb2186 am: eff4716f am: 6ad9ddc1

Change-Id: I71da1e05a9b73a0bccb4c09ace0c8f00ea3f34b5
parents 3bcd4b3f 6ad9ddc1
Loading
Loading
Loading
Loading
+63 −2
Original line number Diff line number Diff line
@@ -40,7 +40,15 @@ var (
		Description: "assemble_vintf -i ${inputs}",
	}, "inputs")

	xmllintXsd = pctx.AndroidStaticRule("xmllint-xsd", blueprint.RuleParams{
		Command:     `$XmlLintCmd --schema $xsd $in > /dev/null && touch -a $out`,
		CommandDeps: []string{"$XmlLintCmd"},
		Restat:      true,
	}, "xsd")

	kernelConfigTag  = dependencyTag{name: "kernel-config"}
	schemaTag        = dependencyTag{name: "matrix-schema"}
	schemaModuleName = "compatibility_matrix_schema"
)

const (
@@ -63,10 +71,12 @@ type vintfCompatibilityMatrixRule struct {
	properties vintfCompatibilityMatrixProperties

	genFile                android.WritablePath
	additionalDependencies android.WritablePaths
}

func init() {
	pctx.HostBinToolVariable("assembleVintfCmd", "assemble_vintf")
	pctx.HostBinToolVariable("XmlLintCmd", "xmllint")
	android.RegisterModuleType("vintf_compatibility_matrix", vintfCompatibilityMatrixFactory)
}

@@ -82,6 +92,42 @@ var _ android.AndroidMkDataProvider = (*vintfCompatibilityMatrixRule)(nil)
func (g *vintfCompatibilityMatrixRule) DepsMutator(ctx android.BottomUpMutatorContext) {
	android.ExtractSourcesDeps(ctx, g.properties.Srcs)
	ctx.AddDependency(ctx.Module(), kernelConfigTag, g.properties.Kernel_configs...)
	ctx.AddDependency(ctx.Module(), schemaTag, schemaModuleName)
}

func (g *vintfCompatibilityMatrixRule) timestampFilePath(ctx android.ModuleContext, path android.Path) android.WritablePath {
	return android.GenPathWithExt(ctx, "vintf-xmllint", path, "ts")
}

func (g *vintfCompatibilityMatrixRule) generateValidateBuildAction(ctx android.ModuleContext, path android.Path, schema android.Path) {
	timestamp := g.timestampFilePath(ctx, path)
	ctx.Build(pctx, android.BuildParams{
		Rule:        xmllintXsd,
		Description: "xmllint-xsd",
		Input:       path,
		Output:      timestamp,
		Implicit:    schema,
		Args: map[string]string{
			"xsd": schema.String(),
		},
	})
	g.additionalDependencies = append(g.additionalDependencies, timestamp)
}

func (g *vintfCompatibilityMatrixRule) getSchema(ctx android.ModuleContext) android.OptionalPath {
	schemaModule := ctx.GetDirectDepWithTag(schemaModuleName, schemaTag)
	sfp, ok := schemaModule.(android.SourceFileProducer)
	if !ok {
		ctx.ModuleErrorf("Implicit dependency %q has no srcs", ctx.OtherModuleName(schemaModule))
		return android.OptionalPath{}
	}

	schemaSrcs := sfp.Srcs()
	if len(schemaSrcs) != 1 {
		ctx.PropertyErrorf(`srcs of implicit dependency %q has length %d != 1`, ctx.OtherModuleName(schemaModule), len(schemaSrcs))
		return android.OptionalPath{}
	}
	return android.OptionalPathForPath(schemaSrcs[0])
}

func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
@@ -91,7 +137,18 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M
		outputFilename = g.Name()
	}

	schema := g.getSchema(ctx)
	if !schema.Valid() {
		return
	}

	inputPaths := android.PathsForModuleSrc(ctx, g.properties.Srcs)
	for _, srcPath := range inputPaths {
		g.generateValidateBuildAction(ctx, srcPath, schema.Path())
	}

	// No need to validate matrices from kernel configs because they are generated by
	// assemble_vintf.
	ctx.VisitDirectDepsWithTag(kernelConfigTag, func(m android.Module) {
		if k, ok := m.(*configs.KernelConfigRule); ok {
			inputPaths = append(inputPaths, k.OutputPath())
@@ -112,6 +169,7 @@ func (g *vintfCompatibilityMatrixRule) GenerateAndroidBuildActions(ctx android.M
			"inputs": strings.Join(inputPaths.Strings(), ":"),
		},
	})
	g.generateValidateBuildAction(ctx, g.genFile, schema.Path())

	ctx.InstallFile(android.PathForModuleInstall(ctx, "etc", relpath), outputFilename, g.genFile)
}
@@ -126,6 +184,9 @@ func (g *vintfCompatibilityMatrixRule) AndroidMk() android.AndroidMkData {
				if proptools.String(g.properties.Stem) != "" {
					fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", proptools.String(g.properties.Stem))
				}
				for _, path := range g.additionalDependencies {
					fmt.Fprintln(w, "LOCAL_ADDITIONAL_DEPENDENCIES +=", path.String())
				}
			},
		},
	}