123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- // 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/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"`
- // Create a make variable with the specified name that contains the path to
- // this prebuilt built tool, relative to the root of the source tree.
- Export_to_make_var *string
- }
- 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.BaseModuleName())
- deps := PathsForModuleSrc(ctx, t.properties.Deps)
- var fromPath = sourcePath.String()
- if !filepath.IsAbs(fromPath) {
- fromPath = "$$PWD/" + fromPath
- }
- ctx.Build(pctx, BuildParams{
- Rule: Symlink,
- Output: installedPath,
- Input: sourcePath,
- Implicits: deps,
- Args: map[string]string{
- "fromPath": fromPath,
- },
- })
- packagingDir := PathForModuleInstall(ctx, t.BaseModuleName())
- ctx.PackageFile(packagingDir, sourcePath.String(), sourcePath)
- for _, dep := range deps {
- ctx.PackageFile(packagingDir, dep.String(), dep)
- }
- t.toolPath = OptionalPathForPath(installedPath)
- }
- func (t *prebuiltBuildTool) MakeVars(ctx MakeVarsModuleContext) {
- if makeVar := String(t.properties.Export_to_make_var); makeVar != "" {
- if t.Target().Os != ctx.Config().BuildOS {
- return
- }
- ctx.StrictRaw(makeVar, t.toolPath.String())
- }
- }
- 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
- }
|