// Copyright 2022 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 func init() { RegisterApiDomainBuildComponents(InitRegistrationContext) } func RegisterApiDomainBuildComponents(ctx RegistrationContext) { ctx.RegisterModuleType("api_domain", ApiDomainFactory) } type ApiSurface int // TODO(b/246656800): Reconcile with android.SdkKind const ( // API surface provided by platform and mainline modules to other mainline modules ModuleLibApi ApiSurface = iota PublicApi // Aka NDK VendorApi // Aka LLNDK ) func (a ApiSurface) String() string { switch a { case ModuleLibApi: return "module-libapi" case PublicApi: return "publicapi" case VendorApi: return "vendorapi" default: return "invalid" } } type apiDomain struct { ModuleBase BazelModuleBase properties apiDomainProperties } type apiDomainProperties struct { // cc library contributions (.h files/.map.txt) of this API domain // This dependency is a no-op in Soong, but the corresponding Bazel target in the api_bp2build workspace // will provide a `CcApiContributionInfo` provider Cc_api_contributions []string // java library contributions (as .txt) of this API domain // This dependency is a no-op in Soong, but the corresponding Bazel target in the api_bp2build workspace // will provide a `JavaApiContributionInfo` provider Java_api_contributions []string } func ApiDomainFactory() Module { m := &apiDomain{} m.AddProperties(&m.properties) InitAndroidArchModule(m, DeviceSupported, MultilibBoth) return m } // Do not create any dependency edges in Soong for now to skip visibility checks for some systemapi libraries. // Currently, all api_domain modules reside in build/orchestrator/apis/Android.bp // However, cc libraries like libsigchain (com.android.art) restrict their visibility to art/* // When the api_domain module types are collocated with their contributions, this dependency edge can be restored func (a *apiDomain) DepsMutator(ctx BottomUpMutatorContext) { } // API domain does not have any builld actions yet func (a *apiDomain) GenerateAndroidBuildActions(ctx ModuleContext) { } const ( apiContributionSuffix = ".contribution" ) // ApiContributionTargetName returns the name of the bp2build target (e.g. cc_api_contribution) of contribution modules (e.g. ndk_library) // A suffix is necessary to prevent a name collision with the base target in the same bp2build bazel package func ApiContributionTargetName(moduleName string) string { return moduleName + apiContributionSuffix }