Differentiate between cc library and binary
am: a0843f6a6f
Change-Id: Ice0841306ddc758f815804d0d243b112b6d8a941
This commit is contained in:
3
cc/cc.go
3
cc/cc.go
@@ -417,6 +417,9 @@ type Module struct {
|
|||||||
hod android.HostOrDeviceSupported
|
hod android.HostOrDeviceSupported
|
||||||
multilib android.Multilib
|
multilib android.Multilib
|
||||||
|
|
||||||
|
// Allowable SdkMemberTypes of this module type.
|
||||||
|
sdkMemberTypes []android.SdkMemberType
|
||||||
|
|
||||||
// delegates, initialize before calling Init
|
// delegates, initialize before calling Init
|
||||||
features []feature
|
features []feature
|
||||||
compiler compiler
|
compiler compiler
|
||||||
|
@@ -192,6 +192,11 @@ func RegisterLibraryBuildComponents(ctx android.RegistrationContext) {
|
|||||||
// host.
|
// host.
|
||||||
func LibraryFactory() android.Module {
|
func LibraryFactory() android.Module {
|
||||||
module, _ := NewLibrary(android.HostAndDeviceSupported)
|
module, _ := NewLibrary(android.HostAndDeviceSupported)
|
||||||
|
// Can be used as both a static and a shared library.
|
||||||
|
module.sdkMemberTypes = []android.SdkMemberType{
|
||||||
|
sharedLibrarySdkMemberType,
|
||||||
|
staticLibrarySdkMemberType,
|
||||||
|
}
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,6 +204,7 @@ func LibraryFactory() android.Module {
|
|||||||
func LibraryStaticFactory() android.Module {
|
func LibraryStaticFactory() android.Module {
|
||||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||||
library.BuildOnlyStatic()
|
library.BuildOnlyStatic()
|
||||||
|
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,6 +212,7 @@ func LibraryStaticFactory() android.Module {
|
|||||||
func LibrarySharedFactory() android.Module {
|
func LibrarySharedFactory() android.Module {
|
||||||
module, library := NewLibrary(android.HostAndDeviceSupported)
|
module, library := NewLibrary(android.HostAndDeviceSupported)
|
||||||
library.BuildOnlyShared()
|
library.BuildOnlyShared()
|
||||||
|
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,6 +221,7 @@ func LibrarySharedFactory() android.Module {
|
|||||||
func LibraryHostStaticFactory() android.Module {
|
func LibraryHostStaticFactory() android.Module {
|
||||||
module, library := NewLibrary(android.HostSupported)
|
module, library := NewLibrary(android.HostSupported)
|
||||||
library.BuildOnlyStatic()
|
library.BuildOnlyStatic()
|
||||||
|
module.sdkMemberTypes = []android.SdkMemberType{staticLibrarySdkMemberType}
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,6 +229,7 @@ func LibraryHostStaticFactory() android.Module {
|
|||||||
func LibraryHostSharedFactory() android.Module {
|
func LibraryHostSharedFactory() android.Module {
|
||||||
module, library := NewLibrary(android.HostSupported)
|
module, library := NewLibrary(android.HostSupported)
|
||||||
library.BuildOnlyShared()
|
library.BuildOnlyShared()
|
||||||
|
module.sdkMemberTypes = []android.SdkMemberType{sharedLibrarySdkMemberType}
|
||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,23 +24,26 @@ import (
|
|||||||
|
|
||||||
// This file contains support for using cc library modules within an sdk.
|
// This file contains support for using cc library modules within an sdk.
|
||||||
|
|
||||||
func init() {
|
var sharedLibrarySdkMemberType = &librarySdkMemberType{
|
||||||
// Register sdk member types.
|
|
||||||
android.RegisterSdkMemberType(&librarySdkMemberType{
|
|
||||||
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "native_shared_libs",
|
PropertyName: "native_shared_libs",
|
||||||
},
|
},
|
||||||
prebuiltModuleType: "cc_prebuilt_library_shared",
|
prebuiltModuleType: "cc_prebuilt_library_shared",
|
||||||
linkTypes: []string{"shared"},
|
linkTypes: []string{"shared"},
|
||||||
})
|
}
|
||||||
|
|
||||||
android.RegisterSdkMemberType(&librarySdkMemberType{
|
var staticLibrarySdkMemberType = &librarySdkMemberType{
|
||||||
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
SdkMemberTypeBase: android.SdkMemberTypeBase{
|
||||||
PropertyName: "native_static_libs",
|
PropertyName: "native_static_libs",
|
||||||
},
|
},
|
||||||
prebuiltModuleType: "cc_prebuilt_library_static",
|
prebuiltModuleType: "cc_prebuilt_library_static",
|
||||||
linkTypes: []string{"static"},
|
linkTypes: []string{"static"},
|
||||||
})
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// Register sdk member types.
|
||||||
|
android.RegisterSdkMemberType(sharedLibrarySdkMemberType)
|
||||||
|
android.RegisterSdkMemberType(staticLibrarySdkMemberType)
|
||||||
}
|
}
|
||||||
|
|
||||||
type librarySdkMemberType struct {
|
type librarySdkMemberType struct {
|
||||||
@@ -72,8 +75,16 @@ func (mt *librarySdkMemberType) AddDependencies(mctx android.BottomUpMutatorCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (mt *librarySdkMemberType) IsInstance(module android.Module) bool {
|
func (mt *librarySdkMemberType) IsInstance(module android.Module) bool {
|
||||||
_, ok := module.(*Module)
|
// Check the module to see if it can be used with this module type.
|
||||||
return ok
|
if m, ok := module.(*Module); ok {
|
||||||
|
for _, allowableMemberType := range m.sdkMemberTypes {
|
||||||
|
if allowableMemberType == mt {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy exported header files and stub *.so files
|
// copy exported header files and stub *.so files
|
||||||
|
@@ -73,6 +73,10 @@ func TestBasicSdkWithCc(t *testing.T) {
|
|||||||
native_shared_libs: ["sdkmember"],
|
native_shared_libs: ["sdkmember"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "sdkmember",
|
||||||
|
}
|
||||||
|
|
||||||
sdk_snapshot {
|
sdk_snapshot {
|
||||||
name: "mysdk@1",
|
name: "mysdk@1",
|
||||||
native_shared_libs: ["sdkmember_mysdk_1"],
|
native_shared_libs: ["sdkmember_mysdk_1"],
|
||||||
@@ -143,6 +147,66 @@ func TestBasicSdkWithCc(t *testing.T) {
|
|||||||
ensureListContains(t, pathsToStrings(cpplibForMyApex2.Rule("ld").Implicits), sdkMemberV2.String())
|
ensureListContains(t, pathsToStrings(cpplibForMyApex2.Rule("ld").Implicits), sdkMemberV2.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure the sdk can use host specific cc libraries static/shared and both.
|
||||||
|
func TestHostSdkWithCc(t *testing.T) {
|
||||||
|
testSdkWithCc(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
device_supported: false,
|
||||||
|
host_supported: true,
|
||||||
|
native_shared_libs: ["sdkshared"],
|
||||||
|
native_static_libs: ["sdkstatic"],
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_host_shared {
|
||||||
|
name: "sdkshared",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_host_static {
|
||||||
|
name: "sdkstatic",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the sdk can use cc libraries static/shared and both.
|
||||||
|
func TestSdkWithCc(t *testing.T) {
|
||||||
|
testSdkWithCc(t, `
|
||||||
|
sdk {
|
||||||
|
name: "mysdk",
|
||||||
|
native_shared_libs: ["sdkshared", "sdkboth1"],
|
||||||
|
native_static_libs: ["sdkstatic", "sdkboth2"],
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "sdkshared",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_static {
|
||||||
|
name: "sdkstatic",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "sdkboth1",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library {
|
||||||
|
name: "sdkboth2",
|
||||||
|
system_shared_libs: [],
|
||||||
|
stl: "none",
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
func TestSnapshotWithCcDuplicateHeaders(t *testing.T) {
|
func TestSnapshotWithCcDuplicateHeaders(t *testing.T) {
|
||||||
result := testSdkWithCc(t, `
|
result := testSdkWithCc(t, `
|
||||||
sdk {
|
sdk {
|
||||||
|
Reference in New Issue
Block a user