[sdk] Allow C++ source/prebuilt libraries to specify an API golden file.
Bug: DX-685
Change-Id: Ic8ab7f822eb1c594090e8349f29fbc896ae16a47
diff --git a/build/cpp/sdk_shared_library.gni b/build/cpp/sdk_shared_library.gni
index 32cf233..f5c9c12 100644
--- a/build/cpp/sdk_shared_library.gni
+++ b/build/cpp/sdk_shared_library.gni
@@ -13,6 +13,11 @@
# Publication level of the library in SDKs.
# See //build/sdk/sdk_atom.gni.
#
+# api (optional)
+# Path to the file representing the API of this library.
+# This file is used to ensure modifications to the library's API are
+# explicitly acknowledged.
+#
# no_headers (optional)
# Whether to include the library's headers in the SDK.
# Defaults to false.
@@ -47,6 +52,7 @@
forward_variables_from(invoker,
"*",
[
+ "api",
"category",
"include_base",
"no_headers",
@@ -138,8 +144,8 @@
}
}
}
- sdk_headers = []
- sdk_files = []
+ sdk_metadata_headers = []
+ sdk_header_files = []
foreach(header, all_headers) {
include_base = "include"
if (defined(invoker.include_base)) {
@@ -147,8 +153,8 @@
}
destination = rebase_path(header, include_base)
header_dest = "$file_base/include/$destination"
- sdk_headers += [ header_dest ]
- sdk_files += [
+ sdk_metadata_headers += [ header_dest ]
+ sdk_header_files += [
{
source = header
dest = header_dest
@@ -161,7 +167,7 @@
lib_name = "lib$output_name.so"
link_lib = "$prebuilt_base/lib/$lib_name"
dist_lib = "$prebuilt_base/dist/$lib_name"
- sdk_files += [
+ sdk_files = sdk_header_files + [
{
# TODO(TO-791): put ABI stubs under lib/, not the full thing.
source = "$shared_out_dir/$lib_name"
@@ -197,7 +203,7 @@
"--include-dir",
"$file_base/include",
"--deps",
- ] + sdk_metas + [ "--headers" ] + sdk_headers +
+ ] + sdk_metas + [ "--headers" ] + sdk_metadata_headers +
[
"--arch",
target_cpu,
@@ -221,6 +227,12 @@
category = invoker.category
+ if (defined(invoker.api) && !no_headers) {
+ api = invoker.api
+
+ api_contents = sdk_header_files
+ }
+
meta = {
source = metadata_file
dest = "$file_base/meta.json"
diff --git a/build/cpp/sdk_source_set.gni b/build/cpp/sdk_source_set.gni
index 35ef4c41..8f1b931 100644
--- a/build/cpp/sdk_source_set.gni
+++ b/build/cpp/sdk_source_set.gni
@@ -15,6 +15,11 @@
# Publication level of the library in SDKs.
# See //build/sdk/sdk_atom.gni.
#
+# api (optional)
+# Path to the file representing the API of this library.
+# This file is used to ensure modifications to the library's API are
+# explicitly acknowledged.
+#
# sdk_name (required)
# Name of the library in the SDK.
#
@@ -38,6 +43,7 @@
forward_variables_from(invoker,
"*",
[
+ "api",
"category",
"include_base",
"sdk_name",
@@ -87,8 +93,9 @@
# Determine destinations in the SDK for headers and sources.
file_base = "pkg/${invoker.sdk_name}"
- sdk_headers = []
- sdk_sources = []
+ sdk_metadata_headers = []
+ sdk_metadata_sources = []
+ sdk_header_files = []
sdk_files = []
foreach(header, all_headers) {
include_base = "include"
@@ -97,16 +104,17 @@
}
relative_destination = rebase_path(header, include_base)
destination = "$file_base/include/$relative_destination"
- sdk_headers += [ destination ]
- sdk_files += [
+ sdk_metadata_headers += [ destination ]
+ sdk_header_files += [
{
source = header
dest = destination
},
]
}
+ sdk_files += sdk_header_files
foreach(source, all_sources) {
- sdk_sources += [ "$file_base/$source" ]
+ sdk_metadata_sources += [ "$file_base/$source" ]
sdk_files += [
{
source = source
@@ -138,8 +146,8 @@
"$file_base/include",
]
args += [ "--deps" ] + sdk_metas
- args += [ "--sources" ] + sdk_sources
- args += [ "--headers" ] + sdk_headers
+ args += [ "--sources" ] + sdk_metadata_sources
+ args += [ "--headers" ] + sdk_metadata_headers
deps = sdk_deps
}
@@ -154,6 +162,12 @@
id = "sdk://pkg/${invoker.sdk_name}"
category = invoker.category
+ if (defined(invoker.api)) {
+ api = invoker.api
+
+ api_contents = sdk_header_files
+ }
+
meta = {
source = metadata_file
dest = "$file_base/meta.json"