Commit 7ecf2923 authored by Devlin Cronin's avatar Devlin Cronin Committed by Commit Bot

[Extensions Schema Compiler] Extract C++ Type Generation

Extract C++ type generation from the json_schema_api gni
template into a separate generate_types gni template. This has the
advantage of cleaning up which arguments are necessary and used for
the template, as well as being able to isolate the different
generation steps (which may have different dependencies or
dependents).

As part of this, introduce separate "bulk" `api` targets in each
of the API directories, which each dependent can depend on. This
obviates the need to depend on e.g. `api` and `api_registration`.

A follow up will break up the JSON string generation bundle and the
extension function registration bundle.

Bug: 864576

Change-Id: I50a1fbe059ec5b7d73c405b230a221c1c6ce3af1
Reviewed-on: https://chromium-review.googlesource.com/1150930
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Reviewed-by: default avatarAlbert Chaulk <achaulk@chromium.org>
Reviewed-by: default avatarIstiaque Ahmed <lazyboy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#580799}
parent c0a3f1b6
...@@ -12,9 +12,10 @@ import("//tools/json_schema_compiler/json_schema_api.gni") ...@@ -12,9 +12,10 @@ import("//tools/json_schema_compiler/json_schema_api.gni")
assert(enable_extensions) assert(enable_extensions)
json_schema_api("api") { # TODO(devlin): Enforce visibility restrictions on more of these targets?
json_schema_api("generated_api_bundles") {
sources = chrome_extensions_api_schema_sources sources = chrome_extensions_api_schema_sources
schemas = true
bundle = true bundle = true
configs = [ "//build/config:precompiled_headers" ] configs = [ "//build/config:precompiled_headers" ]
bundle_name = "Chrome" bundle_name = "Chrome"
...@@ -48,6 +49,21 @@ json_schema_api("api") { ...@@ -48,6 +49,21 @@ json_schema_api("api") {
deps = [ deps = [
"//extensions/common/api", "//extensions/common/api",
] ]
visibility = [ ":api" ]
}
generated_types("generated_api_types") {
sources = chrome_extensions_api_schema_sources
configs = [ "//build/config:precompiled_headers" ]
schema_include_rules = chrome_extensions_api_schema_include_rules
root_namespace = chrome_extensions_api_root_namespace
deps = [
"//extensions/common/api",
]
visibility = [ ":api" ]
} }
json_features("api_features") { json_features("api_features") {
...@@ -74,6 +90,15 @@ json_features("manifest_features") { ...@@ -74,6 +90,15 @@ json_features("manifest_features") {
] ]
} }
# Public Targets
group("api") {
public_deps = [
":generated_api_bundles",
":generated_api_types",
]
}
group("extensions_features") { group("extensions_features") {
public_deps = [ public_deps = [
":api_features", ":api_features",
......
...@@ -308,7 +308,6 @@ cast_source_set("browser") { ...@@ -308,7 +308,6 @@ cast_source_set("browser") {
deps += [ deps += [
"//chromecast/common/extensions_api:api", "//chromecast/common/extensions_api:api",
"//chromecast/common/extensions_api:api_registration",
"//components/guest_view/browser", "//components/guest_view/browser",
"//components/keyed_service/content", "//components/keyed_service/content",
"//components/pref_registry", "//components/pref_registry",
......
...@@ -42,12 +42,11 @@ cast_source_set("common") { ...@@ -42,12 +42,11 @@ cast_source_set("common") {
deps += [ deps += [
"//chromecast/common/extensions_api:api", "//chromecast/common/extensions_api:api",
"//chromecast/common/extensions_api:api_registration",
"//chromecast/common/extensions_api:extensions_features", "//chromecast/common/extensions_api:extensions_features",
"//components/version_info", "//components/version_info",
"//extensions:extensions_resources_grd_grit", "//extensions:extensions_resources_grd_grit",
"//extensions/common", "//extensions/common",
"//extensions/common/api:generated_api", "//extensions/common/api",
"//extensions/shell:resources", "//extensions/shell:resources",
"//extensions/shell:resources_grit", "//extensions/shell:resources_grit",
] ]
......
...@@ -31,10 +31,9 @@ root_namespace = "extensions::cast::api::%(namespace)s" ...@@ -31,10 +31,9 @@ root_namespace = "extensions::cast::api::%(namespace)s"
extensions_api_uncompiled_sources = [ "extension.json" ] extensions_api_uncompiled_sources = [ "extension.json" ]
json_schema_api("api") { json_schema_api("generated_api_strings_bundle") {
sources = schema_sources sources = schema_sources
uncompiled_sources = extensions_api_uncompiled_sources uncompiled_sources = extensions_api_uncompiled_sources
schemas = true
bundle = true bundle = true
bundle_name = "Cast" bundle_name = "Cast"
uncompiled_bundle_schema_sources = [ "tts.json" ] uncompiled_bundle_schema_sources = [ "tts.json" ]
...@@ -43,19 +42,30 @@ json_schema_api("api") { ...@@ -43,19 +42,30 @@ json_schema_api("api") {
deps = [ deps = [
"//extensions/common/api", "//extensions/common/api",
] ]
visibility = [ ":api" ]
} }
json_schema_api("api_registration") { json_schema_api("generated_api_registration_bundle") {
sources = schema_sources sources = schema_sources
impl_dir = "//chromecast/browser/extensions/api" impl_dir = "//chromecast/browser/extensions/api"
bundle_registration = true bundle_registration = true
bundle_name = "Cast" bundle_name = "Cast"
deps = [ deps = [
":api",
"//extensions/common", "//extensions/common",
"//extensions/common/api", "//extensions/common/api",
] ]
visibility = [ ":api" ]
}
generated_types("generated_api_types") {
sources = schema_sources
schema_include_rules = extensions_api_schema_include_rules
deps = [
"//extensions/common/api",
]
visibility = [ ":api" ]
} }
json_features("cast_api_features") { json_features("cast_api_features") {
...@@ -82,6 +92,16 @@ json_features("cast_manifest_features") { ...@@ -82,6 +92,16 @@ json_features("cast_manifest_features") {
] ]
} }
# Public Targets
group("api") {
public_deps = [
":generated_api_registration_bundle",
":generated_api_strings_bundle",
":generated_api_types",
]
}
group("extensions_features") { group("extensions_features") {
public_deps = [ public_deps = [
":cast_api_features", ":cast_api_features",
......
...@@ -11,9 +11,10 @@ import("//tools/json_schema_compiler/json_schema_api.gni") ...@@ -11,9 +11,10 @@ import("//tools/json_schema_compiler/json_schema_api.gni")
assert(enable_extensions) assert(enable_extensions)
json_schema_api("generated_api") { # TODO(devlin): Enforce visibility restrictions on more of these targets?
json_schema_api("generated_api_bundles") {
sources = extensions_api_schema_files sources = extensions_api_schema_files
schemas = true
bundle = true bundle = true
bundle_name = "" bundle_name = ""
root_namespace = extensions_api_root_namespace root_namespace = extensions_api_root_namespace
...@@ -24,19 +25,22 @@ json_schema_api("generated_api") { ...@@ -24,19 +25,22 @@ json_schema_api("generated_api") {
"//base", "//base",
"//extensions/buildflags", "//extensions/buildflags",
] ]
visibility = [ ":api" ]
} }
mojom("mojom") { generated_types("generated_api_types") {
sources = [ sources = extensions_api_schema_files
"mime_handler.mojom", root_namespace = extensions_api_root_namespace
deps = [
"//base",
"//extensions/buildflags",
] ]
visibility = [ ":api" ]
} }
group("api") { mojom("mojom") {
public_deps = [ sources = [
":generated_api", "mime_handler.mojom",
":mojom",
"//extensions/buildflags",
] ]
} }
...@@ -72,6 +76,17 @@ json_features("behavior_features") { ...@@ -72,6 +76,17 @@ json_features("behavior_features") {
] ]
} }
# Public Targets
group("api") {
public_deps = [
":generated_api_bundles",
":generated_api_types",
":mojom",
"//extensions/buildflags",
]
}
group("extensions_features") { group("extensions_features") {
public_deps = [ public_deps = [
":api_features", ":api_features",
......
...@@ -65,7 +65,6 @@ source_set("app_shell_lib") { ...@@ -65,7 +65,6 @@ source_set("app_shell_lib") {
"//extensions/renderer", "//extensions/renderer",
"//extensions/shell/browser/system_logs", "//extensions/shell/browser/system_logs",
"//extensions/shell/common/api", "//extensions/shell/common/api",
"//extensions/shell/common/api:api_registration",
"//extensions/shell/common/api:extensions_features", "//extensions/shell/common/api:extensions_features",
"//google_apis", "//google_apis",
"//third_party/blink/public:blink", "//third_party/blink/public:blink",
......
...@@ -9,26 +9,36 @@ import("//tools/json_schema_compiler/json_schema_api.gni") ...@@ -9,26 +9,36 @@ import("//tools/json_schema_compiler/json_schema_api.gni")
assert(enable_extensions, assert(enable_extensions,
"Cannot depend on extensions because enable_extensions=false.") "Cannot depend on extensions because enable_extensions=false.")
# TODO(devlin): Enforce visibility restrictions on more of these targets?
schema_sources = [ "identity.idl" ] schema_sources = [ "identity.idl" ]
root_namespace = "extensions::shell::api::%(namespace)s" root_namespace = "extensions::shell::api::%(namespace)s"
json_schema_api("api") { json_schema_api("generated_api_registration_bundle") {
sources = schema_sources
schemas = true
bundle = true
bundle_name = "Shell"
}
json_schema_api("api_registration") {
sources = schema_sources sources = schema_sources
impl_dir = "//extensions/shell/browser/api" impl_dir = "//extensions/shell/browser/api"
bundle_registration = true bundle_registration = true
bundle_name = "Shell" bundle_name = "Shell"
deps = [ deps = [
":api",
"//extensions/common", "//extensions/common",
] ]
visibility = [ ":api" ]
}
json_schema_api("generated_api_strings_bundle") {
sources = schema_sources
bundle = true
bundle_name = "Shell"
visibility = [ ":api" ]
}
generated_types("generated_api_types") {
sources = schema_sources
visibility = [ ":api" ]
} }
json_features("shell_api_features") { json_features("shell_api_features") {
...@@ -39,6 +49,16 @@ json_features("shell_api_features") { ...@@ -39,6 +49,16 @@ json_features("shell_api_features") {
] ]
} }
# Public Targets
group("api") {
public_deps = [
":generated_api_registration_bundle",
":generated_api_strings_bundle",
":generated_api_types",
]
}
group("extensions_features") { group("extensions_features") {
public_deps = [ public_deps = [
":shell_api_features", ":shell_api_features",
......
...@@ -9,7 +9,7 @@ import("//tools/json_schema_compiler/json_schema_api.gni") ...@@ -9,7 +9,7 @@ import("//tools/json_schema_compiler/json_schema_api.gni")
assert(enable_extensions) assert(enable_extensions)
json_schema_api("api") { generated_types("generated_types") {
visibility = [ ":*" ] visibility = [ ":*" ]
sources = [ sources = [
...@@ -34,7 +34,6 @@ json_schema_api("api") { ...@@ -34,7 +34,6 @@ json_schema_api("api") {
"simple_api.json", "simple_api.json",
] ]
schemas = true
root_namespace = "test::api::%(namespace)s" root_namespace = "test::api::%(namespace)s"
deps = [ deps = [
...@@ -79,7 +78,7 @@ source_set("unit_tests") { ...@@ -79,7 +78,7 @@ source_set("unit_tests") {
] ]
deps = [ deps = [
":api", ":generated_types",
"//base", "//base",
"//testing/gtest", "//testing/gtest",
] ]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment