Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/build/build/soong/cc/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 8 kB image not shown  

Quelle  object.go   Sprache: Unknown

 

Spracherkennung für: .go vermutete Sprache: Abap {ABAP[88] VDM[41] VHDL[37]} [Methode: maximale Elemente, drei Dimensionen]

// Copyright 2016 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 cc

import (
 "strings"

 "android/soong/android"

 "github.com/google/blueprint/proptools"
)

//
// Objects (for crt*.o)
//

func init() {
 android.RegisterModuleType("cc_object", ObjectFactory)
 android.RegisterSdkMemberType(ccObjectSdkMemberType)

}

var ccObjectSdkMemberType = &librarySdkMemberType{
 SdkMemberTypeBase: android.SdkMemberTypeBase{
  PropertyName: "native_objects",
  SupportsSdk:  true,
 },
 prebuiltModuleType: "cc_prebuilt_object",
}

type objectLinker struct {
 *baseLinker
 Properties ObjectLinkerProperties

 // Location of the object in the sysroot. Empty if the object is not
 // included in the NDK.
 ndkSysrootPath android.Path
}

type ObjectLinkerProperties struct {
 // list of static library modules that should only provide headers for this module.
 Static_libs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"`

 // list of shared library modules should only provide headers for this module.
 Shared_libs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"`

 // list of modules that should only provide headers for this module.
 Header_libs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"`

 // list of default libraries that will provide headers for this module.  If unset, generally
 // defaults to libc, libm, and libdl.  Set to [] to prevent using headers from the defaults.
 System_shared_libs []string `android:"arch_variant"`

 // names of other cc_object modules to link into this module using partial linking
 Objs []string `android:"arch_variant"`

 // if set, add an extra objcopy --prefix-symbols= step
 Prefix_symbols *string

 // if set, the path to a linker script to pass to ld -r when combining multiple object files.
 Linker_script *string `android:"path,arch_variant"`

 // Indicates that this module is a CRT object. CRT objects will be split
 // into a variant per-API level between min_sdk_version and current.
 Crt *bool

 // Indicates that this module should not be included in the NDK sysroot.
 // Only applies to CRT objects. Defaults to false.
 Exclude_from_ndk_sysroot *bool
}

func newObject(hod android.HostOrDeviceSupported) *Module {
 module := newBaseModule(hod, android.MultilibBoth)
 module.sanitize = &sanitize{}
 module.stl = &stl{}
 module.lfi = &Lfi{}
 return module
}

// cc_object runs the compiler without running the linker. It is rarely
// necessary, but sometimes used to generate .s files from .c files to use as
// input to a cc_genrule module.
func ObjectFactory() android.Module {
 module := newObject(android.HostAndDeviceSupported)
 module.linker = &objectLinker{
  baseLinker: NewBaseLinker(module.sanitize),
 }
 module.compiler = NewBaseCompiler()

 // Clang's address-significance tables are incompatible with ld -r.
 module.compiler.appendCflags([]string{"-fno-addrsig"})

 module.sdkMemberTypes = []android.SdkMemberType{ccObjectSdkMemberType}

 return module.Init()
}

func (object *objectLinker) linkerProps() []interface{} {
 return []interface{}{&object.Properties}
}

func (*objectLinker) linkerInit(ctx BaseModuleContext) {}

func (object *objectLinker) linkerDeps(ctx DepsContext, deps Deps) Deps {
 deps.HeaderLibs = append(deps.HeaderLibs, object.Properties.Header_libs.GetOrDefault(ctx, nil)...)
 deps.SharedLibs = append(deps.SharedLibs, object.Properties.Shared_libs.GetOrDefault(ctx, nil)...)
 deps.StaticLibs = append(deps.StaticLibs, object.Properties.Static_libs.GetOrDefault(ctx, nil)...)
 deps.ObjFiles = append(deps.ObjFiles, object.Properties.Objs...)

 deps.SystemSharedLibs = object.Properties.System_shared_libs
 if deps.SystemSharedLibs == nil {
  // Provide a default set of shared libraries if system_shared_libs is unspecified.
  // Note: If an empty list [] is specified, it implies that the module declines the
  // default shared libraries.
  deps.SystemSharedLibs = append(deps.SystemSharedLibs, ctx.toolchain().DefaultSharedLibraries()...)
 }
 deps.LateSharedLibs = append(deps.LateSharedLibs, deps.SystemSharedLibs...)
 return deps
}

