summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Colin Cross <ccross@android.com> 2021-06-21 16:41:29 -0700
committer Colin Cross <ccross@android.com> 2021-06-25 16:29:51 -0700
commit137d7dafd842f70972c9109cdf557ea3aa0f9ec6 (patch)
tree0ef9a7627ee4e3aeb5a40222a24f933e20d203fc
parent9ecb42dd31d61ca77e622fb0c7fc39cd2677f80c (diff)
Support shared_libs, static_libs and default_shared_libs in cc_object
cc_object files don't link against static or shared libraries, but they can use headers from them. Make cc_object use the default_shared_libs headers, and add support for explicit static and shared library dependencies. Bug: 153662223 Test: go test ./cc/... Change-Id: I9ab160ede06db1b135d217d72770c22f500cfe1b
-rw-r--r--bp2build/cc_object_conversion_test.go9
-rw-r--r--cc/object.go35
-rw-r--r--cc/testing.go1
-rw-r--r--sdk/cc_sdk_test.go3
4 files changed, 48 insertions, 0 deletions
diff --git a/bp2build/cc_object_conversion_test.go b/bp2build/cc_object_conversion_test.go
index 57f75eabb..8ede2267d 100644
--- a/bp2build/cc_object_conversion_test.go
+++ b/bp2build/cc_object_conversion_test.go
@@ -46,6 +46,7 @@ func TestCcObjectSimple(t *testing.T) {
blueprint: `cc_object {
name: "foo",
local_include_dirs: ["include"],
+ default_shared_libs: [],
cflags: [
"-Wno-gcc-compat",
"-Wall",
@@ -83,6 +84,7 @@ func TestCcObjectDefaults(t *testing.T) {
moduleTypeUnderTestBp2BuildMutator: cc.ObjectBp2Build,
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
local_include_dirs: ["include"],
srcs: [
"a/b/*.h",
@@ -135,12 +137,14 @@ func TestCcObjectCcObjetDepsInObjs(t *testing.T) {
},
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
srcs: ["a/b/c.c"],
objs: ["bar"],
}
cc_object {
name: "bar",
+ default_shared_libs: [],
srcs: ["x/y/z.c"],
}
`,
@@ -178,6 +182,7 @@ func TestCcObjectIncludeBuildDirFalse(t *testing.T) {
},
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
srcs: ["a/b/c.c"],
include_build_directory: false,
}
@@ -199,6 +204,7 @@ func TestCcObjectProductVariable(t *testing.T) {
moduleTypeUnderTestBp2BuildMutator: cc.ObjectBp2Build,
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
include_build_directory: false,
product_variables: {
platform_sdk_version: {
@@ -227,6 +233,7 @@ func TestCcObjectCflagsOneArch(t *testing.T) {
moduleTypeUnderTestBp2BuildMutator: cc.ObjectBp2Build,
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
srcs: ["a.cpp"],
arch: {
x86: {
@@ -266,6 +273,7 @@ func TestCcObjectCflagsFourArch(t *testing.T) {
moduleTypeUnderTestBp2BuildMutator: cc.ObjectBp2Build,
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
srcs: ["base.cpp"],
arch: {
x86: {
@@ -321,6 +329,7 @@ func TestCcObjectCflagsMultiOs(t *testing.T) {
moduleTypeUnderTestBp2BuildMutator: cc.ObjectBp2Build,
blueprint: `cc_object {
name: "foo",
+ default_shared_libs: [],
srcs: ["base.cpp"],
target: {
android: {
diff --git a/cc/object.go b/cc/object.go
index 39fc43dca..c0e0a9bcb 100644
--- a/cc/object.go
+++ b/cc/object.go
@@ -67,9 +67,19 @@ func (handler *objectBazelHandler) generateBazelBuildActions(ctx android.ModuleC
}
type ObjectLinkerProperties struct {
+ // list of static library modules that should only provide headers for this module.
+ Static_libs []string `android:"arch_variant,variant_prepend"`
+
+ // list of shared library modules should only provide headers for this module.
+ Shared_libs []string `android:"arch_variant"`
+
// list of modules that should only provide headers for this module.
Header_libs []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.
+ Default_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"`
@@ -198,7 +208,18 @@ func (*objectLinker) linkerInit(ctx BaseModuleContext) {}
func (object *objectLinker) linkerDeps(ctx DepsContext, deps Deps) Deps {
deps.HeaderLibs = append(deps.HeaderLibs, object.Properties.Header_libs...)
+ deps.SharedLibs = append(deps.SharedLibs, object.Properties.Shared_libs...)
+ deps.StaticLibs = append(deps.StaticLibs, object.Properties.Static_libs...)
deps.ObjFiles = append(deps.ObjFiles, object.Properties.Objs...)
+
+ deps.SystemSharedLibs = object.Properties.Default_shared_libs
+ if deps.SystemSharedLibs == nil {
+ // Provide a default set of shared libraries if default_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
}
@@ -247,6 +268,20 @@ func (object *objectLinker) link(ctx ModuleContext,
return outputFile
}
+func (object *objectLinker) linkerSpecifiedDeps(specifiedDeps specifiedDeps) specifiedDeps {
+ specifiedDeps.sharedLibs = append(specifiedDeps.sharedLibs, object.Properties.Shared_libs...)
+
+ // Must distinguish nil and [] in default_shared_libs - ensure that [] in
+ // either input list doesn't come out as nil.
+ if specifiedDeps.defaultSharedLibs == nil {
+ specifiedDeps.defaultSharedLibs = object.Properties.Default_shared_libs
+ } else {
+ specifiedDeps.defaultSharedLibs = append(specifiedDeps.defaultSharedLibs, object.Properties.Default_shared_libs...)
+ }
+
+ return specifiedDeps
+}
+
func (object *objectLinker) unstrippedOutputFilePath() android.Path {
return nil
}
diff --git a/cc/testing.go b/cc/testing.go
index 80cc0ef67..b9d84f6cb 100644
--- a/cc/testing.go
+++ b/cc/testing.go
@@ -367,6 +367,7 @@ func commonDefaultModules() string {
stl: "none",
min_sdk_version: "16",
crt: true,
+ default_shared_libs: [],
apex_available: [
"//apex_available:platform",
"//apex_available:anyapex",
diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go
index 98697dcf4..60fbccf57 100644
--- a/sdk/cc_sdk_test.go
+++ b/sdk/cc_sdk_test.go
@@ -347,6 +347,7 @@ func TestSnapshotWithObject(t *testing.T) {
cc_object {
name: "crtobj",
stl: "none",
+ default_shared_libs: [],
sanitize: {
never: true,
},
@@ -364,6 +365,7 @@ cc_prebuilt_object {
apex_available: ["//apex_available:platform"],
stl: "none",
compile_multilib: "both",
+ default_shared_libs: [],
sanitize: {
never: true,
},
@@ -388,6 +390,7 @@ cc_prebuilt_object {
apex_available: ["//apex_available:platform"],
stl: "none",
compile_multilib: "both",
+ default_shared_libs: [],
sanitize: {
never: true,
},