2020-02-21 18:28:43 +08:00
|
|
|
// 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 cc
|
|
|
|
|
2021-02-15 19:04:32 +08:00
|
|
|
import (
|
|
|
|
"android/soong/android"
|
|
|
|
"android/soong/bazel"
|
|
|
|
)
|
2020-02-21 18:28:43 +08:00
|
|
|
|
|
|
|
func init() {
|
|
|
|
RegisterLibraryHeadersBuildComponents(android.InitRegistrationContext)
|
2020-02-22 00:29:57 +08:00
|
|
|
|
|
|
|
// Register sdk member types.
|
|
|
|
android.RegisterSdkMemberType(headersLibrarySdkMemberType)
|
2021-02-15 19:04:32 +08:00
|
|
|
|
|
|
|
android.RegisterBp2BuildMutator("cc_library_headers", CcLibraryHeadersBp2Build)
|
2020-02-22 00:29:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
var headersLibrarySdkMemberType = &librarySdkMemberType{
|
|
|
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
2020-07-11 11:52:24 +08:00
|
|
|
PropertyName: "native_header_libs",
|
|
|
|
SupportsSdk: true,
|
|
|
|
HostOsDependent: true,
|
2020-02-22 00:29:57 +08:00
|
|
|
},
|
|
|
|
prebuiltModuleType: "cc_prebuilt_library_headers",
|
Add SDK member support for cc_object.
Test: m nothing
Test: Add
sdk {
name: "runtime-module-sdk",
native_shared_libs: [
"libc",
"libdl",
"libm",
"ld-android",
],
native_objects: [
"crtbegin_dynamic",
"crtbegin_static",
"crtend_android",
],
}
to bionic/apex/Android.bp. Then:
build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk
Take the generated runtime-module-sdk-current.zip and unzip into a
master-art tree without bionic/, edit the generated Android.bp to
extend cc_prebuilt_* modules with:
nocrt: true,
stl: "none",
system_shared_libs: [],
apex_available: ["//apex_available:anyapex"],
recovery_available: true,
vendor_available: true,
ramdisk_available: true,
Then "m com.android.art.debug". This passes Soong but fails in the
build step because more members are required.
Bug: 148934017
Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-11 06:37:59 +08:00
|
|
|
noOutputFiles: true,
|
2020-02-21 18:28:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func RegisterLibraryHeadersBuildComponents(ctx android.RegistrationContext) {
|
|
|
|
ctx.RegisterModuleType("cc_library_headers", LibraryHeaderFactory)
|
2020-02-21 18:57:00 +08:00
|
|
|
ctx.RegisterModuleType("cc_prebuilt_library_headers", prebuiltLibraryHeaderFactory)
|
2020-02-21 18:28:43 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// cc_library_headers contains a set of c/c++ headers which are imported by
|
|
|
|
// other soong cc modules using the header_libs property. For best practices,
|
|
|
|
// use export_include_dirs property or LOCAL_EXPORT_C_INCLUDE_DIRS for
|
|
|
|
// Make.
|
|
|
|
func LibraryHeaderFactory() android.Module {
|
|
|
|
module, library := NewLibrary(android.HostAndDeviceSupported)
|
|
|
|
library.HeaderOnly()
|
2020-02-22 00:29:57 +08:00
|
|
|
module.sdkMemberTypes = []android.SdkMemberType{headersLibrarySdkMemberType}
|
2020-02-21 18:28:43 +08:00
|
|
|
return module.Init()
|
|
|
|
}
|
2020-02-21 18:57:00 +08:00
|
|
|
|
|
|
|
// cc_prebuilt_library_headers is a prebuilt version of cc_library_headers
|
|
|
|
func prebuiltLibraryHeaderFactory() android.Module {
|
|
|
|
module, library := NewPrebuiltLibrary(android.HostAndDeviceSupported)
|
|
|
|
library.HeaderOnly()
|
|
|
|
return module.Init()
|
|
|
|
}
|
2021-02-15 19:04:32 +08:00
|
|
|
|
|
|
|
type bazelCcLibraryHeadersAttributes struct {
|
2021-04-05 18:35:13 +08:00
|
|
|
Copts bazel.StringListAttribute
|
2021-03-15 18:02:43 +08:00
|
|
|
Hdrs bazel.LabelListAttribute
|
|
|
|
Includes bazel.LabelListAttribute
|
|
|
|
Deps bazel.LabelListAttribute
|
2021-02-15 19:04:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
type bazelCcLibraryHeaders struct {
|
|
|
|
android.BazelTargetModuleBase
|
|
|
|
bazelCcLibraryHeadersAttributes
|
|
|
|
}
|
|
|
|
|
|
|
|
func BazelCcLibraryHeadersFactory() android.Module {
|
|
|
|
module := &bazelCcLibraryHeaders{}
|
|
|
|
module.AddProperties(&module.bazelCcLibraryHeadersAttributes)
|
|
|
|
android.InitBazelTargetModule(module)
|
|
|
|
return module
|
|
|
|
}
|
|
|
|
|
|
|
|
func CcLibraryHeadersBp2Build(ctx android.TopDownMutatorContext) {
|
|
|
|
module, ok := ctx.Module().(*Module)
|
|
|
|
if !ok {
|
|
|
|
// Not a cc module
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-03-10 15:05:59 +08:00
|
|
|
if !module.ConvertWithBp2build(ctx) {
|
2021-02-18 16:21:34 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-03-18 17:16:10 +08:00
|
|
|
if ctx.ModuleType() != "cc_library_headers" {
|
2021-02-15 19:04:32 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
Add os/target configurable selects for label list attributes.
This CL is pretty large, so I recommend starting with reading the newly
added tests for the expected behavior.
This change works in conjunction with the linked CLs in the Gerrit topic.
Those CLs add support for new platform() definitions for OS targets
specified in Soong's arch.go, which are configurable through
Android.bp's `target {}` property. It works similary to previous CLs
adding support for the `arch {}` property.
These configurable props are keyed by the OS: android, linux_bionic,
windows, and so on. They map to `select` statements in label list
attributes, which this CL enables for cc_library_headers' header_libs
and export_header_lib_headers props.
This enables //bionic/libc:libc_headers to be generated correctly, from:
cc_library_headers {
name: "libc_headers",
target: {
android: {
header_libs: ["libc_headers_arch"],
export_header_lib_headers: ["libc_headers_arch"],
},
linux_bionic: {
header_libs: ["libc_headers_arch"],
export_header_lib_headers: ["libc_headers_arch"],
},
},
// omitted props
}
to:
cc_library_headers(
name = "libc_headers",
deps = [] + select({
"//build/bazel/platforms/os:android": [
":libc_headers_arch",
],
"//build/bazel/platforms/os:linux_bionic": [
":libc_headers_arch",
],
"//conditions:default": [],
}),
)
Test: TH
Test: Verify generated //bionic/libc:libc_headers
Fixes: 183597786
Change-Id: I01016cc2cc9a71449f02300d747f01decebf3f6e
2021-03-24 14:18:33 +08:00
|
|
|
exportedIncludesLabels, exportedIncludesHeadersLabels := bp2BuildParseExportedIncludes(ctx, module)
|
2021-03-18 17:16:10 +08:00
|
|
|
|
Add os/target configurable selects for label list attributes.
This CL is pretty large, so I recommend starting with reading the newly
added tests for the expected behavior.
This change works in conjunction with the linked CLs in the Gerrit topic.
Those CLs add support for new platform() definitions for OS targets
specified in Soong's arch.go, which are configurable through
Android.bp's `target {}` property. It works similary to previous CLs
adding support for the `arch {}` property.
These configurable props are keyed by the OS: android, linux_bionic,
windows, and so on. They map to `select` statements in label list
attributes, which this CL enables for cc_library_headers' header_libs
and export_header_lib_headers props.
This enables //bionic/libc:libc_headers to be generated correctly, from:
cc_library_headers {
name: "libc_headers",
target: {
android: {
header_libs: ["libc_headers_arch"],
export_header_lib_headers: ["libc_headers_arch"],
},
linux_bionic: {
header_libs: ["libc_headers_arch"],
export_header_lib_headers: ["libc_headers_arch"],
},
},
// omitted props
}
to:
cc_library_headers(
name = "libc_headers",
deps = [] + select({
"//build/bazel/platforms/os:android": [
":libc_headers_arch",
],
"//build/bazel/platforms/os:linux_bionic": [
":libc_headers_arch",
],
"//conditions:default": [],
}),
)
Test: TH
Test: Verify generated //bionic/libc:libc_headers
Fixes: 183597786
Change-Id: I01016cc2cc9a71449f02300d747f01decebf3f6e
2021-03-24 14:18:33 +08:00
|
|
|
headerLibsLabels := bp2BuildParseHeaderLibs(ctx, module)
|
2021-02-15 19:04:32 +08:00
|
|
|
|
|
|
|
attrs := &bazelCcLibraryHeadersAttributes{
|
2021-04-05 18:35:13 +08:00
|
|
|
Copts: bp2BuildParseCflags(ctx, module),
|
2021-03-25 17:06:03 +08:00
|
|
|
Includes: exportedIncludesLabels,
|
|
|
|
Hdrs: exportedIncludesHeadersLabels,
|
|
|
|
Deps: headerLibsLabels,
|
2021-02-15 19:04:32 +08:00
|
|
|
}
|
|
|
|
|
2021-02-20 00:06:17 +08:00
|
|
|
props := bazel.BazelTargetModuleProperties{
|
|
|
|
Rule_class: "cc_library_headers",
|
|
|
|
Bzl_load_location: "//build/bazel/rules:cc_library_headers.bzl",
|
|
|
|
}
|
2021-02-15 19:04:32 +08:00
|
|
|
|
2021-02-20 00:06:17 +08:00
|
|
|
ctx.CreateBazelTargetModule(BazelCcLibraryHeadersFactory, module.Name(), props, attrs)
|
2021-02-15 19:04:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func (m *bazelCcLibraryHeaders) Name() string {
|
|
|
|
return m.BaseModuleName()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *bazelCcLibraryHeaders) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
|