Merge "Fix gen_notice init to support arch and dist."
diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go
index cc854a3..e4855f2 100644
--- a/android/allowlists/allowlists.go
+++ b/android/allowlists/allowlists.go
@@ -154,6 +154,7 @@
"external/zopfli": Bp2BuildDefaultTrueRecursively,
"external/zstd": Bp2BuildDefaultTrueRecursively,
+ "frameworks/av": Bp2BuildDefaultTrue,
"frameworks/av/media/codecs": Bp2BuildDefaultTrueRecursively,
"frameworks/av/media/liberror": Bp2BuildDefaultTrueRecursively,
"frameworks/av/services/minijail": Bp2BuildDefaultTrueRecursively,
@@ -609,7 +610,6 @@
"adb_pairing_auth_test",
"adb_pairing_connection_test",
"adb_tls_connection_test",
- "adbd_test", // depends on unconverted modules: libusb
"avcdec",
"avcenc",
"bionic-benchmarks-tests",
@@ -1082,7 +1082,6 @@
}
ProdMixedBuildsEnabledList = []string{
- // This list left intentionally empty for now. Add specific module names
- // to have them built by Bazel in Prod Mixed Builds mode.
+ "com.android.adbd",
}
)
diff --git a/android/bazel_handler.go b/android/bazel_handler.go
index 93b6779..3e490dd 100644
--- a/android/bazel_handler.go
+++ b/android/bazel_handler.go
@@ -694,6 +694,31 @@
formatString := `
# This file is generated by soong_build. Do not edit.
+# a drop-in replacement for json.encode(), not available in cquery environment
+# TODO(cparsons): bring json module in and remove this function
+def json_encode(input):
+ # Avoiding recursion by limiting
+ # - a dict to contain anything except a dict
+ # - a list to contain only primitives
+ def encode_primitive(p):
+ t = type(p)
+ if t == "string" or t == "int":
+ return repr(p)
+ fail("unsupported value '%%s' of type '%%s'" %% (p, type(p)))
+
+ def encode_list(list):
+ return "[%%s]" %% ", ".join([encode_primitive(item) for item in list])
+
+ def encode_list_or_primitive(v):
+ return encode_list(v) if type(v) == "list" else encode_primitive(v)
+
+ if type(input) == "dict":
+ # TODO(juu): the result is read line by line so can't use '\n' yet
+ kv_pairs = [("%%s: %%s" %% (encode_primitive(k), encode_list_or_primitive(v))) for (k, v) in input.items()]
+ return "{ %%s }" %% ", ".join(kv_pairs)
+ else:
+ return encode_list_or_primitive(input)
+
# Label Map Section
%s
@@ -727,15 +752,6 @@
fail("expected platform name of the form 'android_<arch>' or 'linux_<arch>', but was " + str(platforms))
return "UNKNOWN"
-def json_for_file(key, file):
- return '"' + key + '":"' + file.path + '"'
-
-def json_for_files(key, files):
- return '"' + key + '":[' + ",".join(['"' + f.path + '"' for f in files]) + ']'
-
-def json_for_labels(key, ll):
- return '"' + key + '":[' + ",".join(['"' + str(x) + '"' for x in ll]) + ']'
-
def format(target):
id_string = str(target.label) + "|" + get_arch(target)
diff --git a/android/proto.go b/android/proto.go
index 8ad16a6..25cecf4 100644
--- a/android/proto.go
+++ b/android/proto.go
@@ -15,9 +15,10 @@
package android
import (
- "android/soong/bazel"
"strings"
+ "android/soong/bazel"
+
"github.com/google/blueprint"
"github.com/google/blueprint/proptools"
)
@@ -161,6 +162,13 @@
type protoAttrs struct {
Srcs bazel.LabelListAttribute
Strip_import_prefix *string
+ Deps bazel.LabelListAttribute
+}
+
+// For each package in the include_dirs property a proto_library target should
+// be added to the BUILD file in that package and a mapping should be added here
+var includeDirsToProtoDeps = map[string]string{
+ "external/protobuf/src": "//external/protobuf:libprotobuf-proto",
}
// Bp2buildProtoProperties converts proto properties, creating a proto_library and returning the
@@ -191,6 +199,14 @@
path := ""
attrs.Strip_import_prefix = &path
}
+
+ for _, dir := range props.Proto.Include_dirs {
+ if dep, ok := includeDirsToProtoDeps[dir]; ok {
+ attrs.Deps.Add(bazel.MakeLabelAttribute(dep))
+ } else {
+ ctx.PropertyErrorf("Could not find the proto_library target for include dir", dir)
+ }
+ }
} else if props.Proto.Type != info.Type && props.Proto.Type != nil {
ctx.ModuleErrorf("Cannot handle arch-variant types for protos at this time.")
}
diff --git a/android/testing.go b/android/testing.go
index 3708501..7b74c89 100644
--- a/android/testing.go
+++ b/android/testing.go
@@ -1037,7 +1037,7 @@
}
}
if !found {
- t.Errorf("missing the expected error %q (checked %d error(s))", pattern, len(errs))
+ t.Errorf("could not match the expected error regex %q (checked %d error(s))", pattern, len(errs))
for i, err := range errs {
t.Errorf("errs[%d] = %q", i, err)
}
diff --git a/bazel/cquery/request_type.go b/bazel/cquery/request_type.go
index 5cee6ac..cf8e9f7 100644
--- a/bazel/cquery/request_type.go
+++ b/bazel/cquery/request_type.go
@@ -235,14 +235,14 @@
// - The function body should not be indented outside of its own scope.
func (g getApexInfoType) StarlarkFunctionBody() string {
return `info = providers(target)["//build/bazel/rules/apex:apex.bzl%ApexInfo"]
-return "{%s}" % ",".join([
- json_for_file("signed_output", info.signed_output),
- json_for_file("unsigned_output", info.unsigned_output),
- json_for_labels("provides_native_libs", info.provides_native_libs),
- json_for_labels("requires_native_libs", info.requires_native_libs),
- json_for_files("bundle_key_pair", info.bundle_key_pair),
- json_for_files("container_key_pair", info.container_key_pair)
- ])`
+return json_encode({
+ "signed_output": info.signed_output.path,
+ "unsigned_output": info.unsigned_output.path,
+ "provides_native_libs": [str(lib) for lib in info.provides_native_libs],
+ "requires_native_libs": [str(lib) for lib in info.requires_native_libs],
+ "bundle_key_pair": [f.path for f in info.bundle_key_pair],
+ "container_key_pair": [f.path for f in info.container_key_pair]
+})`
}
type ApexCqueryInfo struct {
@@ -259,7 +259,9 @@
// Starlark given in StarlarkFunctionBody.
func (g getApexInfoType) ParseResult(rawString string) ApexCqueryInfo {
var info ApexCqueryInfo
- if err := json.Unmarshal([]byte(rawString), &info); err != nil {
+ decoder := json.NewDecoder(strings.NewReader(rawString))
+ decoder.DisallowUnknownFields() //useful to detect typos, e.g. in unit tests
+ if err := decoder.Decode(&info); err != nil {
panic(fmt.Errorf("cannot parse cquery result '%s': %s", rawString, err))
}
return info
diff --git a/bazel/cquery/request_type_test.go b/bazel/cquery/request_type_test.go
index 34248ce..46eb0b6 100644
--- a/bazel/cquery/request_type_test.go
+++ b/bazel/cquery/request_type_test.go
@@ -161,7 +161,7 @@
actualOutput, err := GetCcInfo.ParseResult(tc.input)
if (err == nil && tc.expectedErrorMessage != "") ||
(err != nil && err.Error() != tc.expectedErrorMessage) {
- t.Errorf("%q:\nexpected Error %s\n, got %s", tc.description, tc.expectedErrorMessage, err)
+ t.Errorf("%q:\n%12s: %q\n%12s: %q", tc.description, "expect Error", tc.expectedErrorMessage, "but got", err)
} else if err == nil && !reflect.DeepEqual(tc.expectedOutput, actualOutput) {
t.Errorf("%q:\n expected %#v\n!= actual %#v", tc.description, tc.expectedOutput, actualOutput)
}
diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go
index 5117c62..a21a566 100644
--- a/bp2build/cc_library_conversion_test.go
+++ b/bp2build/cc_library_conversion_test.go
@@ -2217,6 +2217,50 @@
})
}
+func TestCcLibraryProtoIncludeDirs(t *testing.T) {
+ runCcLibraryTestCase(t, Bp2buildTestCase{
+ ModuleTypeUnderTest: "cc_library",
+ ModuleTypeUnderTestFactory: cc.LibraryFactory,
+ Blueprint: soongCcProtoPreamble + `cc_library {
+ name: "foo",
+ srcs: ["foo.proto"],
+ proto: {
+ include_dirs: ["external/protobuf/src"],
+ },
+ include_build_directory: false,
+}`,
+ ExpectedBazelTargets: []string{
+ MakeBazelTarget("proto_library", "foo_proto", AttrNameToString{
+ "srcs": `["foo.proto"]`,
+ "deps": `["//external/protobuf:libprotobuf-proto"]`,
+ }), MakeBazelTarget("cc_lite_proto_library", "foo_cc_proto_lite", AttrNameToString{
+ "deps": `[":foo_proto"]`,
+ }), MakeBazelTarget("cc_library_static", "foo_bp2build_cc_library_static", AttrNameToString{
+ "deps": `[":libprotobuf-cpp-lite"]`,
+ "implementation_whole_archive_deps": `[":foo_cc_proto_lite"]`,
+ }), MakeBazelTarget("cc_library_shared", "foo", AttrNameToString{
+ "dynamic_deps": `[":libprotobuf-cpp-lite"]`,
+ }),
+ },
+ })
+}
+
+func TestCcLibraryProtoIncludeDirsUnknown(t *testing.T) {
+ runCcLibraryTestCase(t, Bp2buildTestCase{
+ ModuleTypeUnderTest: "cc_library",
+ ModuleTypeUnderTestFactory: cc.LibraryFactory,
+ Blueprint: soongCcProtoPreamble + `cc_library {
+ name: "foo",
+ srcs: ["foo.proto"],
+ proto: {
+ include_dirs: ["external/protobuf/abc"],
+ },
+ include_build_directory: false,
+}`,
+ ExpectedErr: fmt.Errorf("module \"foo\": Could not find the proto_library target for include dir: external/protobuf/abc"),
+ })
+}
+
func TestCcLibraryProtoFilegroups(t *testing.T) {
runCcLibraryTestCase(t, Bp2buildTestCase{
ModuleTypeUnderTest: "cc_library",
diff --git a/cc/config/global.go b/cc/config/global.go
index 357ea44..f920471 100644
--- a/cc/config/global.go
+++ b/cc/config/global.go
@@ -290,7 +290,12 @@
"-Wno-deprecated-non-prototype",
}
- llvmNextExtraCommonGlobalCflags = []string{}
+ llvmNextExtraCommonGlobalCflags = []string{
+ // New warnings to be fixed after clang-r468909
+ "-Wno-error=array-parameter", // http://b/241941550
+ "-Wno-error=deprecated-builtins", // http://b/241601211
+ "-Wno-error=deprecated", // in external/googletest/googletest
+ }
IllegalFlags = []string{
"-w",
diff --git a/cc/lto.go b/cc/lto.go
index 5d2fba0..b3e5e74 100644
--- a/cc/lto.go
+++ b/cc/lto.go
@@ -101,6 +101,7 @@
}
flags.Local.CFlags = append(flags.Local.CFlags, ltoCFlag)
+ flags.Local.AsFlags = append(flags.Local.AsFlags, ltoCFlag)
flags.Local.LdFlags = append(flags.Local.LdFlags, ltoCFlag)
flags.Local.LdFlags = append(flags.Local.LdFlags, ltoLdFlag)
diff --git a/cc/sanitize.go b/cc/sanitize.go
index edff059..c214d5f 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -714,6 +714,8 @@
if Bool(sanitize.Properties.Sanitize.Memtag_stack) {
flags.Local.CFlags = append(flags.Local.CFlags, memtagStackCommonFlags...)
+ // TODO(fmayer): remove -Wno-error once https://reviews.llvm.org/D127917 is in Android toolchain.
+ flags.Local.CFlags = append(flags.Local.CFlags, "-Wno-error=frame-larger-than")
flags.Local.AsFlags = append(flags.Local.AsFlags, memtagStackCommonFlags...)
flags.Local.LdFlags = append(flags.Local.LdFlags, memtagStackCommonFlags...)
}
diff --git a/java/config/config.go b/java/config/config.go
index 422f860..b026d73 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -124,6 +124,10 @@
// This is set up and guaranteed by soong_ui
return ctx.Config().Getenv("ANDROID_JAVA_HOME")
})
+ pctx.VariableFunc("Java11Home", func(ctx android.PackageVarContext) string {
+ // This is set up and guaranteed by soong_ui
+ return ctx.Config().Getenv("ANDROID_JAVA11_HOME")
+ })
pctx.VariableFunc("JlinkVersion", func(ctx android.PackageVarContext) string {
if override := ctx.Config().Getenv("OVERRIDE_JLINK_VERSION_NUMBER"); override != "" {
return override
@@ -137,11 +141,12 @@
})
pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin")
+ pctx.SourcePathVariable("Java11Toolchain", "${Java11Home}/bin")
pctx.SourcePathVariableWithEnvOverride("JavacCmd",
"${JavaToolchain}/javac", "ALTERNATE_JAVAC")
pctx.SourcePathVariable("JavaCmd", "${JavaToolchain}/java")
pctx.SourcePathVariable("JarCmd", "${JavaToolchain}/jar")
- pctx.SourcePathVariable("JavadocCmd", "${JavaToolchain}/javadoc")
+ pctx.SourcePathVariable("JavadocCmd", "${Java11Toolchain}/javadoc")
pctx.SourcePathVariable("JlinkCmd", "${JavaToolchain}/jlink")
pctx.SourcePathVariable("JmodCmd", "${JavaToolchain}/jmod")
pctx.SourcePathVariable("JrtFsJar", "${JavaHome}/lib/jrt-fs.jar")
@@ -267,7 +272,7 @@
// JavadocCmd returns a SourcePath object with the path to the java command.
func JavadocCmd(ctx android.PathContext) android.SourcePath {
- return javaTool(ctx, "javadoc")
+ return java11Tool(ctx, "javadoc")
}
func javaTool(ctx android.PathContext, tool string) android.SourcePath {
@@ -281,6 +286,17 @@
}
+func java11Tool(ctx android.PathContext, tool string) android.SourcePath {
+ type javaToolKey string
+
+ key := android.NewCustomOnceKey(javaToolKey(tool))
+
+ return ctx.Config().OnceSourcePath(key, func() android.SourcePath {
+ return java11Toolchain(ctx).Join(ctx, tool)
+ })
+
+}
+
var javaToolchainKey = android.NewOnceKey("javaToolchain")
func javaToolchain(ctx android.PathContext) android.SourcePath {
@@ -289,6 +305,14 @@
})
}
+var java11ToolchainKey = android.NewOnceKey("java11Toolchain")
+
+func java11Toolchain(ctx android.PathContext) android.SourcePath {
+ return ctx.Config().OnceSourcePath(java11ToolchainKey, func() android.SourcePath {
+ return java11Home(ctx).Join(ctx, "bin")
+ })
+}
+
var javaHomeKey = android.NewOnceKey("javaHome")
func javaHome(ctx android.PathContext) android.SourcePath {
@@ -297,3 +321,12 @@
return android.PathForSource(ctx, ctx.Config().Getenv("ANDROID_JAVA_HOME"))
})
}
+
+var java11HomeKey = android.NewOnceKey("java11Home")
+
+func java11Home(ctx android.PathContext) android.SourcePath {
+ return ctx.Config().OnceSourcePath(java11HomeKey, func() android.SourcePath {
+ // This is set up and guaranteed by soong_ui
+ return android.PathForSource(ctx, ctx.Config().Getenv("ANDROID_JAVA11_HOME"))
+ })
+}
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 9b1f43b..fc95184 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -755,6 +755,7 @@
return rule.Command().
BuiltTool("dokka").
Flag(config.JavacVmFlags).
+ Flag("-J--add-opens=java.base/java.lang=ALL-UNNAMED").
Flag(srcJarDir.String()).
FlagWithInputList("-classpath ", dokkaClasspath, ":").
FlagWithArg("-format ", "dac").
diff --git a/tests/apex_comparison_tests.sh b/tests/apex_comparison_tests.sh
index ac3c177..6bc0165 100755
--- a/tests/apex_comparison_tests.sh
+++ b/tests/apex_comparison_tests.sh
@@ -60,7 +60,8 @@
BAZEL_OUT="$(call_bazel info output_path)"
-call_bazel build --config=bp2build --config=ci --config=android_arm \
+export TARGET_PRODUCT="module_arm"
+call_bazel build --config=bp2build --config=ci --config=android \
//packages/modules/adb/apex:com.android.adbd \
//system/timezone/apex:com.android.tzdata \
//build/bazel/examples/apex/minimal:build.bazel.examples.apex.minimal.apex
@@ -86,7 +87,7 @@
# Compare the outputs of `deapexer list`, which lists the contents of the apex filesystem image.
local SOONG_APEX="$SOONG_OUTPUT_DIR/$APEX"
- local BAZEL_APEX="$BAZEL_OUT/android_arm-fastbuild/bin/$APEX_DIR/$APEX"
+ local BAZEL_APEX="$BAZEL_OUT/android_target-fastbuild/bin/$APEX_DIR/$APEX"
local SOONG_LIST="$OUTPUT_DIR/soong.list"
local BAZEL_LIST="$OUTPUT_DIR/bazel.list"
diff --git a/tests/bp2build_bazel_test.sh b/tests/bp2build_bazel_test.sh
index 3cdf6aa..78af54d 100755
--- a/tests/bp2build_bazel_test.sh
+++ b/tests/bp2build_bazel_test.sh
@@ -103,7 +103,7 @@
fi
# NOTE: We don't actually use the extra BUILD file for anything here
- run_bazel build --package_path=out/soong/workspace //foo/...
+ run_bazel build --config=android --package_path=out/soong/workspace //foo/...
local the_answer_file="bazel-out/android_target-fastbuild/bin/foo/convertible_soong_module/the_answer.txt"
if [[ ! -f "${the_answer_file}" ]]; then
@@ -146,10 +146,10 @@
run_soong bp2build
- run_bazel build --package_path=out/soong/workspace //a:qq
+ run_bazel build --config=android --package_path=out/soong/workspace //a:qq
local -r output_mtime1=$(stat -c "%y" bazel-bin/a/_objs/qq/qq.o)
- run_bazel build --package_path=out/soong/workspace //a:qq
+ run_bazel build --config=android --package_path=out/soong/workspace //a:qq
local -r output_mtime2=$(stat -c "%y" bazel-bin/a/_objs/qq/qq.o)
if [[ "$output_mtime1" != "$output_mtime2" ]]; then
@@ -160,7 +160,7 @@
#define QQ 2
EOF
- run_bazel build --package_path=out/soong/workspace //a:qq
+ run_bazel build --config=android --package_path=out/soong/workspace //a:qq
local -r output_mtime3=$(stat -c "%y" bazel-bin/a/_objs/qq/qq.o)
if [[ "$output_mtime1" == "$output_mtime3" ]]; then