Add support for host sdk

Adds HostSupported() method to ModuleBase for use by sdk. Adds
host_supported/device_supported to all prebuilt modules and the
sdk snapshot (where necessary).

Adds TestHostSnapshot to verify the behavior is correct.

Bug: 143678475
Test: m nothing
Change-Id: I8b4d097e46d5804f62cb8f651a83069299a3e639
This commit is contained in:
Paul Duffin 2019-11-26 18:04:12 +00:00
parent b645ec8e34
commit e44358fa8f
3 changed files with 212 additions and 0 deletions

View File

@ -778,6 +778,13 @@ func (m *ModuleBase) DeviceSupported() bool {
*m.hostAndDeviceProperties.Device_supported)
}
func (m *ModuleBase) HostSupported() bool {
return m.commonProperties.HostOrDeviceSupported == HostSupported ||
m.commonProperties.HostOrDeviceSupported == HostAndDeviceSupported &&
(m.hostAndDeviceProperties.Host_supported != nil &&
*m.hostAndDeviceProperties.Host_supported)
}
func (m *ModuleBase) Platform() bool {
return !m.DeviceSpecific() && !m.SocSpecific() && !m.ProductSpecific() && !m.SystemExtSpecific()
}

View File

@ -596,6 +596,198 @@ sdk_snapshot {
}
}
func TestHostSnapshot(t *testing.T) {
ctx, config := testSdk(t, `
sdk {
name: "mysdk",
device_supported: false,
host_supported: true,
java_libs: ["myjavalib"],
native_shared_libs: ["mynativelib"],
stubs_sources: ["myjavaapistubs"],
}
java_library {
name: "myjavalib",
device_supported: false,
host_supported: true,
srcs: ["Test.java"],
aidl: {
export_include_dirs: ["aidl"],
},
system_modules: "none",
sdk_version: "none",
compile_dex: true,
}
cc_library_shared {
name: "mynativelib",
device_supported: false,
host_supported: true,
srcs: [
"Test.cpp",
"aidl/foo/bar/Test.aidl",
],
export_include_dirs: ["include"],
aidl: {
export_aidl_headers: true,
},
system_shared_libs: [],
stl: "none",
}
droidstubs {
name: "myjavaapistubs",
device_supported: false,
host_supported: true,
srcs: ["foo/bar/Foo.java"],
system_modules: "none",
sdk_version: "none",
}
`)
sdk := ctx.ModuleForTests("mysdk", "linux_glibc_common").Module().(*sdk)
checkSnapshotAndroidBpContents(t, sdk, `// This is auto-generated. DO NOT EDIT.
java_import {
name: "mysdk_myjavalib@current",
sdk_member_name: "myjavalib",
device_supported: false,
host_supported: true,
jars: ["java/myjavalib.jar"],
}
java_import {
name: "myjavalib",
prefer: false,
device_supported: false,
host_supported: true,
jars: ["java/myjavalib.jar"],
}
prebuilt_stubs_sources {
name: "mysdk_myjavaapistubs@current",
sdk_member_name: "myjavaapistubs",
device_supported: false,
host_supported: true,
srcs: ["java/myjavaapistubs_stubs_sources"],
}
prebuilt_stubs_sources {
name: "myjavaapistubs",
prefer: false,
device_supported: false,
host_supported: true,
srcs: ["java/myjavaapistubs_stubs_sources"],
}
cc_prebuilt_library_shared {
name: "mysdk_mynativelib@current",
sdk_member_name: "mynativelib",
device_supported: false,
host_supported: true,
arch: {
x86_64: {
srcs: ["x86_64/lib/mynativelib.so"],
export_include_dirs: [
"x86_64/include/include",
"x86_64/include_gen/mynativelib",
],
},
x86: {
srcs: ["x86/lib/mynativelib.so"],
export_include_dirs: [
"x86/include/include",
"x86/include_gen/mynativelib",
],
},
},
stl: "none",
system_shared_libs: [],
}
cc_prebuilt_library_shared {
name: "mynativelib",
prefer: false,
device_supported: false,
host_supported: true,
arch: {
x86_64: {
srcs: ["x86_64/lib/mynativelib.so"],
export_include_dirs: [
"x86_64/include/include",
"x86_64/include_gen/mynativelib",
],
},
x86: {
srcs: ["x86/lib/mynativelib.so"],
export_include_dirs: [
"x86/include/include",
"x86/include_gen/mynativelib",
],
},
},
stl: "none",
system_shared_libs: [],
}
sdk_snapshot {
name: "mysdk@current",
device_supported: false,
host_supported: true,
java_libs: ["mysdk_myjavalib@current"],
stubs_sources: ["mysdk_myjavaapistubs@current"],
native_shared_libs: ["mysdk_mynativelib@current"],
}
`)
var copySrcs []string
var copyDests []string
buildParams := sdk.BuildParamsForTests()
var zipBp android.BuildParams
for _, bp := range buildParams {
ruleString := bp.Rule.String()
if ruleString == "android/soong/android.Cp" {
copySrcs = append(copySrcs, bp.Input.String())
copyDests = append(copyDests, bp.Output.Rel()) // rooted at the snapshot root
} else if ruleString == "<local rule>:m.mysdk_linux_glibc_common.snapshot" {
zipBp = bp
}
}
buildDir := config.BuildDir()
ensureListContains(t, copySrcs, "aidl/foo/bar/Test.aidl")
ensureListContains(t, copySrcs, "include/Test.h")
ensureListContains(t, copySrcs, filepath.Join(buildDir, ".intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BnTest.h"))
ensureListContains(t, copySrcs, filepath.Join(buildDir, ".intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/BpTest.h"))
ensureListContains(t, copySrcs, filepath.Join(buildDir, ".intermediates/mynativelib/linux_glibc_x86_64_shared/gen/aidl/aidl/foo/bar/Test.h"))
ensureListContains(t, copySrcs, filepath.Join(buildDir, ".intermediates/myjavalib/linux_glibc_common/javac/myjavalib.jar"))
ensureListContains(t, copySrcs, filepath.Join(buildDir, ".intermediates/mynativelib/linux_glibc_x86_64_shared/mynativelib.so"))
ensureListContains(t, copyDests, "aidl/aidl/foo/bar/Test.aidl")
ensureListContains(t, copyDests, "x86_64/include/include/Test.h")
ensureListContains(t, copyDests, "x86_64/include_gen/mynativelib/aidl/foo/bar/BnTest.h")
ensureListContains(t, copyDests, "x86_64/include_gen/mynativelib/aidl/foo/bar/BpTest.h")
ensureListContains(t, copyDests, "x86_64/include_gen/mynativelib/aidl/foo/bar/Test.h")
ensureListContains(t, copyDests, "java/myjavalib.jar")
ensureListContains(t, copyDests, "x86_64/lib/mynativelib.so")
// Ensure that the droidstubs .srcjar as repackaged into a temporary zip file
// and then merged together with the intermediate snapshot zip.
snapshotCreationInputs := zipBp.Implicits.Strings()
ensureListContains(t, snapshotCreationInputs,
filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/tmp/java/myjavaapistubs_stubs_sources.zip"))
ensureListContains(t, snapshotCreationInputs,
filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.unmerged.zip"))
actual := zipBp.Output.String()
expected := filepath.Join(buildDir, ".intermediates/mysdk/linux_glibc_common/mysdk-current.zip")
if actual != expected {
t.Errorf("Expected snapshot output to be %q but was %q", expected, actual)
}
}
func checkSnapshotAndroidBpContents(t *testing.T, s *sdk, expectedContents string) {
t.Helper()
androidBpContents := strings.NewReplacer("\\n", "\n").Replace(s.GetAndroidBpContentsForTests())

View File

@ -250,6 +250,7 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath {
builder := &snapshotBuilder{
ctx: ctx,
sdk: s,
version: "current",
snapshotDir: snapshotDir.OutputPath,
filesToZip: []android.Path{bp.path},
@ -293,6 +294,7 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext) android.OutputPath {
snapshotName := ctx.ModuleName() + string(android.SdkVersionSeparator) + builder.version
snapshotModule := bpFile.newModule("sdk_snapshot")
snapshotModule.AddProperty("name", snapshotName)
addHostDeviceSupportedProperties(&s.ModuleBase, snapshotModule)
if len(s.properties.Java_libs) > 0 {
snapshotModule.AddProperty("java_libs", builder.versionedSdkMemberNames(s.properties.Java_libs))
}
@ -505,6 +507,7 @@ func (info *nativeLibInfo) generatePrebuiltLibrary(ctx android.ModuleContext, bu
type snapshotBuilder struct {
ctx android.ModuleContext
sdk *sdk
version string
snapshotDir android.OutputPath
bpFile *bpFile
@ -551,12 +554,22 @@ func (s *snapshotBuilder) AddPrebuiltModule(name string, moduleType string) andr
m := s.bpFile.newModule(moduleType)
m.AddProperty("name", name)
addHostDeviceSupportedProperties(&s.sdk.ModuleBase, m)
s.prebuiltModules[name] = m
s.prebuiltOrder = append(s.prebuiltOrder, m)
return m
}
func addHostDeviceSupportedProperties(module *android.ModuleBase, bpModule *bpModule) {
if !module.DeviceSupported() {
bpModule.AddProperty("device_supported", false)
}
if module.HostSupported() {
bpModule.AddProperty("host_supported", true)
}
}
// Get a versioned name appropriate for the SDK snapshot version being taken.
func (s *snapshotBuilder) versionedSdkMemberName(unversionedName string) string {
return versionedSdkMemberName(s.ctx, unversionedName, s.version)