summaryrefslogtreecommitdiffstats
path: root/build/soong/generator
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-09-05 15:10:31 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-09-06 12:15:24 +0200
commitaf08db027b6214306683c8cbf9980798c5f85977 (patch)
tree97211afd7b11bace6ce508984d110ddf10dc41f2 /build/soong/generator
parentdc5051ce0272ddb572aaa72ecd0e1d00ad9b0f83 (diff)
downloadexternal_wget-replicant-11.tar.gz
external_wget-replicant-11.tar.bz2
external_wget-replicant-11.zip
This way: - We can rebase more easily if needed - We don't have to bring in the other part of vendor/lineage that is potentially incompatible with what we have wget was also moved in the top directory along the way. Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
Diffstat (limited to 'build/soong/generator')
-rw-r--r--build/soong/generator/generator.go310
-rw-r--r--build/soong/generator/variables.go28
2 files changed, 0 insertions, 338 deletions
diff --git a/build/soong/generator/generator.go b/build/soong/generator/generator.go
deleted file mode 100644
index 7da1fde3..00000000
--- a/build/soong/generator/generator.go
+++ /dev/null
@@ -1,310 +0,0 @@
-// Copyright 2015 Google Inc. All rights reserved.
-// Copyright (C) 2018 The LineageOS Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package generator
-
-import (
- "fmt"
- "strings"
-
- "github.com/google/blueprint"
- "github.com/google/blueprint/bootstrap"
- "github.com/google/blueprint/proptools"
-
- "android/soong/android"
- "android/soong/shared"
- "path/filepath"
-)
-
-func init() {
- android.RegisterModuleType("lineage_generator", GeneratorFactory)
-
- pctx.HostBinToolVariable("sboxCmd", "sbox")
-}
-
-var String = proptools.String
-
-var (
- pctx = android.NewPackageContext("android/soong/generator")
-)
-
-type HostToolProvider interface {
- HostToolPath() android.OptionalPath
-}
-
-type hostToolDependencyTag struct {
- blueprint.BaseDependencyTag
-}
-
-var hostToolDepTag hostToolDependencyTag
-
-type generatorProperties struct {
- // The command to run on one or more input files. Cmd supports substitution of a few variables
- // (the actual substitution is implemented in GenerateAndroidBuildActions below)
- //
- // Available variables for substitution:
- //
- // $(location): the path to the first entry in tools or tool_files
- // $(location <label>): the path to the tool or tool_file with name <label>
- // $(genDir): the sandbox directory for this tool; contains $(out)
- // $$: a literal $
- //
- Cmd *string
-
- // name of the modules (if any) that produces the host executable. Leave empty for
- // prebuilts or scripts that do not need a module to build them.
- Tools []string
-
- // Local file that is used as the tool
- Tool_files []string
-
- // List of directories to export as headers
- Export_include_dirs []string
-
- // List of directories to export as sources
- Export_source_dirs []string
-
- // Root directory for dep_files.
- // Relative to top build dir.
- Dep_root *string
-
- // Declare list of files that should be used for timestamp dependency checking
- Dep_files []string
-}
-
-type Module struct {
- android.ModuleBase
-
- properties generatorProperties
-
- rule blueprint.Rule
-
- // Tool dependencies
- implicitDeps android.Paths
- // Deps from input files declared in dep_files property.
- inputDeps android.Paths
-
- exportedIncludeDirs android.Paths
- exportedSourceDirs android.Paths
-
- outputDeps android.Paths
-}
-
-// These three methods satisfy genrule.SourceFileGenerator.
-// Which cc modules check for when including headers etc.
-func (g *Module) GeneratedHeaderDirs() android.Paths {
- return g.exportedIncludeDirs
-}
-
-func (g *Module) GeneratedSourceFiles() android.Paths {
- return g.exportedSourceDirs
-}
-
-func (g *Module) GeneratedDeps() android.Paths {
- return g.outputDeps
-}
-
-func (g *Module) DepsMutator(ctx android.BottomUpMutatorContext) {
- android.ExtractSourcesDeps(ctx, g.properties.Dep_files)
- android.ExtractSourcesDeps(ctx, g.properties.Tool_files)
- if g, ok := ctx.Module().(*Module); ok {
- if len(g.properties.Tools) > 0 {
- ctx.AddFarVariationDependencies([]blueprint.Variation{
- {"arch", ctx.Config().BuildOsVariant},
- }, hostToolDepTag, g.properties.Tools...)
- }
- }
-}
-
-func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
- if len(g.properties.Export_include_dirs) > 0 {
- for _, dir := range g.properties.Export_include_dirs {
- g.exportedIncludeDirs = append(g.exportedIncludeDirs,
- android.PathForModuleGen(ctx, dir))
- }
- } else {
- g.exportedIncludeDirs = append(g.exportedIncludeDirs, android.PathForModuleGen(ctx, ""))
- }
- if len(g.properties.Export_source_dirs) > 0 {
- for _, dir := range g.properties.Export_source_dirs {
- g.exportedSourceDirs = append(g.exportedSourceDirs,
- android.PathForModuleGen(ctx, dir))
- }
- } else {
- g.exportedSourceDirs = append(g.exportedSourceDirs, android.PathForModuleGen(ctx, ""))
- }
-
- tools := map[string]android.Path{}
-
- if len(g.properties.Tools) > 0 {
- ctx.VisitDirectDepsBlueprint(func(module blueprint.Module) {
- switch ctx.OtherModuleDependencyTag(module) {
- case android.SourceDepTag:
- // Nothing to do
- case hostToolDepTag:
- tool := ctx.OtherModuleName(module)
- var path android.OptionalPath
-
- if t, ok := module.(HostToolProvider); ok {
- if !t.(android.Module).Enabled() {
- if ctx.Config().AllowMissingDependencies() {
- ctx.AddMissingDependencies([]string{tool})
- } else {
- ctx.ModuleErrorf("depends on disabled module %q", tool)
- }
- break
- }
- path = t.HostToolPath()
- } else if t, ok := module.(bootstrap.GoBinaryTool); ok {
- if s, err := filepath.Rel(android.PathForOutput(ctx).String(), t.InstallPath()); err == nil {
- path = android.OptionalPathForPath(android.PathForOutput(ctx, s))
- } else {
- ctx.ModuleErrorf("cannot find path for %q: %v", tool, err)
- break
- }
- } else {
- ctx.ModuleErrorf("%q is not a host tool provider", tool)
- break
- }
-
- if path.Valid() {
- g.implicitDeps = append(g.implicitDeps, path.Path())
- if _, exists := tools[tool]; !exists {
- tools[tool] = path.Path()
- } else {
- ctx.ModuleErrorf("multiple tools for %q, %q and %q", tool, tools[tool], path.Path().String())
- }
- } else {
- ctx.ModuleErrorf("host tool %q missing output file", tool)
- }
- default:
- ctx.ModuleErrorf("unknown dependency on %q", ctx.OtherModuleName(module))
- }
- })
- }
-
- if ctx.Failed() {
- return
- }
-
- toolFiles := ctx.ExpandSources(g.properties.Tool_files, nil)
- for _, tool := range toolFiles {
- g.implicitDeps = append(g.implicitDeps, tool)
- if _, exists := tools[tool.Rel()]; !exists {
- tools[tool.Rel()] = tool
- } else {
- ctx.ModuleErrorf("multiple tools for %q, %q and %q", tool, tools[tool.Rel()], tool.Rel())
- }
- }
-
- // Determine root dir for dep_files. Defaults to current ctx ModuleDir.
- depRoot := String(g.properties.Dep_root)
- if depRoot == "" {
- depRoot = ctx.ModuleDir()
- } else {
- depRoot = lineageExpandVariables(ctx, depRoot)
- }
-
- // Glob dep_files property
- for _, dep_file := range g.properties.Dep_files {
- dep_file = lineageExpandVariables(ctx, dep_file)
- globPath := filepath.Join(depRoot, dep_file)
- paths, err := ctx.GlobWithDeps(globPath, nil)
- if err != nil {
- ctx.ModuleErrorf("unable to glob %s: %s", globPath, err.Error())
- return
- }
- for _, path := range paths {
- g.inputDeps = append(g.inputDeps, android.PathForSourceRelaxed(ctx, path))
- }
- }
-
- cmd := lineageExpandVariables(ctx, String(g.properties.Cmd))
-
- rawCommand, err := android.Expand(cmd, func(name string) (string, error) {
- switch name {
- case "location":
- if len(g.properties.Tools) == 0 && len(toolFiles) == 0 {
- return "", fmt.Errorf("at least one `tools` or `tool_files` is required if $(location) is used")
- }
-
- if len(g.properties.Tools) > 0 {
- return tools[g.properties.Tools[0]].String(), nil
- } else {
- return tools[toolFiles[0].Rel()].String(), nil
- }
- case "genDir":
- return "__SBOX_OUT_DIR__", nil
- default:
- if strings.HasPrefix(name, "location ") {
- label := strings.TrimSpace(strings.TrimPrefix(name, "location "))
- if tool, ok := tools[label]; ok {
- return tool.String(), nil
- } else {
- return "", fmt.Errorf("unknown location label %q", label)
- }
- }
- return "", fmt.Errorf("unknown variable '$(%s)'", name)
- }
- })
-
- if err != nil {
- ctx.PropertyErrorf("cmd", "%s", err.Error())
- return
- }
-
- // Dummy output dep
- dummyDep := android.PathForModuleGen(ctx, ".dummy_dep")
-
- // tell the sbox command which directory to use as its sandbox root
- buildDir := android.PathForOutput(ctx).String()
- sandboxPath := shared.TempDirForOutDir(buildDir)
-
- genDir := android.PathForModuleGen(ctx)
- // Escape the command for the shell
- rawCommand = "'" + strings.Replace(rawCommand, "'", `'\''`, -1) + "'"
- sandboxCommand := fmt.Sprintf("$sboxCmd --sandbox-path %s --output-root %s --copy-all-output -c %s && touch %s",
- sandboxPath, genDir, rawCommand, dummyDep.String())
-
- ruleParams := blueprint.RuleParams{
- Command: sandboxCommand,
- CommandDeps: []string{"$sboxCmd"},
- }
- g.rule = ctx.Rule(pctx, "generator", ruleParams)
-
- params := android.BuildParams{
- Rule: g.rule,
- Description: "generate",
- Output: dummyDep,
- Inputs: g.inputDeps,
- Implicits: g.implicitDeps,
- }
-
- g.outputDeps = append(g.outputDeps, dummyDep)
-
- ctx.Build(pctx, params)
-}
-
-func NewGenerator() *Module {
- module := &Module{}
- module.AddProperties(&module.properties)
- return module
-}
-
-func GeneratorFactory() android.Module {
- m := NewGenerator()
- android.InitAndroidModule(m)
- return m
-}
diff --git a/build/soong/generator/variables.go b/build/soong/generator/variables.go
deleted file mode 100644
index 8485f94b..00000000
--- a/build/soong/generator/variables.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package generator
-
-import (
- "fmt"
-
- "android/soong/android"
-)
-
-func lineageExpandVariables(ctx android.ModuleContext, in string) string {
- lineageVars := ctx.Config().VendorConfig("lineageVarsPlugin")
-
- out, err := android.Expand(in, func(name string) (string, error) {
- if lineageVars.IsSet(name) {
- return lineageVars.String(name), nil
- }
- // This variable is not for us, restore what the original
- // variable string will have looked like for an Expand
- // that comes later.
- return fmt.Sprintf("$(%s)", name), nil
- })
-
- if err != nil {
- ctx.PropertyErrorf("%s: %s", in, err.Error())
- return ""
- }
-
- return out
-}