From fae4d517fc10f8fbd0ce8f66d300df8acd1450d8 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 24 Jul 2020 20:47:24 +0000 Subject: [PATCH 1/3] Revert "Fix builds with absolute OUT_DIR" This reverts commit b1d1e0e6bd0f4034752a7c7d15f44e967c485d7b. Reason for revert: b/162063775 Change-Id: Ifcdba9d918d2bd0b5ab7ab02ccdc727a844a5556 --- android/prebuilt_build_tool.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/android/prebuilt_build_tool.go b/android/prebuilt_build_tool.go index d457da462..a9f29ef69 100644 --- a/android/prebuilt_build_tool.go +++ b/android/prebuilt_build_tool.go @@ -59,15 +59,9 @@ func (t *prebuiltBuildTool) GenerateAndroidBuildActions(ctx ModuleContext) { installedPath := PathForModuleOut(ctx, t.ModuleBase.Name()) deps := PathsForModuleSrc(ctx, t.properties.Deps) - var relPath string - if filepath.IsAbs(installedPath.String()) { - relPath = filepath.Join(absSrcDir, sourcePath.String()) - } else { - var err error - relPath, err = filepath.Rel(path.Dir(installedPath.String()), sourcePath.String()) - if err != nil { - ctx.ModuleErrorf("Unable to generate symlink between %q and %q: %s", installedPath.String(), sourcePath.String(), err) - } + relPath, err := filepath.Rel(path.Dir(installedPath.String()), sourcePath.String()) + if err != nil { + ctx.ModuleErrorf("Unabled to generate symlink between %q and %q: %s", installedPath.String(), sourcePath.String()) } ctx.Build(pctx, BuildParams{ From dd18efd95d36a0764dad27bf65b64af83e322b7e Mon Sep 17 00:00:00 2001 From: David Su Date: Fri, 24 Jul 2020 17:19:23 +0000 Subject: [PATCH 2/3] Revert "Switch cc's use of bison and flex to prebuilt_build_tool" Revert submission 1366377-prebuilt_build_tool_make Reason for revert: breaks build Reverted Changes: I20bf062bb:Export prebuilt tools to Make I4bb526492:Move some prebuilt build tool configs to Soong I195b68813:Support per-module MakeVars Ibcb257e7b:Fix dependency loop with flex I6150f0f39:Switch cc's use of bison and flex to prebuilt_buil... I6939451b8:Reland "Use genrules to build a consistent awk." Idee60640f:Add prebuilt_build_tool modules for genrule use I00893172b:Rename bison to bison_bin I82c26be1c:Add prebuilt_build_tool to allow genrules to use p... Change-Id: I1ca553ffe4b09250a441b9bc477c3ba98c6f6549 --- cc/cc.go | 31 ---------------------- cc/compiler.go | 10 +------ cc/gen.go | 72 +++++++++++++++++--------------------------------- 3 files changed, 25 insertions(+), 88 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index 4ec98be05..fdf28799c 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -116,8 +116,6 @@ type Deps struct { // Used for host bionic LinkerFlagsFile string DynamicLinker string - - Tools []string } type PathDeps struct { @@ -160,8 +158,6 @@ type PathDeps struct { // Path to the dynamic linker binary DynamicLinker android.OptionalPath - - Tools map[string]android.Path } // LocalOrGlobalFlags contains flags that need to have values set globally by the build system or locally by the module @@ -429,12 +425,6 @@ type xref interface { XrefCcFiles() android.Paths } -type ToolDependencyTag struct { - blueprint.BaseDependencyTag - - Name string -} - var ( dataLibDepTag = DependencyTag{Name: "data_lib", Library: true, Shared: true} sharedExportDepTag = DependencyTag{Name: "shared", Library: true, Shared: true, ReexportFlags: true} @@ -1704,7 +1694,6 @@ func (c *Module) deps(ctx DepsContext) Deps { deps.LateSharedLibs = android.LastUniqueStrings(deps.LateSharedLibs) deps.HeaderLibs = android.LastUniqueStrings(deps.HeaderLibs) deps.RuntimeLibs = android.LastUniqueStrings(deps.RuntimeLibs) - deps.Tools = android.LastUniqueStrings(deps.Tools) for _, lib := range deps.ReexportSharedLibHeaders { if !inList(lib, deps.SharedLibs) { @@ -2048,11 +2037,6 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { }, vndkExtDepTag, vndkdep.getVndkExtendsModuleName()) } } - - for _, tool := range deps.Tools { - actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), - ToolDependencyTag{Name: tool}, tool) - } } func BeginMutator(ctx android.BottomUpMutatorContext) { @@ -2235,21 +2219,6 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { depName := ctx.OtherModuleName(dep) depTag := ctx.OtherModuleDependencyTag(dep) - if toolDep, ok := depTag.(ToolDependencyTag); ok { - if toolMod, ok := dep.(android.HostToolProvider); ok { - if depPaths.Tools == nil { - depPaths.Tools = make(map[string]android.Path) - } - toolPath := toolMod.HostToolPath() - if !toolPath.Valid() { - ctx.ModuleErrorf("Failed to find path for host tool %q", toolDep.Name) - } - depPaths.Tools[toolDep.Name] = toolPath.Path() - } else { - ctx.ModuleErrorf("Found module, but not host tool for %q", toolDep.Name) - } - } - ccDep, ok := dep.(LinkableInterface) if !ok { diff --git a/cc/compiler.go b/cc/compiler.go index ba14dd5d7..d5ea2c3ae 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -251,14 +251,6 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { deps.StaticLibs = append(deps.StaticLibs, "libomp") } - if compiler.hasSrcExt(".y") || compiler.hasSrcExt(".yy") { - deps.Tools = append(deps.Tools, "bison", "m4") - } - - if compiler.hasSrcExt(".l") || compiler.hasSrcExt(".ll") { - deps.Tools = append(deps.Tools, "flex", "m4") - } - return deps } @@ -589,7 +581,7 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD srcs := append(android.Paths(nil), compiler.srcsBeforeGen...) - srcs, genDeps := genSources(ctx, srcs, buildFlags, deps.Tools) + srcs, genDeps := genSources(ctx, srcs, buildFlags) pathDeps = append(pathDeps, genDeps...) compiler.pathDeps = pathDeps diff --git a/cc/gen.go b/cc/gen.go index 6f9036bd9..b0aadc650 100644 --- a/cc/gen.go +++ b/cc/gen.go @@ -24,6 +24,7 @@ import ( ) func init() { + pctx.SourcePathVariable("lexCmd", "prebuilts/build-tools/${config.HostPrebuiltTag}/bin/flex") pctx.SourcePathVariable("m4Cmd", "prebuilts/build-tools/${config.HostPrebuiltTag}/bin/m4") pctx.HostBinToolVariable("aidlCmd", "aidl-cpp") @@ -31,6 +32,12 @@ func init() { } var ( + lex = pctx.AndroidStaticRule("lex", + blueprint.RuleParams{ + Command: "M4=$m4Cmd $lexCmd -o$out $in", + CommandDeps: []string{"$lexCmd", "$m4Cmd"}, + }) + sysprop = pctx.AndroidStaticRule("sysprop", blueprint.RuleParams{ Command: "$syspropCmd --header-dir=$headerOutDir --public-header-dir=$publicOutDir " + @@ -59,8 +66,7 @@ type YaccProperties struct { } func genYacc(ctx android.ModuleContext, rule *android.RuleBuilder, yaccFile android.Path, - outFile android.ModuleGenPath, props *YaccProperties, - tools map[string]android.Path) (headerFiles android.Paths) { + outFile android.ModuleGenPath, props *YaccProperties) (headerFiles android.Paths) { outDir := android.PathForModuleGen(ctx, "yacc") headerFile := android.GenPathWithExt(ctx, "yacc", yaccFile, "h") @@ -91,17 +97,9 @@ func genYacc(ctx android.ModuleContext, rule *android.RuleBuilder, yaccFile andr } } - bison, ok := tools["bison"] - if !ok { - ctx.ModuleErrorf("Unable to find bison") - } - m4, ok := tools["m4"] - if !ok { - ctx.ModuleErrorf("Unable to find m4") - } - - cmd.FlagWithInput("M4=", m4). - Tool(bison). + cmd.Text("BISON_PKGDATADIR=prebuilts/build-tools/common/bison"). + FlagWithInput("M4=", ctx.Config().PrebuiltBuildTool(ctx, "m4")). + PrebuiltBuildTool(ctx, "bison"). Flag("-d"). Flags(flags). FlagWithOutput("--defines=", headerFile). @@ -155,23 +153,13 @@ func genAidl(ctx android.ModuleContext, rule *android.RuleBuilder, aidlFile andr } } -func genLex(ctx android.ModuleContext, rule *android.RuleBuilder, lexFile android.Path, - outFile android.ModuleGenPath, tools map[string]android.Path) { - - flex, ok := tools["flex"] - if !ok { - ctx.ModuleErrorf("Unable to find flex") - } - m4, ok := tools["m4"] - if !ok { - ctx.ModuleErrorf("Unable to find m4") - } - - rule.Command(). - FlagWithInput("M4=", m4). - Tool(flex). - FlagWithOutput("-o", outFile). - Input(lexFile) +func genLex(ctx android.ModuleContext, lexFile android.Path, outFile android.ModuleGenPath) { + ctx.Build(pctx, android.BuildParams{ + Rule: lex, + Description: "lex " + lexFile.Rel(), + Output: outFile, + Input: lexFile, + }) } func genSysprop(ctx android.ModuleContext, syspropFile android.Path) (android.Path, android.Paths) { @@ -218,22 +206,14 @@ func genWinMsg(ctx android.ModuleContext, srcFile android.Path, flags builderFla return rcFile, headerFile } -func genSources(ctx android.ModuleContext, srcFiles android.Paths, buildFlags builderFlags, - tools map[string]android.Path) (android.Paths, android.Paths) { +func genSources(ctx android.ModuleContext, srcFiles android.Paths, + buildFlags builderFlags) (android.Paths, android.Paths) { var deps android.Paths var rsFiles android.Paths var aidlRule *android.RuleBuilder - var lexRule_ *android.RuleBuilder - lexRule := func() *android.RuleBuilder { - if lexRule_ == nil { - lexRule_ = android.NewRuleBuilder().Sbox(android.PathForModuleGen(ctx, "lex")) - } - return lexRule_ - } - var yaccRule_ *android.RuleBuilder yaccRule := func() *android.RuleBuilder { if yaccRule_ == nil { @@ -247,19 +227,19 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths, buildFlags bu case ".y": cFile := android.GenPathWithExt(ctx, "yacc", srcFile, "c") srcFiles[i] = cFile - deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cFile, buildFlags.yacc, tools)...) + deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cFile, buildFlags.yacc)...) case ".yy": cppFile := android.GenPathWithExt(ctx, "yacc", srcFile, "cpp") srcFiles[i] = cppFile - deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cppFile, buildFlags.yacc, tools)...) + deps = append(deps, genYacc(ctx, yaccRule(), srcFile, cppFile, buildFlags.yacc)...) case ".l": cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c") srcFiles[i] = cFile - genLex(ctx, lexRule(), srcFile, cFile, tools) + genLex(ctx, srcFile, cFile) case ".ll": cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp") srcFiles[i] = cppFile - genLex(ctx, lexRule(), srcFile, cppFile, tools) + genLex(ctx, srcFile, cppFile) case ".proto": ccFile, headerFile := genProto(ctx, srcFile, buildFlags) srcFiles[i] = ccFile @@ -291,10 +271,6 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths, buildFlags bu aidlRule.Build(pctx, ctx, "aidl", "gen aidl") } - if lexRule_ != nil { - lexRule_.Build(pctx, ctx, "lex", "gen lex") - } - if yaccRule_ != nil { yaccRule_.Build(pctx, ctx, "yacc", "gen yacc") } From bec7f53e4f0765958550eef687cf48659c75be52 Mon Sep 17 00:00:00 2001 From: David Su Date: Fri, 24 Jul 2020 17:19:23 +0000 Subject: [PATCH 3/3] Revert "Add prebuilt_build_tool to allow genrules to use prebuil..." Revert submission 1366377-prebuilt_build_tool_make Reason for revert: breaks build Reverted Changes: I20bf062bb:Export prebuilt tools to Make I4bb526492:Move some prebuilt build tool configs to Soong I195b68813:Support per-module MakeVars Ibcb257e7b:Fix dependency loop with flex I6150f0f39:Switch cc's use of bison and flex to prebuilt_buil... I6939451b8:Reland "Use genrules to build a consistent awk." Idee60640f:Add prebuilt_build_tool modules for genrule use I00893172b:Rename bison to bison_bin I82c26be1c:Add prebuilt_build_tool to allow genrules to use p... Change-Id: I6b3acf306d355f3e0463564c9ebe9482fa0f609e --- android/Android.bp | 1 - android/defs.go | 2 +- android/prebuilt_build_tool.go | 94 ---------------------------------- 3 files changed, 1 insertion(+), 96 deletions(-) delete mode 100644 android/prebuilt_build_tool.go diff --git a/android/Android.bp b/android/Android.bp index 96f0983e3..6ddcc14a2 100644 --- a/android/Android.bp +++ b/android/Android.bp @@ -39,7 +39,6 @@ bootstrap_go_package { "paths.go", "phony.go", "prebuilt.go", - "prebuilt_build_tool.go", "proto.go", "register.go", "rule_builder.go", diff --git a/android/defs.go b/android/defs.go index 83daa0368..45522246f 100644 --- a/android/defs.go +++ b/android/defs.go @@ -69,7 +69,7 @@ var ( // A symlink rule. Symlink = pctx.AndroidStaticRule("Symlink", blueprint.RuleParams{ - Command: "rm -f $out && ln -f -s $fromPath $out", + Command: "ln -f -s $fromPath $out", Description: "symlink $out", }, "fromPath") diff --git a/android/prebuilt_build_tool.go b/android/prebuilt_build_tool.go deleted file mode 100644 index a9f29ef69..000000000 --- a/android/prebuilt_build_tool.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2020 Google Inc. All rights reserved. -// -// 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 android - -import ( - "path" - "path/filepath" -) - -func init() { - RegisterModuleType("prebuilt_build_tool", prebuiltBuildToolFactory) -} - -type prebuiltBuildToolProperties struct { - // Source file to be executed for this build tool - Src *string `android:"path,arch_variant"` - - // Extra files that should trigger rules using this tool to rebuild - Deps []string `android:"path,arch_variant"` -} - -type prebuiltBuildTool struct { - ModuleBase - prebuilt Prebuilt - - properties prebuiltBuildToolProperties - - toolPath OptionalPath -} - -func (t *prebuiltBuildTool) Name() string { - return t.prebuilt.Name(t.ModuleBase.Name()) -} - -func (t *prebuiltBuildTool) Prebuilt() *Prebuilt { - return &t.prebuilt -} - -func (t *prebuiltBuildTool) DepsMutator(ctx BottomUpMutatorContext) { - if t.properties.Src == nil { - ctx.PropertyErrorf("src", "missing prebuilt source file") - } -} - -func (t *prebuiltBuildTool) GenerateAndroidBuildActions(ctx ModuleContext) { - sourcePath := t.prebuilt.SingleSourcePath(ctx) - installedPath := PathForModuleOut(ctx, t.ModuleBase.Name()) - deps := PathsForModuleSrc(ctx, t.properties.Deps) - - relPath, err := filepath.Rel(path.Dir(installedPath.String()), sourcePath.String()) - if err != nil { - ctx.ModuleErrorf("Unabled to generate symlink between %q and %q: %s", installedPath.String(), sourcePath.String()) - } - - ctx.Build(pctx, BuildParams{ - Rule: Symlink, - Output: installedPath, - Input: sourcePath, - Implicits: deps, - Args: map[string]string{ - "fromPath": relPath, - }, - }) - - t.toolPath = OptionalPathForPath(installedPath) -} - -func (t *prebuiltBuildTool) HostToolPath() OptionalPath { - return t.toolPath -} - -var _ HostToolProvider = &prebuiltBuildTool{} - -// prebuilt_build_tool is to declare prebuilts to be used during the build, particularly for use -// in genrules with the "tools" property. -func prebuiltBuildToolFactory() Module { - module := &prebuiltBuildTool{} - module.AddProperties(&module.properties) - InitSingleSourcePrebuiltModule(module, &module.properties, "Src") - InitAndroidArchModule(module, HostSupportedNoCross, MultilibFirst) - return module -}