[media][audio_core] Add template for creating audio_core pacakge.
This allows different audio_core packages to be created that can
contain device-specific effects.
Test: fx run-test audio_fidl_tests
Change-Id: Ia094b88ca81a67a322c4d92e93845cd99840e547
diff --git a/src/media/audio/audio_core/BUILD.gn b/src/media/audio/audio_core/BUILD.gn
index ee6686f..902e9514 100644
--- a/src/media/audio/audio_core/BUILD.gn
+++ b/src/media/audio/audio_core/BUILD.gn
@@ -2,9 +2,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import("//build/config.gni")
-import("//build/package.gni")
import("//build/test/test_package.gni")
+import("//src/media/audio/audio_core_package.gni")
import("//third_party/cobalt/metrics_registry.gni")
declare_args() {
@@ -19,16 +18,6 @@
}
}
-config_data("default_audio_policy") {
- for_pkg = "audio_core"
- sources = [
- rebase_path("settings/default/audio_policy.json"),
- ]
- outputs = [
- "settings/default/audio_policy.json",
- ]
-}
-
action_foreach("json_schema_headers") {
visibility = [ ":*" ]
@@ -55,40 +44,11 @@
generate_cc = true
}
-package("audio_core") {
- deps = [
- "//src/media/audio/audio_core:audio_core_bin",
- "//src/media/audio/audio_core:default_audio_policy",
- "//src/media/audio/effects/passthrough:audio_effects",
- ]
-
- binaries = [
- {
- name = "audio_core"
- },
- ]
-
- loadable_modules = [
- {
- # This audio processing library is hosted in the audio_core process.
- name = "audio_effects.so"
- },
- ]
-
- meta = [
- {
- path = rebase_path("meta/audio_core.cmx")
- dest = "audio_core.cmx"
- },
-
- # The nodevfs cmx is used in some test environments where we would like to provide our own
- # devfs for the test. At this time we need to remove any dev sandbox metadata as appmgr does
- # not allow these namespaces to be overridden.
- {
- path = rebase_path("meta/audio_core_nodevfs.cmx")
- dest = "audio_core_nodevfs.cmx"
- },
- ]
+audio_core_package("audio_core") {
+ effects = {
+ target = "//src/media/audio/effects/passthrough:audio_effects"
+ name = "audio_effects.so"
+ }
}
source_set("audio_core_lib") {
diff --git a/src/media/audio/audio_core_package.gni b/src/media/audio/audio_core_package.gni
new file mode 100644
index 0000000..d011573
--- /dev/null
+++ b/src/media/audio/audio_core_package.gni
@@ -0,0 +1,84 @@
+# Copyright 2019 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config.gni")
+import("//build/package.gni")
+
+# Creates a 'audio_core' package. All packages created with this template will be identical, except
+# for the addition of the effects module.
+#
+# Parameters
+# effects (optional)
+# A scope defining a loadable module that implements audio effects.
+#
+# Ex:
+# audio_core_package("foo_audio") {
+# effects = {
+# target = "//path/to/effects/module"
+# name = "module_name.so"
+# }
+# }
+template("audio_core_package") {
+ package_name = target_name
+ config_data("${target_name}_default_audio_policy") {
+ for_pkg = package_name
+ sources = [
+ rebase_path(
+ "//src/media/audio/audio_core/settings/default/audio_policy.json"),
+ ]
+ outputs = [
+ "settings/default/audio_policy.json",
+ ]
+ }
+
+ package(target_name) {
+ deps = [
+ "//src/media/audio/audio_core:audio_core_bin",
+ ]
+ data_deps = [
+ ":${target_name}_default_audio_policy",
+ ]
+ if (defined(invoker.effects)) {
+ forward_variables_from(invoker, [ "effects" ])
+ assert(defined(effects.target))
+ deps += [ effects.target ]
+ } else {
+ # If a target doesn't provide effects, we won't end up using the 'invoker' variable and that
+ # causes some GN errors. We explicitly mark the invoker as unused in this situation to allow
+ # for this use case.
+ not_needed([ "invoker" ])
+ }
+
+ binaries = [
+ {
+ name = "audio_core"
+ },
+ ]
+
+ if (defined(effects)) {
+ assert(defined(effects.name))
+ loadable_modules = [
+ {
+ name = effects.name
+ },
+ ]
+ }
+
+ meta = [
+ {
+ path = rebase_path("//src/media/audio/audio_core/meta/audio_core.cmx")
+ dest = "audio_core.cmx"
+ },
+
+ # The nodevfs cmx is used in some test environments where we would like to provide our own
+ # devfs for the test. At this time we need to remove any dev sandbox metadata as appmgr does
+ # not allow these namespaces to be overridden.
+ {
+ path = rebase_path(
+ "//src/media/audio/audio_core/meta/audio_core_nodevfs.cmx")
+ dest = "audio_core_nodevfs.cmx"
+ },
+ ]
+ }
+}