diff options
author | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-09-05 15:10:31 +0200 |
---|---|---|
committer | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-09-06 12:15:24 +0200 |
commit | af08db027b6214306683c8cbf9980798c5f85977 (patch) | |
tree | 97211afd7b11bace6ce508984d110ddf10dc41f2 /build/soong/generator | |
parent | dc5051ce0272ddb572aaa72ecd0e1d00ad9b0f83 (diff) | |
download | external_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.go | 310 | ||||
-rw-r--r-- | build/soong/generator/variables.go | 28 |
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 -} |