diff options
Diffstat (limited to 'cc')
| -rw-r--r-- | cc/bp2build.go | 85 | ||||
| -rw-r--r-- | cc/builder.go | 9 | ||||
| -rw-r--r-- | cc/compiler.go | 13 | ||||
| -rw-r--r-- | cc/config/vndk.go | 2 | ||||
| -rw-r--r-- | cc/library.go | 14 | ||||
| -rw-r--r-- | cc/ndk_library.go | 2 | ||||
| -rw-r--r-- | cc/test.go | 3 |
7 files changed, 101 insertions, 27 deletions
diff --git a/cc/bp2build.go b/cc/bp2build.go index 67ea70e2c..e48f757dc 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -20,6 +20,7 @@ import ( "android/soong/android" "android/soong/bazel" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" ) @@ -136,10 +137,10 @@ func bp2buildParseStaticOrSharedProps(ctx android.TopDownMutatorContext, module setAttrs := func(axis bazel.ConfigurationAxis, config string, props StaticOrSharedProperties) { attrs.Copts.SetSelectValue(axis, config, props.Cflags) attrs.Srcs.SetSelectValue(axis, config, android.BazelLabelForModuleSrc(ctx, props.Srcs)) - attrs.Static_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Static_libs)) - attrs.Dynamic_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.Shared_libs)) - attrs.Whole_archive_deps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDeps(ctx, props.Whole_static_libs)) - attrs.System_dynamic_deps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, props.System_shared_libs)) + attrs.Static_deps.SetSelectValue(axis, config, bazelLabelForStaticDeps(ctx, props.Static_libs)) + attrs.Dynamic_deps.SetSelectValue(axis, config, bazelLabelForSharedDeps(ctx, props.Shared_libs)) + attrs.Whole_archive_deps.SetSelectValue(axis, config, bazelLabelForWholeDeps(ctx, props.Whole_static_libs)) + attrs.System_dynamic_deps.SetSelectValue(axis, config, bazelLabelForSharedDeps(ctx, props.System_shared_libs)) } // system_dynamic_deps distinguishes between nil/empty list behavior: // nil -> use default values @@ -388,9 +389,9 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module) // Excludes to parallel Soong: // https://cs.android.com/android/platform/superproject/+/master:build/soong/cc/linker.go;l=247-249;drc=088b53577dde6e40085ffd737a1ae96ad82fc4b0 staticLibs := android.FirstUniqueStrings(baseLinkerProps.Static_libs) - staticDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs)) + staticDeps.SetSelectValue(axis, config, bazelLabelForStaticDepsExcludes(ctx, staticLibs, baseLinkerProps.Exclude_static_libs)) wholeArchiveLibs := android.FirstUniqueStrings(baseLinkerProps.Whole_static_libs) - wholeArchiveDeps.SetSelectValue(axis, config, android.BazelLabelForModuleWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs)) + wholeArchiveDeps.SetSelectValue(axis, config, bazelLabelForWholeDepsExcludes(ctx, wholeArchiveLibs, baseLinkerProps.Exclude_static_libs)) systemSharedLibs := baseLinkerProps.System_shared_libs // systemSharedLibs distinguishes between nil/empty list behavior: @@ -399,15 +400,15 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module) if len(systemSharedLibs) > 0 { systemSharedLibs = android.FirstUniqueStrings(systemSharedLibs) } - systemSharedDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, systemSharedLibs)) + systemSharedDeps.SetSelectValue(axis, config, bazelLabelForSharedDeps(ctx, systemSharedLibs)) sharedLibs := android.FirstUniqueStrings(baseLinkerProps.Shared_libs) - dynamicDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs)) + dynamicDeps.SetSelectValue(axis, config, bazelLabelForSharedDepsExcludes(ctx, sharedLibs, baseLinkerProps.Exclude_shared_libs)) headerLibs := android.FirstUniqueStrings(baseLinkerProps.Header_libs) - headerDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, headerLibs)) + headerDeps.SetSelectValue(axis, config, bazelLabelForHeaderDeps(ctx, headerLibs)) exportedLibs := android.FirstUniqueStrings(baseLinkerProps.Export_header_lib_headers) - exportedDeps.SetSelectValue(axis, config, android.BazelLabelForModuleDeps(ctx, exportedLibs)) + exportedDeps.SetSelectValue(axis, config, bazelLabelForHeaderDeps(ctx, exportedLibs)) linkopts.SetSelectValue(axis, config, getBp2BuildLinkerFlags(baseLinkerProps)) if baseLinkerProps.Version_script != nil { @@ -424,14 +425,14 @@ func bp2BuildParseLinkerProps(ctx android.TopDownMutatorContext, module *Module) // reference to the bazel attribute that should be set for the given product variable config attribute *bazel.LabelListAttribute - depResolutionFunc func(ctx android.BazelConversionPathContext, modules, excludes []string) bazel.LabelList + depResolutionFunc func(ctx android.TopDownMutatorContext, modules, excludes []string) bazel.LabelList } productVarToDepFields := map[string]productVarDep{ // product variables do not support exclude_shared_libs - "Shared_libs": productVarDep{attribute: &dynamicDeps, depResolutionFunc: android.BazelLabelForModuleDepsExcludes}, - "Static_libs": productVarDep{"Exclude_static_libs", &staticDeps, android.BazelLabelForModuleDepsExcludes}, - "Whole_static_libs": productVarDep{"Exclude_static_libs", &wholeArchiveDeps, android.BazelLabelForModuleWholeDepsExcludes}, + "Shared_libs": productVarDep{attribute: &dynamicDeps, depResolutionFunc: bazelLabelForSharedDepsExcludes}, + "Static_libs": productVarDep{"Exclude_static_libs", &staticDeps, bazelLabelForStaticDepsExcludes}, + "Whole_static_libs": productVarDep{"Exclude_static_libs", &wholeArchiveDeps, bazelLabelForWholeDepsExcludes}, } productVariableProps := android.ProductVariableProperties(ctx) @@ -559,3 +560,59 @@ func bp2BuildParseExportedIncludesHelper(ctx android.TopDownMutatorContext, modu return exported } + +func bazelLabelForStaticModule(ctx android.TopDownMutatorContext, m blueprint.Module) string { + label := android.BazelModuleLabel(ctx, m) + if aModule, ok := m.(android.Module); ok { + if ctx.OtherModuleType(aModule) == "cc_library" && !android.GenerateCcLibraryStaticOnly(m.Name()) { + label += "_bp2build_cc_library_static" + } + } + return label +} + +func bazelLabelForSharedModule(ctx android.TopDownMutatorContext, m blueprint.Module) string { + // cc_library, at it's root name, propagates the shared library, which depends on the static + // library. + return android.BazelModuleLabel(ctx, m) +} + +func bazelLabelForStaticWholeModuleDeps(ctx android.TopDownMutatorContext, m blueprint.Module) string { + label := bazelLabelForStaticModule(ctx, m) + if aModule, ok := m.(android.Module); ok { + if android.IsModulePrebuilt(aModule) { + label += "_alwayslink" + } + } + return label +} + +func bazelLabelForWholeDeps(ctx android.TopDownMutatorContext, modules []string) bazel.LabelList { + return android.BazelLabelForModuleDepsWithFn(ctx, modules, bazelLabelForStaticWholeModuleDeps) +} + +func bazelLabelForWholeDepsExcludes(ctx android.TopDownMutatorContext, modules, excludes []string) bazel.LabelList { + return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForStaticWholeModuleDeps) +} + +func bazelLabelForStaticDepsExcludes(ctx android.TopDownMutatorContext, modules, excludes []string) bazel.LabelList { + return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForStaticModule) +} + +func bazelLabelForStaticDeps(ctx android.TopDownMutatorContext, modules []string) bazel.LabelList { + return android.BazelLabelForModuleDepsWithFn(ctx, modules, bazelLabelForStaticModule) +} + +func bazelLabelForSharedDeps(ctx android.TopDownMutatorContext, modules []string) bazel.LabelList { + return android.BazelLabelForModuleDepsWithFn(ctx, modules, bazelLabelForSharedModule) +} + +func bazelLabelForHeaderDeps(ctx android.TopDownMutatorContext, modules []string) bazel.LabelList { + // This is not elegant, but bp2build's shared library targets only propagate + // their header information as part of the normal C++ provider. + return bazelLabelForSharedDeps(ctx, modules) +} + +func bazelLabelForSharedDepsExcludes(ctx android.TopDownMutatorContext, modules, excludes []string) bazel.LabelList { + return android.BazelLabelForModuleDepsExcludesWithFn(ctx, modules, excludes, bazelLabelForSharedModule) +} diff --git a/cc/builder.go b/cc/builder.go index 4b0a4b65f..b494f7bab 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -454,15 +454,19 @@ func escapeSingleQuotes(s string) string { } // Generate rules for compiling multiple .c, .cpp, or .S files to individual .o files -func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles android.Paths, +func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles, noTidySrcs android.Paths, flags builderFlags, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { // Source files are one-to-one with tidy, coverage, or kythe files, if enabled. objFiles := make(android.Paths, len(srcFiles)) var tidyFiles android.Paths + noTidySrcsMap := make(map[android.Path]bool) var tidyVars string if flags.tidy { tidyFiles = make(android.Paths, 0, len(srcFiles)) + for _, path := range noTidySrcs { + noTidySrcsMap[path] = true + } tidyTimeout := ctx.Config().Getenv("TIDY_TIMEOUT") if len(tidyTimeout) > 0 { tidyVars += "TIDY_TIMEOUT=" + tidyTimeout @@ -673,7 +677,8 @@ func transformSourceToObj(ctx android.ModuleContext, subdir string, srcFiles and kytheFiles = append(kytheFiles, kytheFile) } - if tidy { + // Even with tidy, some src file could be skipped by noTidySrcsMap. + if tidy && !noTidySrcsMap[srcFile] { tidyFile := android.ObjPathWithExt(ctx, subdir, srcFile, "tidy") tidyFiles = append(tidyFiles, tidyFile) diff --git a/cc/compiler.go b/cc/compiler.go index 34d68a1e0..b535e7ff6 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -39,6 +39,9 @@ type BaseCompilerProperties struct { // or filegroup using the syntax ":module". Srcs []string `android:"path,arch_variant"` + // list of source files that should not be compiled with clang-tidy. + Tidy_disabled_srcs []string `android:"path,arch_variant"` + // list of source files that should not be used to build the C/C++ module. // This is most useful in the arch/multilib variants to remove non-common files Exclude_srcs []string `android:"path,arch_variant"` @@ -663,7 +666,9 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD compiler.srcs = srcs // Compile files listed in c.Properties.Srcs into objects - objs := compileObjs(ctx, buildFlags, "", srcs, pathDeps, compiler.cFlagsDeps) + objs := compileObjs(ctx, buildFlags, "", srcs, + android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_disabled_srcs), + pathDeps, compiler.cFlagsDeps) if ctx.Failed() { return Objects{} @@ -673,10 +678,10 @@ func (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathD } // Compile a list of source files into objects a specified subdirectory -func compileObjs(ctx android.ModuleContext, flags builderFlags, - subdir string, srcFiles, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { +func compileObjs(ctx android.ModuleContext, flags builderFlags, subdir string, + srcFiles, noTidySrcs, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { - return transformSourceToObj(ctx, subdir, srcFiles, flags, pathDeps, cFlagsDeps) + return transformSourceToObj(ctx, subdir, srcFiles, noTidySrcs, flags, pathDeps, cFlagsDeps) } // Properties for rust_bindgen related to generating rust bindings. diff --git a/cc/config/vndk.go b/cc/config/vndk.go index 8c678a129..d4fcf7cac 100644 --- a/cc/config/vndk.go +++ b/cc/config/vndk.go @@ -55,6 +55,8 @@ var VndkMustUseVendorVariantList = []string{ "android.hardware.power.stats-unstable-ndk_platform", "android.hardware.radio-V1-ndk", "android.hardware.radio-V1-ndk_platform", + "android.hardware.radio.config-V1-ndk", + "android.hardware.radio.config-V1-ndk_platform", "android.hardware.rebootescrow-ndk_platform", "android.hardware.security.keymint-V1-ndk", "android.hardware.security.keymint-V1-ndk_platform", diff --git a/cc/library.go b/cc/library.go index 703d57fef..8a572f994 100644 --- a/cc/library.go +++ b/cc/library.go @@ -143,6 +143,8 @@ type SharedProperties struct { type StaticOrSharedProperties struct { Srcs []string `android:"path,arch_variant"` + Tidy_disabled_srcs []string `android:"path,arch_variant"` + Sanitized Sanitized `android:"arch_variant"` Cflags []string `android:"arch_variant"` @@ -275,7 +277,7 @@ func CcLibraryBp2Build(ctx android.TopDownMutatorContext) { // For some cc_library modules, their static variants are ready to be // converted, but not their shared variants. For these modules, delegate to // the cc_library_static bp2build converter temporarily instead. - if android.GenerateCcLibraryStaticOnly(ctx) { + if android.GenerateCcLibraryStaticOnly(ctx.Module().Name()) { ccSharedOrStaticBp2BuildMutatorInternal(ctx, m, "cc_library_static") return } @@ -989,12 +991,14 @@ func (library *libraryDecorator) compile(ctx ModuleContext, flags Flags, deps Pa if library.static() { srcs := android.PathsForModuleSrc(ctx, library.StaticProperties.Static.Srcs) - objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceStaticLibrary, - srcs, library.baseCompiler.pathDeps, library.baseCompiler.cFlagsDeps)) + objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceStaticLibrary, srcs, + android.PathsForModuleSrc(ctx, library.StaticProperties.Static.Tidy_disabled_srcs), + library.baseCompiler.pathDeps, library.baseCompiler.cFlagsDeps)) } else if library.shared() { srcs := android.PathsForModuleSrc(ctx, library.SharedProperties.Shared.Srcs) - objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceSharedLibrary, - srcs, library.baseCompiler.pathDeps, library.baseCompiler.cFlagsDeps)) + objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceSharedLibrary, srcs, + android.PathsForModuleSrc(ctx, library.SharedProperties.Shared.Tidy_disabled_srcs), + library.baseCompiler.pathDeps, library.baseCompiler.cFlagsDeps)) } return objs diff --git a/cc/ndk_library.go b/cc/ndk_library.go index 704b03afb..7879a7d98 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -272,7 +272,7 @@ func parseNativeAbiDefinition(ctx ModuleContext, symbolFile string, func compileStubLibrary(ctx ModuleContext, flags Flags, src android.Path) Objects { return compileObjs(ctx, flagsToBuilderFlags(flags), "", - android.Paths{src}, nil, nil) + android.Paths{src}, nil, nil, nil) } func (this *stubDecorator) findImplementationLibrary(ctx ModuleContext) android.Path { diff --git a/cc/test.go b/cc/test.go index 39347844a..047a69e3e 100644 --- a/cc/test.go +++ b/cc/test.go @@ -357,7 +357,8 @@ func (test *testBinary) linkerFlags(ctx ModuleContext, flags Flags) Flags { } func (test *testBinary) install(ctx ModuleContext, file android.Path) { - testInstallBase := "/data/local/tests/unrestricted" + // TODO: (b/167308193) Switch to /data/local/tests/unrestricted as the default install base. + testInstallBase := "/data/local/tmp" if ctx.inVendor() || ctx.useVndk() { testInstallBase = "/data/local/tests/vendor" } |