diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 04:52:40 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-07 04:52:40 +0000 |
commit | 0ac6a7165f80c723f64fa723b12eea7cc7b60326 (patch) | |
tree | 74e45a722ffd775127a136c27e0c2b8659adc7e9 | |
parent | 9a7db6a0e57adc9a50516f91d6960b95adef9f1f (diff) | |
parent | 5ba9115da292a2527e8aeac19cef35d468173f85 (diff) | |
download | hidl-android14-mainline-adservices-release.tar.gz |
Snap for 10453563 from 5ba9115da292a2527e8aeac19cef35d468173f85 to mainline-adservices-releaseaml_ads_341615050aml_ads_341517040aml_ads_341413000aml_ads_341316030aml_ads_341131050aml_ads_341027030aml_ads_340915050android14-mainline-adservices-release
Change-Id: I98d0ba35e9b73ab499d605c616352ce784cc399a
-rw-r--r-- | CompoundType.cpp | 2 | ||||
-rw-r--r-- | Coordinator.cpp | 8 | ||||
-rw-r--r-- | HidlTypeAssertion.cpp | 1 | ||||
-rw-r--r-- | Interface.cpp | 12 | ||||
-rw-r--r-- | OWNERS | 2 | ||||
-rw-r--r-- | build/Android.bp | 4 | ||||
-rw-r--r-- | build/go.mod | 27 | ||||
-rw-r--r-- | build/hidl_interface.go | 279 | ||||
-rw-r--r-- | build/hidl_interface_conversion_test.go | 117 | ||||
-rw-r--r-- | build/hidl_package_root.go | 4 | ||||
-rw-r--r-- | build/properties.go | 7 | ||||
-rw-r--r-- | hidl2aidl/AidlInterface.cpp | 2 | ||||
-rw-r--r-- | hidl2aidl/main.cpp | 11 | ||||
-rw-r--r-- | hidl2aidl/test/Android.bp | 2 | ||||
-rw-r--r-- | test/hidl_test/hidl_test.py | 8 | ||||
-rw-r--r-- | test/hidl_test/hidl_test.xml | 8 | ||||
-rw-r--r-- | test/hidl_test/hidl_test_client.cpp | 44 | ||||
-rw-r--r-- | test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java | 23 | ||||
-rw-r--r-- | test/lazy_test/hidl_lazy_test.cpp | 4 | ||||
-rw-r--r-- | test/vendor/1.0/Android.bp | 3 |
20 files changed, 402 insertions, 166 deletions
diff --git a/CompoundType.cpp b/CompoundType.cpp index aa12c10d..8b26df66 100644 --- a/CompoundType.cpp +++ b/CompoundType.cpp @@ -1751,7 +1751,7 @@ void CompoundType::emitJavaTypeDeclarations(Formatter& out, bool atTopLevel) con } out.unindent(); - out << "};\n\n"; + out << "}\n\n"; } void CompoundType::emitStructReaderWriter( diff --git a/Coordinator.cpp b/Coordinator.cpp index 9c7c13f8..4342d034 100644 --- a/Coordinator.cpp +++ b/Coordinator.cpp @@ -472,8 +472,8 @@ status_t Coordinator::getPackageInterfaceFiles( if ((sb.st_mode & S_IFMT) != S_IFREG) { continue; } - } else if (ent->d_type != DT_REG) { - continue; + } else if (ent->d_type != DT_REG && ent->d_type != DT_LNK) { + continue; } const auto suffix = ".hal"; @@ -1042,6 +1042,10 @@ void Coordinator::parseOptions(int argc, char** argv, const std::string& options // something downstream should handle these cases default: { handleArg(res, optarg); } } + // glibc sets optarg to NULL for options without an argument, but POSIX doesn't + // require it musl libc does not. Reset it here so that the next call to + // handleArg doesn't pass a stale value. + optarg = nullptr; } if (getRootPath().empty()) { diff --git a/HidlTypeAssertion.cpp b/HidlTypeAssertion.cpp index 6e4822ad..c6840547 100644 --- a/HidlTypeAssertion.cpp +++ b/HidlTypeAssertion.cpp @@ -18,6 +18,7 @@ #include <hidl-util/Formatter.h> +#include <algorithm> #include <string> #include <vector> diff --git a/Interface.cpp b/Interface.cpp index 9be88e9f..e9950d22 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -307,9 +307,15 @@ bool Interface::fillHashChainMethod(Method *method) const { } } }, /* cppImpl */ { { IMPL_INTERFACE, [this, digestType, chainType](auto &out) { std::vector<const Interface *> chain = typeChain(); - out << "return new " - << chainType->getJavaType(false /* forInitializer */) - << "(java.util.Arrays.asList(\n"; + out << "return new " << chainType->getJavaType(false /* forInitializer */); + if (chain.size() == 1) { + // https://errorprone.info/bugpattern/ArraysAsListPrimitiveArray + // To avoid an ArraysAsListPrimitiveArray errorprone error, use + // singletonList when there's only 1 element in the chain. + out << "(java.util.Collections.singletonList(\n"; + } else { + out << "(java.util.Arrays.asList(\n"; + } out.indent(2, [&] { // No need for dimensions when elements are explicitly provided. emitDigestChain(out, "new " + digestType->getJavaType(false /* forInitializer */), @@ -1,3 +1,5 @@ +# Bug component: 164731 + smoreland@google.com maco@google.com elsk@google.com diff --git a/build/Android.bp b/build/Android.bp index 963a6904..bebdd9db 100644 --- a/build/Android.bp +++ b/build/Android.bp @@ -28,6 +28,7 @@ bootstrap_go_package { "blueprint", "soong", "soong-android", + "soong-bp2build", "soong-cc", "soong-genrule", "soong-java", @@ -39,6 +40,9 @@ bootstrap_go_package { "properties.go", "utils.go", ], + testSrcs: [ + "hidl_interface_conversion_test.go", + ], pluginFor: ["soong_build"], } diff --git a/build/go.mod b/build/go.mod new file mode 100644 index 00000000..2d75c6eb --- /dev/null +++ b/build/go.mod @@ -0,0 +1,27 @@ +module android/soong/hidl + +require ( + android/soong v0.0.0 + github.com/google/blueprint v0.0.0 +) + +require ( + golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect + google.golang.org/protobuf v0.0.0 // indirect +) + +replace google.golang.org/protobuf v0.0.0 => ../../../../external/golang-protobuf + +replace github.com/google/blueprint v0.0.0 => ../../../../build/blueprint + +replace android/soong v0.0.0 => ../../../../build/soong + +// Indirect deps from golang-protobuf +exclude github.com/golang/protobuf v1.5.0 + +replace github.com/google/go-cmp v0.5.5 => ../../../../external/go-cmp + +// Indirect dep from go-cmp +exclude golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 + +go 1.18 diff --git a/build/hidl_interface.go b/build/hidl_interface.go index fa770d15..a4087349 100644 --- a/build/hidl_interface.go +++ b/build/hidl_interface.go @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" + "android/soong/bazel" "android/soong/cc" "android/soong/genrule" "android/soong/java" @@ -63,9 +64,11 @@ var ( }, "output", "options", "fqName") zipLintRule = pctx.StaticRule("zipLintRule", blueprint.RuleParams{ - Command: "rm -f ${output} && ${soong_zip} -o ${output} -C ${intermediatesDir} ${files}", - CommandDeps: []string{"${soong_zip}"}, - Description: "Zipping hidl-lints into ${output}", + Rspfile: "$out.rsp", + RspfileContent: "$files", + Command: "rm -f ${output} && ${soong_zip} -o ${output} -C ${intermediatesDir} -l ${out}.rsp", + CommandDeps: []string{"${soong_zip}"}, + Description: "Zipping hidl-lints into ${output}", }, "output", "files") inheritanceHierarchyRule = pctx.StaticRule("inheritanceHierarchyRule", blueprint.RuleParams{ @@ -94,7 +97,7 @@ var ( func init() { android.RegisterModuleType("prebuilt_hidl_interfaces", prebuiltHidlInterfaceFactory) - android.RegisterModuleType("hidl_interface", hidlInterfaceFactory) + android.RegisterModuleType("hidl_interface", HidlInterfaceFactory) android.RegisterSingletonType("all_hidl_lints", allHidlLintsFactory) android.RegisterModuleType("hidl_interfaces_metadata", hidlInterfacesMetadataSingletonFactory) pctx.Import("android/soong/android") @@ -187,7 +190,7 @@ func (m *allHidlLintsSingleton) GenerateBuildActions(ctx android.SingletonContex Output: outPath, Args: map[string]string{ "output": outPath.String(), - "files": strings.Join(wrap("-f ", hidlLintOutputs.Strings(), ""), " "), + "files": strings.Join(hidlLintOutputs.Strings(), " "), }, }) } @@ -431,6 +434,7 @@ type hidlInterfaceProperties struct { type hidlInterface struct { android.ModuleBase + android.BazelModuleBase properties hidlInterfaceProperties } @@ -555,7 +559,12 @@ This corresponds to the "-r%s:<some path>" option that would be passed into hidl mctx.CreateModule(android.FileGroupFactory, &fileGroupProperties{ Name: proptools.StringPtr(name.fileGroupName()), Srcs: i.properties.Srcs, - }) + }, + &bazelProperties{ + &Bazel_module{ + Bp2build_available: proptools.BoolPtr(false), + }}, + ) mctx.CreateModule(hidlGenFactory, &nameProperties{ Name: proptools.StringPtr(name.sourcesName()), @@ -609,7 +618,14 @@ This corresponds to the "-r%s:<some path>" option that would be passed into hidl Export_generated_headers: []string{name.headersName()}, Apex_available: i.properties.Apex_available, Min_sdk_version: getMinSdkVersion(name.string()), - }, &i.properties.VndkProperties) + }, &i.properties.VndkProperties, + // TODO(b/237810289): We need to disable/enable based on if a module has + // been converted or not, otherwise mixed build will fail. + &bazelProperties{ + &Bazel_module{ + Bp2build_available: proptools.BoolPtr(false), + }}, + ) } if shouldGenerateJava { @@ -714,17 +730,86 @@ func (h *hidlInterface) DepsMutator(ctx android.BottomUpMutatorContext) { ctx.AddDependency(ctx.Module(), nil, h.properties.Root) } -func hidlInterfaceFactory() android.Module { +func HidlInterfaceFactory() android.Module { i := &hidlInterface{} i.AddProperties(&i.properties) android.InitAndroidModule(i) android.AddLoadHook(i, func(ctx android.LoadHookContext) { hidlInterfaceMutator(ctx, i) }) + android.InitBazelModule(i) return i } +type hidlInterfaceAttributes struct { + Srcs bazel.LabelListAttribute + Deps bazel.LabelListAttribute + Root string + Root_interface_file bazel.LabelAttribute + Min_sdk_version *string + Tags []string +} + +func (m *hidlInterface) ConvertWithBp2build(ctx android.TopDownMutatorContext) { + srcs := bazel.MakeLabelListAttribute( + android.BazelLabelForModuleSrc(ctx, m.properties.Srcs)) + + // The interface dependencies are added earlier with the suffix of "_interface", + // so we need to look for them with the hidlInterfaceSuffix added to the names. + // Later we trim the "_interface" suffix. Here is an example: + // hidl_interface( + // name = "android.hardware.nfc@1.1", + // deps = [ + // "//hardware/interfaces/nfc/1.0:android.hardware.nfc@1.0", + // "//system/libhidl/transport/base/1.0:android.hidl.base@1.0", + // ], + // ) + deps := android.BazelLabelForModuleDeps(ctx, wrap("", m.properties.Interfaces, hidlInterfaceSuffix)) + var dep_labels []bazel.Label + for _, label := range deps.Includes { + dep_labels = append(dep_labels, + bazel.Label{Label: strings.TrimSuffix(label.Label, hidlInterfaceSuffix)}) + } + + var root string + var root_interface_file bazel.LabelAttribute + if module, exists := ctx.ModuleFromName(m.properties.Root); exists { + if pkg_root, ok := module.(*hidlPackageRoot); ok { + var path string + if pkg_root.properties.Path != nil { + path = *pkg_root.properties.Path + } else { + path = ctx.OtherModuleDir(pkg_root) + } + // The root and root_interface come from the hidl_package_root module that + // this module depends on, we don't convert hidl_package_root module + // separately since all the other properties of that module are deprecated. + root = pkg_root.Name() + if path == ctx.ModuleDir() { + root_interface_file = *bazel.MakeLabelAttribute(":" + "current.txt") + } else { + root_interface_file = *bazel.MakeLabelAttribute("//" + path + ":" + "current.txt") + } + } + } + + attrs := &hidlInterfaceAttributes{ + Srcs: srcs, + Deps: bazel.MakeLabelListAttribute(bazel.MakeLabelList(dep_labels)), + Root: root, + Root_interface_file: root_interface_file, + Min_sdk_version: getMinSdkVersion(m.Name()), + Tags: android.ConvertApexAvailableToTagsWithoutTestApexes(ctx, m.properties.Apex_available), + } + + props := bazel.BazelTargetModuleProperties{ + Rule_class: "hidl_interface", + Bzl_load_location: "//build/bazel/rules/hidl:hidl_interface.bzl", + } + + ctx.CreateBazelTargetModule(props, android.CommonAttributes{Name: strings.TrimSuffix(m.Name(), hidlInterfaceSuffix)}, attrs) +} + var minSdkVersion = map[string]string{ - "android.frameworks.bufferhub@1.0": "29", "android.hardware.audio.common@5.0": "30", "android.hardware.audio.common@6.0": "31", "android.hardware.automotive.audiocontrol@1.0": "31", @@ -736,28 +821,8 @@ var minSdkVersion = map[string]string{ "android.hardware.bluetooth.audio@2.2": "30", "android.hardware.bluetooth@1.0": "30", "android.hardware.bluetooth@1.1": "30", - "android.hardware.cas.native@1.0": "29", - "android.hardware.cas@1.0": "29", - "android.hardware.graphics.allocator@2.0": "29", - "android.hardware.graphics.allocator@3.0": "29", - "android.hardware.graphics.allocator@4.0": "29", - "android.hardware.graphics.bufferqueue@1.0": "29", - "android.hardware.graphics.bufferqueue@2.0": "29", - "android.hardware.graphics.common@1.0": "29", - "android.hardware.graphics.common@1.1": "29", - "android.hardware.graphics.common@1.2": "29", - "android.hardware.graphics.mapper@2.0": "29", - "android.hardware.graphics.mapper@2.1": "29", - "android.hardware.graphics.mapper@3.0": "29", - "android.hardware.graphics.mapper@4.0": "29", "android.hardware.health@1.0": "31", "android.hardware.health@2.0": "31", - "android.hardware.media.bufferpool@2.0": "29", - "android.hardware.media.c2@1.0": "29", - "android.hardware.media.c2@1.1": "29", - "android.hardware.media.c2@1.2": "29", - "android.hardware.media.omx@1.0": "29", - "android.hardware.media@1.0": "29", "android.hardware.neuralnetworks@1.0": "30", "android.hardware.neuralnetworks@1.1": "30", "android.hardware.neuralnetworks@1.2": "30", @@ -778,21 +843,25 @@ var minSdkVersion = map[string]string{ "android.hardware.wifi.supplicant@1.2": "30", "android.hardware.wifi.supplicant@1.3": "30", "android.hardware.wifi.supplicant@1.4": "30", - "android.hidl.allocator@1.0": "29", "android.hidl.manager@1.0": "30", "android.hidl.manager@1.1": "30", "android.hidl.manager@1.2": "30", - "android.hidl.memory.token@1.0": "29", - "android.hidl.memory@1.0": "29", - "android.hidl.safe_union@1.0": "29", - "android.hidl.token@1.0": "29", } func getMinSdkVersion(name string) *string { if ver, ok := minSdkVersion[name]; ok { return proptools.StringPtr(ver) } - return nil + // legacy, as used + if name == "android.hardware.tetheroffload.config@1.0" || + name == "android.hardware.tetheroffload.control@1.0" || + name == "android.hardware.tetheroffload.control@1.1" || + name == "android.hardware.radio@1.0" || + name == "android.hidl.base@1.0" { + + return nil + } + return proptools.StringPtr("29") } var doubleLoadablePackageNames = []string{ @@ -863,76 +932,76 @@ func canInterfaceExist(name string) bool { } var allAospHidlInterfaces = map[string]bool{ - "android.frameworks.automotive.display@1.0": true, - "android.frameworks.bufferhub@1.0": true, - "android.frameworks.cameraservice.common@2.0": true, - "android.frameworks.cameraservice.device@2.0": true, - "android.frameworks.cameraservice.device@2.1": true, - "android.frameworks.cameraservice.service@2.0": true, - "android.frameworks.cameraservice.service@2.1": true, - "android.frameworks.cameraservice.service@2.2": true, - "android.frameworks.displayservice@1.0": true, - "android.frameworks.schedulerservice@1.0": true, - "android.frameworks.sensorservice@1.0": true, - "android.frameworks.stats@1.0": true, - "android.frameworks.vr.composer@1.0": true, - "android.frameworks.vr.composer@2.0": true, - "android.hardware.atrace@1.0": true, - "android.hardware.audio@2.0": true, - "android.hardware.audio@4.0": true, - "android.hardware.audio@5.0": true, - "android.hardware.audio@6.0": true, - "android.hardware.audio@7.0": true, - "android.hardware.audio@7.1": true, - "android.hardware.audio.common@2.0": true, - "android.hardware.audio.common@4.0": true, - "android.hardware.audio.common@5.0": true, - "android.hardware.audio.common@6.0": true, - "android.hardware.audio.common@7.0": true, - "android.hardware.audio.effect@2.0": true, - "android.hardware.audio.effect@4.0": true, - "android.hardware.audio.effect@5.0": true, - "android.hardware.audio.effect@6.0": true, - "android.hardware.audio.effect@7.0": true, - "android.hardware.authsecret@1.0": true, - "android.hardware.automotive.audiocontrol@1.0": true, - "android.hardware.automotive.audiocontrol@2.0": true, - "android.hardware.automotive.can@1.0": true, - "android.hardware.automotive.evs@1.0": true, - "android.hardware.automotive.evs@1.1": true, - "android.hardware.automotive.sv@1.0": true, - "android.hardware.automotive.vehicle@2.0": true, - "android.hardware.biometrics.face@1.0": true, - "android.hardware.biometrics.fingerprint@2.1": true, - "android.hardware.biometrics.fingerprint@2.2": true, - "android.hardware.biometrics.fingerprint@2.3": true, - "android.hardware.bluetooth@1.0": true, - "android.hardware.bluetooth@1.1": true, - "android.hardware.bluetooth.a2dp@1.0": true, - "android.hardware.bluetooth.audio@2.0": true, - "android.hardware.bluetooth.audio@2.1": true, - "android.hardware.bluetooth.audio@2.2": true, - "android.hardware.boot@1.0": true, - "android.hardware.boot@1.1": true, - "android.hardware.boot@1.2": true, - "android.hardware.broadcastradio@1.0": true, - "android.hardware.broadcastradio@1.1": true, - "android.hardware.broadcastradio@2.0": true, - "android.hardware.camera.common@1.0": true, - "android.hardware.camera.device@1.0": true, - "android.hardware.camera.device@3.2": true, - "android.hardware.camera.device@3.3": true, - "android.hardware.camera.device@3.4": true, - "android.hardware.camera.device@3.5": true, - "android.hardware.camera.device@3.6": true, - "android.hardware.camera.device@3.7": true, - "android.hardware.camera.device@3.8": true, - "android.hardware.camera.metadata@3.2": true, - "android.hardware.camera.metadata@3.3": true, - "android.hardware.camera.metadata@3.4": true, - "android.hardware.camera.metadata@3.5": true, - "android.hardware.camera.metadata@3.6": true, - // TODO: Remove metadata@3.8 after AIDL migration b/196432585 + "android.frameworks.automotive.display@1.0": true, + "android.frameworks.bufferhub@1.0": true, + "android.frameworks.cameraservice.common@2.0": true, + "android.frameworks.cameraservice.device@2.0": true, + "android.frameworks.cameraservice.device@2.1": true, + "android.frameworks.cameraservice.service@2.0": true, + "android.frameworks.cameraservice.service@2.1": true, + "android.frameworks.cameraservice.service@2.2": true, + "android.frameworks.displayservice@1.0": true, + "android.frameworks.schedulerservice@1.0": true, + "android.frameworks.sensorservice@1.0": true, + "android.frameworks.stats@1.0": true, + "android.frameworks.vr.composer@1.0": true, + "android.frameworks.vr.composer@2.0": true, + "android.hardware.atrace@1.0": true, + "android.hardware.audio@2.0": true, + "android.hardware.audio@4.0": true, + "android.hardware.audio@5.0": true, + "android.hardware.audio@6.0": true, + "android.hardware.audio@7.0": true, + "android.hardware.audio@7.1": true, + "android.hardware.audio.common@2.0": true, + "android.hardware.audio.common@4.0": true, + "android.hardware.audio.common@5.0": true, + "android.hardware.audio.common@6.0": true, + "android.hardware.audio.common@7.0": true, + "android.hardware.audio.effect@2.0": true, + "android.hardware.audio.effect@4.0": true, + "android.hardware.audio.effect@5.0": true, + "android.hardware.audio.effect@6.0": true, + "android.hardware.audio.effect@7.0": true, + "android.hardware.authsecret@1.0": true, + "android.hardware.automotive.audiocontrol@1.0": true, + "android.hardware.automotive.audiocontrol@2.0": true, + "android.hardware.automotive.can@1.0": true, + "android.hardware.automotive.evs@1.0": true, + "android.hardware.automotive.evs@1.1": true, + "android.hardware.automotive.sv@1.0": true, + "android.hardware.automotive.vehicle@2.0": true, + "android.hardware.biometrics.face@1.0": true, + "android.hardware.biometrics.fingerprint@2.1": true, + "android.hardware.biometrics.fingerprint@2.2": true, + "android.hardware.biometrics.fingerprint@2.3": true, + "android.hardware.bluetooth@1.0": true, + "android.hardware.bluetooth@1.1": true, + "android.hardware.bluetooth.a2dp@1.0": true, + "android.hardware.bluetooth.audio@2.0": true, + "android.hardware.bluetooth.audio@2.1": true, + "android.hardware.bluetooth.audio@2.2": true, + "android.hardware.boot@1.0": true, + "android.hardware.boot@1.1": true, + "android.hardware.boot@1.2": true, + "android.hardware.broadcastradio@1.0": true, + "android.hardware.broadcastradio@1.1": true, + "android.hardware.broadcastradio@2.0": true, + "android.hardware.camera.common@1.0": true, + "android.hardware.camera.device@1.0": true, + "android.hardware.camera.device@3.2": true, + "android.hardware.camera.device@3.3": true, + "android.hardware.camera.device@3.4": true, + "android.hardware.camera.device@3.5": true, + "android.hardware.camera.device@3.6": true, + "android.hardware.camera.device@3.7": true, + "android.hardware.camera.device@3.8": true, + "android.hardware.camera.metadata@3.2": true, + "android.hardware.camera.metadata@3.3": true, + "android.hardware.camera.metadata@3.4": true, + "android.hardware.camera.metadata@3.5": true, + "android.hardware.camera.metadata@3.6": true, + // TODO: Remove metadata@3.8 after AIDL migration b/196432585 "android.hardware.camera.metadata@3.7": true, "android.hardware.camera.metadata@3.8": true, "android.hardware.camera.provider@2.4": true, diff --git a/build/hidl_interface_conversion_test.go b/build/hidl_interface_conversion_test.go new file mode 100644 index 00000000..6cc5df84 --- /dev/null +++ b/build/hidl_interface_conversion_test.go @@ -0,0 +1,117 @@ +// 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 hidl + +import ( + "testing" + + "android/soong/android" + "android/soong/bp2build" + "android/soong/cc" +) + +func runHidlInterfaceTestCase(t *testing.T, tc bp2build.Bp2buildTestCase) { + t.Helper() + bp2build.RunBp2BuildTestCase( + t, + func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("cc_defaults", func() android.Module { return cc.DefaultsFactory() }) + ctx.RegisterModuleType("hidl_interface", HidlInterfaceFactory) + ctx.RegisterModuleType("hidl_package_root", HidlPackageRootFactory) + }, + tc, + ) +} + +func TestHidlInterface(t *testing.T) { + runHidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{ + Description: `hidl_interface with common usage of properties`, + Blueprint: ` +hidl_package_root { + name: "android.hardware", + use_current: true, +} +cc_defaults { + name: "hidl-module-defaults", +} +hidl_interface { + name: "android.hardware.nfc@1.0", + srcs: ["types.hal", "IBase.hal"], + root: "android.hardware", + gen_java: false, +} +hidl_interface { + name: "android.hardware.nfc@1.1", + srcs: ["types.hal", "INfc.hal"], + interfaces: ["android.hardware.nfc@1.0"], + root: "android.hardware", + gen_java: false, +}`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTargetNoRestrictions("hidl_interface", "android.hardware.nfc@1.0", bp2build.AttrNameToString{ + "min_sdk_version": `"29"`, + "root": `"android.hardware"`, + "root_interface_file": `":current.txt"`, + "srcs": `[ + "types.hal", + "IBase.hal", + ]`, + }), + bp2build.MakeBazelTargetNoRestrictions("hidl_interface", "android.hardware.nfc@1.1", bp2build.AttrNameToString{ + "deps": `[":android.hardware.nfc@1.0"]`, + "min_sdk_version": `"29"`, + "root": `"android.hardware"`, + "root_interface_file": `":current.txt"`, + "srcs": `[ + "types.hal", + "INfc.hal", + ]`, + }), + }, + }) +} + +func TestHidlInterfacePackageRootInAnotherBp(t *testing.T) { + runHidlInterfaceTestCase(t, bp2build.Bp2buildTestCase{ + Description: `hidl_interface with common usage of properties`, + Filesystem: map[string]string{ + "foo/bar/Android.bp": ` +hidl_package_root { + name: "android.hardware", + use_current: true, +}`}, + Blueprint: ` +cc_defaults { + name: "hidl-module-defaults", +} +hidl_interface { + name: "android.hardware.nfc@1.0", + srcs: ["types.hal", "IBase.hal"], + root: "android.hardware", + gen_java: false, +}`, + ExpectedBazelTargets: []string{ + bp2build.MakeBazelTargetNoRestrictions("hidl_interface", "android.hardware.nfc@1.0", bp2build.AttrNameToString{ + "min_sdk_version": `"29"`, + "root": `"android.hardware"`, + "root_interface_file": `"//foo/bar:current.txt"`, + "srcs": `[ + "types.hal", + "IBase.hal", + ]`, + }), + }, + }) +} diff --git a/build/hidl_package_root.go b/build/hidl_package_root.go index fc58597d..628c210d 100644 --- a/build/hidl_package_root.go +++ b/build/hidl_package_root.go @@ -45,7 +45,7 @@ type hidlPackageRootProperties struct { } func init() { - android.RegisterModuleType("hidl_package_root", hidlPackageRootFactory) + android.RegisterModuleType("hidl_package_root", HidlPackageRootFactory) } type hidlPackageRoot struct { @@ -121,7 +121,7 @@ func (r *hidlPackageRoot) DepsMutator(ctx android.BottomUpMutatorContext) { var packageRootsMutex sync.Mutex var packageRoots []*hidlPackageRoot -func hidlPackageRootFactory() android.Module { +func HidlPackageRootFactory() android.Module { r := &hidlPackageRoot{} r.AddProperties(&r.properties) android.InitAndroidModule(r) diff --git a/build/properties.go b/build/properties.go index 6d67033b..c6cc13ed 100644 --- a/build/properties.go +++ b/build/properties.go @@ -66,3 +66,10 @@ type fuzzProperties struct { Data []string Fuzz_config *fuzzConfig } + +type Bazel_module struct { + Bp2build_available *bool +} +type bazelProperties struct { + *Bazel_module +} diff --git a/hidl2aidl/AidlInterface.cpp b/hidl2aidl/AidlInterface.cpp index 5fb56cab..93317f2b 100644 --- a/hidl2aidl/AidlInterface.cpp +++ b/hidl2aidl/AidlInterface.cpp @@ -176,7 +176,7 @@ void AidlHelper::emitAidl( interface.emitDocComment(out); if (interface.superType() && interface.superType()->fqName() != gIBaseFqName) { out << "// Interface inherits from " << interface.superType()->fqName().string() - << " but AIDL does not support interface inheritance.\n"; + << " but AIDL does not support interface inheritance (methods have been flattened).\n"; } out << "@VintfStability\n"; diff --git a/hidl2aidl/main.cpp b/hidl2aidl/main.cpp index 5d48860a..297b411a 100644 --- a/hidl2aidl/main.cpp +++ b/hidl2aidl/main.cpp @@ -220,6 +220,8 @@ static void emitBuildFile(Formatter& out, const FQName& fqName, std::vector<FQNa out << "aidl_interface {\n"; out << " name: \"" << AidlHelper::getAidlPackage(fqName) << "\",\n"; out << " vendor_available: true,\n"; + out << " host_supported: true,\n"; + out << " frozen: false,\n"; out << " srcs: [\"" << AidlHelper::getAidlPackagePath(fqName) << "/*.aidl\"],\n"; out << " stability: \"vintf\",\n"; out << " backend: {\n"; @@ -231,12 +233,7 @@ static void emitBuildFile(Formatter& out, const FQName& fqName, std::vector<FQNa out << " enabled: true,\n"; out << " },\n"; out << " java: {\n"; - out << " sdk_version: \"module_current\",\n"; - out << " },\n"; - out << " ndk: {\n"; - out << " vndk: {\n"; - out << " enabled: true,\n"; - out << " },\n"; + out << " sdk_version: \"system_current\",\n"; out << " },\n"; out << " },\n"; out << "}\n\n"; @@ -265,7 +262,7 @@ static void emitBuildFile(Formatter& out, const FQName& fqName, std::vector<FQNa emitAidlSharedLibs(out, fqName, AidlBackend::JAVA); emitHidlSharedLibs(out, targets, AidlBackend::JAVA); out << " ],\n"; - out << " sdk_version: \"module_current\",\n"; + out << " sdk_version: \"system_current\",\n"; out << "}\n\n"; } diff --git a/hidl2aidl/test/Android.bp b/hidl2aidl/test/Android.bp index d780c9a9..408baef3 100644 --- a/hidl2aidl/test/Android.bp +++ b/hidl2aidl/test/Android.bp @@ -128,7 +128,7 @@ aidl_interface { srcs: [":hidl2aidl_test_gen_aidl"], backend: { java: { - sdk_version: "module_current", + sdk_version: "system_current", }, }, flags: [ diff --git a/test/hidl_test/hidl_test.py b/test/hidl_test/hidl_test.py index 1a58e5d6..802ddebc 100644 --- a/test/hidl_test/hidl_test.py +++ b/test/hidl_test/hidl_test.py @@ -49,12 +49,12 @@ if __name__ == '__main__': servers = [] if has_bitness(32): - clients += ["/data/nativetest/hidl_test_client/hidl_test_client"] - servers += ["/data/nativetest/hidl_test_servers/hidl_test_servers"] + clients += ["/data/nativetest/hidl_test_client/hidl_test_client32"] + servers += ["/data/nativetest/hidl_test_servers/hidl_test_servers32"] if has_bitness(64): - clients += ["/data/nativetest64/hidl_test_client/hidl_test_client"] - servers += ["/data/nativetest64/hidl_test_servers/hidl_test_servers"] + clients += ["/data/nativetest64/hidl_test_client/hidl_test_client64"] + servers += ["/data/nativetest64/hidl_test_servers/hidl_test_servers64"] assert len(clients) > 0 assert len(servers) > 0 diff --git a/test/hidl_test/hidl_test.xml b/test/hidl_test/hidl_test.xml index 586adc43..778b63f6 100644 --- a/test/hidl_test/hidl_test.xml +++ b/test/hidl_test/hidl_test.xml @@ -23,11 +23,11 @@ <!-- We would like to abort, but currently there is not a simple way to specify installation of both bitnesses of targets. --> <option name="abort-on-push-failure" value="false"/> - <option name="push" value="hidl_test_client32->/data/nativetest/hidl_test_client/hidl_test_client" /> - <option name="push" value="hidl_test_client64->/data/nativetest64/hidl_test_client/hidl_test_client" /> + <option name="push" value="hidl_test_client32->/data/nativetest/hidl_test_client/hidl_test_client32" /> + <option name="push" value="hidl_test_client64->/data/nativetest64/hidl_test_client/hidl_test_client64" /> - <option name="push" value="hidl_test_servers32->/data/nativetest/hidl_test_servers/hidl_test_servers" /> - <option name="push" value="hidl_test_servers64->/data/nativetest64/hidl_test_servers/hidl_test_servers" /> + <option name="push" value="hidl_test_servers32->/data/nativetest/hidl_test_servers/hidl_test_servers32" /> + <option name="push" value="hidl_test_servers64->/data/nativetest64/hidl_test_servers/hidl_test_servers64" /> <option name="cleanup" value="true" /> </target_preparer> diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp index eff40a54..d82dab60 100644 --- a/test/hidl_test/hidl_test_client.cpp +++ b/test/hidl_test/hidl_test_client.cpp @@ -960,41 +960,45 @@ TEST_F(HidlTest, BatchSharedMemory) { const uint64_t kBatchSize = 2; hidl_vec<hidl_memory> batchCopy; - EXPECT_OK(ashmemAllocator->batchAllocate(1024, kBatchSize, - [&](bool success, const hidl_vec<hidl_memory>& batch) { - ASSERT_TRUE(success); - EXPECT_EQ(kBatchSize, batch.size()); + ASSERT_TRUE(ashmemAllocator + ->batchAllocate(1024, kBatchSize, + [&](bool success, const hidl_vec<hidl_memory>& batch) { + ASSERT_TRUE(success); + EXPECT_EQ(kBatchSize, batch.size()); - for (uint64_t i = 0; i < batch.size(); i++) { - sp<IMemory> memory = mapMemory(batch[i]); + for (uint64_t i = 0; i < batch.size(); i++) { + sp<IMemory> memory = mapMemory(batch[i]); - EXPECT_NE(nullptr, memory.get()); + EXPECT_NE(nullptr, memory.get()); - uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(memory->getPointer())); - EXPECT_NE(nullptr, data); + uint8_t* data = static_cast<uint8_t*>( + static_cast<void*>(memory->getPointer())); + EXPECT_NE(nullptr, data); - EXPECT_EQ(memory->getSize(), batch[i].size()); + EXPECT_EQ(memory->getSize(), batch[i].size()); - memory->update(); - memset(data, kValue, memory->getSize()); - memory->commit(); - } + memory->update(); + memset(data, kValue, memory->getSize()); + memory->commit(); + } - batchCopy = batch; - })); + batchCopy = batch; + }) + .isOk()); for (uint64_t i = 0; i < batchCopy.size(); i++) { // Test the memory persists after the call sp<IMemory> memory = mapMemory(batchCopy[i]); - EXPECT_NE(memory, nullptr); + ASSERT_NE(memory, nullptr); uint8_t* data = static_cast<uint8_t*>(static_cast<void*>(memory->getPointer())); - EXPECT_NE(data, nullptr); + ASSERT_NE(data, nullptr); memory->read(); - for (size_t i = 0; i < batchCopy[i].size(); i++) { - EXPECT_EQ(kValue, data[i]); + + for (size_t k = 0; k < batchCopy[i].size(); k++) { + EXPECT_EQ(kValue, data[k]); } memory->commit(); } diff --git a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java index a0311fed..47adad8f 100644 --- a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java +++ b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java @@ -930,8 +930,7 @@ public final class HidlTestJava { ExpectTrue(java.util.Objects.deepEquals(outArray, expectedOutArray)); ArrayList<Integer> outVec = proxy.mapThisVector(paramVec); - java.util.Objects.equals(outVec, expectedOutVec); - + ExpectTrue(java.util.Objects.equals(outVec, expectedOutVec)); } Expect(proxy.doStuffAndReturnAString(), "Hello, world!"); @@ -1273,7 +1272,7 @@ public final class HidlTestJava { } public IBase.Foo[] someMethodWithFooArrays(IBase.Foo[] fooInput) { - Log.d(TAG, "Baz someMethodWithFooArrays " + fooInput.toString()); + Log.d(TAG, "Baz someMethodWithFooArrays " + Arrays.toString(fooInput)); IBase.Foo[] fooOutput = new IBase.Foo[2]; fooOutput[0] = fooInput[1]; @@ -1333,7 +1332,7 @@ public final class HidlTestJava { } public String[][] transpose2(String[][] in) { - Log.d(TAG, "Baz transpose2 " + in.toString()); + Log.d(TAG, "Baz transpose2 " + Arrays.deepToString(in)); String[][] out = new String[3][5]; for (int i = 0; i < 3; ++i) { @@ -1352,8 +1351,7 @@ public final class HidlTestJava { } public boolean[] someBoolArrayMethod(boolean[] x) { - Log.d(TAG, "Baz someBoolArrayMethod(" - + x.toString() + ")"); + Log.d(TAG, "Baz someBoolArrayMethod(" + Arrays.toString(x) + ")"); boolean[] out = new boolean[4]; out[0] = !x[0]; @@ -1390,7 +1388,7 @@ public final class HidlTestJava { } public int[] doSomethingElse(int[] param) { - Log.d(TAG, "Baz doSomethingElse " + param.toString()); + Log.d(TAG, "Baz doSomethingElse " + Arrays.toString(param)); int[] something = new int[32]; for (int i = 0; i < 15; ++i) { @@ -1422,8 +1420,7 @@ public final class HidlTestJava { public void takeAMask(byte bf, byte first, IBase.MyMask second, byte third, takeAMaskCallback cb) { - cb.onValues(bf, (byte)(bf | first), - (byte)(second.value & bf), (byte)((bf | bf) & third)); + cb.onValues(bf, (byte) (bf | first), (byte) (second.value & bf), (byte) (bf & third)); } public LotsOfPrimitiveArrays testArrays(LotsOfPrimitiveArrays in) { @@ -1566,7 +1563,7 @@ public final class HidlTestJava { @Override public LargeSafeUnion setE(LargeSafeUnion safeUnion, byte[/* 13 */] e) { - Log.d(TAG, "SERVER: setE(" + e + ")"); + Log.d(TAG, "SERVER: setE(" + Arrays.toString(e) + ")"); safeUnion.e(e); return safeUnion; @@ -1574,7 +1571,7 @@ public final class HidlTestJava { @Override public LargeSafeUnion setF(LargeSafeUnion safeUnion, long[/* 5 */] f) { - Log.d(TAG, "SERVER: setF(" + f + ")"); + Log.d(TAG, "SERVER: setF(" + Arrays.toString(f) + ")"); safeUnion.f(f); return safeUnion; @@ -1661,7 +1658,7 @@ public final class HidlTestJava { @Override public InterfaceTypeSafeUnion setInterfaceB( InterfaceTypeSafeUnion safeUnion, byte[/* 7 */] b) { - Log.d(TAG, "SERVER: setInterfaceB(" + b + ")"); + Log.d(TAG, "SERVER: setInterfaceB(" + Arrays.toString(b) + ")"); safeUnion.b(b); return safeUnion; @@ -1727,7 +1724,7 @@ public final class HidlTestJava { @Override public HandleTypeSafeUnion setHandleB(HandleTypeSafeUnion safeUnion, NativeHandle[] b) { - Log.d(TAG, "SERVER: setHandleB(" + b + ")"); + Log.d(TAG, "SERVER: setHandleB(" + Arrays.toString(b) + ")"); safeUnion.b(b); return safeUnion; diff --git a/test/lazy_test/hidl_lazy_test.cpp b/test/lazy_test/hidl_lazy_test.cpp index 6bbb161f..4f27463f 100644 --- a/test/lazy_test/hidl_lazy_test.cpp +++ b/test/lazy_test/hidl_lazy_test.cpp @@ -179,6 +179,10 @@ TEST_F(HidlLazyCbTest, ActiveServicesCallbackTest) { FqInstance fqInstance; ASSERT_TRUE(fqInstance.setTo(fqInstanceName)); + // b/251244025 - this service logic is coupled with this test, but other + // things may have started it + (void)android::base::SetProperty("ctl.stop", "hidl_lazy_cb_test_server"); + ASSERT_FALSE(isServiceRunning(fqInstance)) << "Lazy service already running."; sp<IBase> hal = getHal(fqInstance); diff --git a/test/vendor/1.0/Android.bp b/test/vendor/1.0/Android.bp index cdb613ae..9fe46f44 100644 --- a/test/vendor/1.0/Android.bp +++ b/test/vendor/1.0/Android.bp @@ -23,9 +23,6 @@ hidl_interface { gen_java: true, gen_java_constants: true, - // tests that license is copied - notice: "FAKE_NOTICE_FILE", - // test apex_available resolves apex_available: [ "//apex_available:anyapex", |