func (object *objectLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
 toolchainLdFlags := ctx.toolchain().ToolchainLdflags()
 flags.Global.LdFlags = append(flags.Global.LdFlags, toolchainLdFlags.Flags)
 flags.LdFlagsDeps = append(flags.LdFlagsDeps, toolchainLdFlags.Deps...)

 if lds := android.OptionalPathForModuleSrc(ctx, object.Properties.Linker_script); lds.Valid() {
  flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-T,"+lds.String())
  flags.LdFlagsDeps = append(flags.LdFlagsDeps, lds.Path())
 }
 return flags
}

func (object *objectLinker) link(ctx ModuleContext,
 flags Flags, deps PathDeps, objs Objects) android.Path {

 objs = objs.Append(deps.Objs)

 var output android.WritablePath
 builderFlags := flagsToBuilderFlags(flags)
 outputName := ctx.ModuleName()
 if !strings.HasSuffix(outputName, objectExtension) {
  outputName += objectExtension
 }

 // isForPlatform is terribly named and actually means isNotApex.
 if Bool(object.Properties.Crt) &&
  !Bool(object.Properties.Exclude_from_ndk_sysroot) && ctx.useSdk() &&
  ctx.isSdkVariant() && CtxIsForPlatform(ctx) {

  output = getVersionedLibraryInstallPath(ctx,
   nativeApiLevelOrPanic(ctx, ctx.sdkVersion())).Join(ctx, outputName)
  object.ndkSysrootPath = output
 } else {
  output = android.PathForModuleOut(ctx, outputName)
 }

 outputFile := output

 if len(objs.objFiles) == 1 && String(object.Properties.Linker_script) == "" {
  if String(object.Properties.Prefix_symbols) != "" {
   transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), objs.objFiles[0],
    builderFlags, output)
  } else {
   ctx.Build(pctx, android.BuildParams{
    Rule:   android.CpRule,
    Input:  objs.objFiles[0],
    Output: output,
   })
  }
 } else {
  outputAddrSig := android.PathForModuleOut(ctx, "addrsig", outputName)

  if String(object.Properties.Prefix_symbols) != "" {
   input := android.PathForModuleOut(ctx, "unprefixed", outputName)
   transformBinaryPrefixSymbols(ctx, String(object.Properties.Prefix_symbols), input,
    builderFlags, output)
   output = input
  }

  transformObjsToObj(ctx, objs.objFiles, builderFlags, outputAddrSig, flags.LdFlagsDeps)

  // ld -r reorders symbols and invalidates the .llvm_addrsig section, which then causes warnings
  // if the resulting object is used with ld --icf=safe.  Strip the .llvm_addrsig section to
  // prevent the warnings.
  transformObjectNoAddrSig(ctx, outputAddrSig, output)
 }

 ctx.CheckbuildFile(outputFile)
 return outputFile
}

func (object *objectLinker) linkerSpecifiedDeps(ctx android.ConfigurableEvaluatorContext, module *Module, specifiedDeps specifiedDeps) specifiedDeps {
 eval := module.ConfigurableEvaluator(ctx)
 specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, object.Properties.Shared_libs.GetOrDefault(eval, nil)...)

 // Must distinguish nil and [] in system_shared_libs - ensure that [] in
 // either input list doesn't come out as nil.
 if specifiedDeps.systemSharedLibs == nil {
  specifiedDeps.systemSharedLibs = object.Properties.System_shared_libs
 } else {
  specifiedDeps.systemSharedLibs = append(specifiedDeps.systemSharedLibs, object.Properties.System_shared_libs...)
 }

 return specifiedDeps
}

func (object *objectLinker) unstrippedOutputFilePath() android.Path {
 return nil
}

func (object *objectLinker) strippedAllOutputFilePath() android.Path {
 return nil
}

func (object *objectLinker) nativeCoverage() bool {
 return true
}

func (object *objectLinker) coverageOutputFilePath() android.OptionalPath {
 return android.OptionalPath{}
}

func (object *objectLinker) object() bool {
 return true
}

func (object *objectLinker) isCrt() bool {
 return Bool(object.Properties.Crt)
}

func (object *objectLinker) defaultDistFiles() []android.Path {
 return nil
}

func (object *objectLinker) moduleInfoJSON(ctx ModuleContext, moduleInfoJSON *android.ModuleInfoJSON) {
 object.baseLinker.moduleInfoJSON(ctx, moduleInfoJSON)
 moduleInfoJSON.Class = []string{"STATIC_LIBRARIES"}
}

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.