Spracherkennung für: .go vermutete Sprache: Abap {ABAP[54] Corba[40] IDL[40]} [Methode: maximale Elemente, drei Dimensionen]
// Copyright
2019 The Android
Open Source 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 rust
import (
"android/soong/android"
"github.com/google/blueprint/proptools"
)
func init() {
android.RegisterModuleType(
"rust_prebuilt_library", PrebuiltLibraryFactory)
android.RegisterModuleType(
"rust_prebuilt_dylib", PrebuiltDylibFactory)
android.RegisterModuleType(
"rust_prebuilt_rlib", PrebuiltRlibFactory)
android.RegisterModuleType(
"rust_prebuilt_proc_macro", PrebuiltProcMacroFactory)
}
type PrebuiltProperties struct {
// path
to the prebuilt
file
Srcs proptools.Configurable[[]
string] `android:
"path,arch_variant"`
// directories containing associated rlib dependencies
Link_dirs []
string `android:
"path,arch_variant"`
Force_use_prebuilt
*bool `android:"arch_variant"`
}
type prebuiltLibraryDecorator struct {
android.Prebuilt
*libraryDecorator
Properties PrebuiltProperties
}
type prebuiltProcMacroDecorator struct {
android.Prebuilt
*procMacroDecorator
Properties PrebuiltProperties
}
func PrebuiltProcMacroFactory() android.
Module {
module, _ := NewPrebuiltProcMacro(android.HostSupportedNoCross)
return
module.Init()
}
type rustPrebuilt
interface {
prebuiltSrcs(ctx android.BaseModuleContext) []
string
prebuilt()
*android.Prebuilt
}
func NewPrebuiltProcMacro(hod android.HostOrDeviceSupported) (
*Module, *prebuiltProcMacroDecorator) {
module, library := NewProcMacro(hod)
prebuilt := &prebuiltProcMacroDecorator{
procMacroDecorator: library,
}
module.compiler = prebuilt
addSrcSupplier(
module, prebuilt)
return
module, prebuilt
}
var _ compiler = (
*prebuiltLibraryDecorator)(nil)
var _ exportedFlagsProducer = (
*prebuiltLibraryDecorator)(nil)
var _ rustPrebuilt = (
*prebuiltLibraryDecorator)(nil)
var _ compiler = (
*prebuiltProcMacroDecorator)(nil)
var _ exportedFlagsProducer = (
*prebuiltProcMacroDecorator)(nil)
var _ rustPrebuilt = (
*prebuiltProcMacroDecorator)(nil)
func prebuiltPath(ctx ModuleContext, prebuilt rustPrebuilt) android.Path {
srcs := android.PathsForModuleSrc(ctx, prebuilt.prebuiltSrcs(ctx))
if len(srcs) ==
0 {
ctx.PropertyErrorf(
"srcs",
"srcs must not be empty")
}
if len(srcs) >
1 {
ctx.PropertyErrorf(
"srcs",
"prebuilt libraries can only have one entry in srcs (the prebuilt path)")
}
return srcs[
0]
}
func PrebuiltLibraryFactory() android.
Module {
module, _ := NewPrebuiltLibrary(android.HostAndDeviceSupported)
return
module.Init()
}
func PrebuiltDylibFactory() android.
Module {
module, _ := NewPrebuiltDylib(android.HostAndDeviceSupported)
return
module.Init()
}
func PrebuiltRlibFactory() android.
Module {
module, _ := NewPrebuiltRlib(android.HostAndDeviceSupported)
return
module.Init()
}
func addSrcSupplier(
module android.PrebuiltInterface, prebuilt rustPrebuilt) {
srcsSupplier := func(ctx android.BaseModuleContext, _ android.
Module) []
string {
return prebuilt.prebuiltSrcs(ctx)
}
android.InitPrebuiltModuleWithSrcSupplier(
module, srcsSupplier,
"srcs")
}
func NewPrebuiltLibrary(hod android.HostOrDeviceSupported) (
*Module, *prebuiltLibraryDecorator) {
module, library := NewRustLibrary(hod)
library.BuildOnlyRust()
library.setNoStdlibs()
library.setSysroot()
prebuilt := &prebuiltLibraryDecorator{
libraryDecorator: library,
}
module.compiler = prebuilt
addSrcSupplier(
module, prebuilt)
return
module, prebuilt
}
func NewPrebuiltDylib(hod android.HostOrDeviceSupported) (
*Module, *prebuiltLibraryDecorator) {
module, library := NewRustLibrary(hod)
library.BuildOnlyDylib()
library.setNoStdlibs()
library.setSysroot()
prebuilt := &prebuiltLibraryDecorator{
libraryDecorator: library,
}
module.compiler = prebuilt
addSrcSupplier(
module, prebuilt)
return
module, prebuilt
}
func NewPrebuiltRlib(hod android.HostOrDeviceSupported) (
*Module, *prebuiltLibraryDecorator) {
module, library := NewRustLibrary(hod)
library.BuildOnlyRlib()
library.setNoStdlibs()
library.setSysroot()
prebuilt := &prebuiltLibraryDecorator{
libraryDecorator: library,
}
module.compiler = prebuilt
addSrcSupplier(
module, prebuilt)
return
module, prebuilt
}
func (prebuilt
*prebuiltLibraryDecorator) compilerProps() []interface{} {
return
append(prebuilt.libraryDecorator.compilerProps(),
&prebuilt.Properties)
}
func (prebuilt
*prebuiltLibraryDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) buildOutput {
linkDirs := android.PathsForModuleSrc(ctx, prebuilt.Properties.Link_dirs).Strings()
linkDirs = android.FirstUniqueInPlace(linkDirs)
var linkDirsDeps []android.Path
for _, linkDir := range linkDirs {
linkDirsDeps =
append(linkDirsDeps, android.PathsForModuleSrc(ctx, []
string{linkDir +
"/*.rlib"})...)
}
prebuilt.flagExporter.exportLinkDirs(linkDirs, linkDirsDeps)
prebuilt.flagExporter.setRustProvider(ctx)
srcPath := prebuiltPath(ctx, prebuilt)
prebuilt.baseCompiler.unstrippedOutputFile = srcPath
return buildOutput{outputFile: srcPath}
}
func (prebuilt
*prebuiltLibraryDecorator) rustdoc(ctx ModuleContext, flags Flags,
deps PathDeps) android.OptionalPath {
return android.OptionalPath{}
}
func (prebuilt
*prebuiltLibraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
deps = prebuilt.baseCompiler.compilerDeps(ctx, deps)
return deps
}
func (prebuilt
*prebuiltLibraryDecorator) nativeCoverage() bool {
return false
}
func (prebuilt
*prebuiltLibraryDecorator) prebuiltSrcs(ctx android.BaseModuleContext) []string {
return prebuilt.Properties.Srcs.GetOrDefault(ctx, nil)
}
func (prebuilt
*prebuiltLibraryDecorator) prebuilt() *android.Prebuilt {
return &prebuilt.Prebuilt
}
func (prebuilt
*prebuiltLibraryDecorator) crateRootPath(ctx ModuleContext) android.Path {
if prebuilt.baseCompiler.Properties.Crate_root == nil {
return srcPathFromModuleSrcs(ctx, prebuilt.prebuiltSrcs(ctx))
}
else {
return android.PathForModuleSrc(ctx,
*prebuilt.baseCompiler.Properties.Crate_root)
}
}
func (prebuilt
*prebuiltProcMacroDecorator) prebuiltSrcs(ctx android.BaseModuleContext) []string {
return prebuilt.Properties.Srcs.GetOrDefault(ctx, nil)
}
func (prebuilt
*prebuiltProcMacroDecorator) prebuilt() *android.Prebuilt {
return &prebuilt.Prebuilt
}
func (prebuilt
*prebuiltProcMacroDecorator) compilerProps() []interface{} {
return
append(prebuilt.procMacroDecorator.compilerProps(),
&prebuilt.Properties)
}
func (prebuilt
*prebuiltProcMacroDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) buildOutput {
linkDirs := android.PathsForModuleSrc(ctx, prebuilt.Properties.Link_dirs).Strings()
linkDirs = android.FirstUniqueInPlace(linkDirs)
var linkDirsDeps []android.Path
for _, linkDir := range linkDirs {
linkDirsDeps =
append(linkDirsDeps, android.PathsForModuleSrc(ctx, []
string{linkDir +
"/*.rlib"})...)
}
prebuilt.flagExporter.exportLinkDirs(linkDirs, linkDirsDeps)
prebuilt.flagExporter.setRustProvider(ctx)
srcPath := prebuiltPath(ctx, prebuilt)
prebuilt.baseCompiler.unstrippedOutputFile = srcPath
return buildOutput{outputFile: srcPath}
}
func (prebuilt
*prebuiltProcMacroDecorator) rustdoc(ctx ModuleContext, flags Flags,
deps PathDeps) android.OptionalPath {
return android.OptionalPath{}
}
func (prebuilt
*prebuiltProcMacroDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
deps = prebuilt.baseCompiler.compilerDeps(ctx, deps)
return deps
}
func (prebuilt
*prebuiltProcMacroDecorator) nativeCoverage() bool {
return false
}
func (prebuilt
*prebuiltProcMacroDecorator) crateRootPath(ctx ModuleContext) android.Path {
if prebuilt.baseCompiler.Properties.Crate_root == nil {
return srcPathFromModuleSrcs(ctx, prebuilt.prebuiltSrcs(ctx))
}
else {
return android.PathForModuleSrc(ctx,
*prebuilt.baseCompiler.Properties.Crate_root)
}
}