| # Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| import("runtime_args.gni") |
| |
| _dart_runtime = get_path_info("../runtime", "abspath") |
| |
| _base_config = [ |
| "$_dart_runtime:dart_arch_config", |
| "$_dart_runtime:dart_config", |
| "$_dart_runtime:dart_os_config", |
| ] |
| |
| _base_fuchsia_config = [ |
| "$_dart_runtime:dart_arch_config", |
| "$_dart_runtime:dart_config", |
| "$_dart_runtime:dart_os_fuchsia_config", |
| ] |
| |
| _base_host_targeting_host_config = [ "$_dart_runtime:dart_config" ] |
| |
| _maybe_product = [ "$_dart_runtime:dart_maybe_product_config" ] |
| |
| _product = [ "$_dart_runtime:dart_product_config" ] |
| |
| _jit_config = _base_config + _maybe_product |
| |
| _jit_product_config = _base_config + _product |
| |
| _base_libfuzzer_config = [ "$_dart_runtime:dart_libfuzzer_config" ] |
| |
| _libfuzzer_config = _base_config + _base_libfuzzer_config |
| |
| _precompiled_runtime_config = |
| _base_config + [ |
| "$_dart_runtime:dart_maybe_product_config", |
| "$_dart_runtime:dart_precompiled_runtime_config", |
| ] |
| |
| _precompiled_runtime_product_config = |
| _base_config + [ |
| "$_dart_runtime:dart_precompiled_runtime_config", |
| "$_dart_runtime:dart_product_config", |
| ] |
| |
| _precompiler_base = [ "$_dart_runtime:dart_precompiler_config" ] |
| |
| _precompiler_config = _base_config + _precompiler_base + _maybe_product |
| |
| _precompiler_testing_config = |
| _precompiler_config + [ "$_dart_runtime:dart_testing_config" ] |
| |
| _precompiler_product_config = _base_config + _precompiler_base + _product |
| |
| _precompiler_fuchsia_config = |
| _base_fuchsia_config + _precompiler_base + _maybe_product |
| |
| _precompiler_product_fuchsia_config = |
| _base_fuchsia_config + _precompiler_base + _product |
| |
| _precompiler_host_targeting_host_config = |
| _base_host_targeting_host_config + _precompiler_base + _maybe_product |
| |
| _precompiler_product_host_targeting_host_config = |
| _base_host_targeting_host_config + _precompiler_base + _product |
| |
| _all_configs = [ |
| { |
| suffix = "_jit" |
| configs = _jit_config |
| snapshot = true |
| compiler = true |
| is_product = false |
| }, |
| { |
| suffix = "_jit_product" |
| configs = _jit_product_config |
| snapshot = true |
| compiler = true |
| is_product = true |
| }, |
| { |
| suffix = "_precompiled_runtime" |
| configs = _precompiled_runtime_config |
| snapshot = true |
| compiler = false |
| is_product = false |
| }, |
| { |
| suffix = "_precompiled_runtime_product" |
| configs = _precompiled_runtime_product_config |
| snapshot = true |
| compiler = false |
| is_product = true |
| }, |
| { |
| suffix = "_precompiler" |
| configs = _precompiler_config |
| snapshot = false |
| compiler = true |
| is_product = false |
| }, |
| { |
| suffix = "_precompiler_testing" |
| configs = _precompiler_testing_config |
| snapshot = false |
| compiler = true |
| is_product = false |
| }, |
| { |
| suffix = "_precompiler_product" |
| configs = _precompiler_product_config |
| snapshot = false |
| compiler = true |
| is_product = true |
| }, |
| { |
| suffix = "_precompiler_fuchsia" |
| configs = _precompiler_fuchsia_config |
| snapshot = false |
| compiler = true |
| is_product = false |
| }, |
| { |
| suffix = "_precompiler_product_fuchsia" |
| configs = _precompiler_product_fuchsia_config |
| snapshot = false |
| compiler = true |
| is_product = true |
| }, |
| { |
| suffix = "_precompiler_host_targeting_host" |
| configs = _precompiler_host_targeting_host_config |
| snapshot = false |
| compiler = true |
| is_product = false |
| }, |
| { |
| suffix = "_precompiler_product_host_targeting_host" |
| configs = _precompiler_product_host_targeting_host_config |
| snapshot = false |
| compiler = true |
| is_product = true |
| }, |
| { |
| suffix = "_libfuzzer" |
| configs = _libfuzzer_config |
| snapshot = true |
| compiler = true |
| is_product = false |
| }, |
| ] |
| |
| # This template creates a target for each of the configurations listed above. |
| # For example: |
| # |
| # library_for_all_configs("libfoo") { |
| # target_type = "source_set" |
| # sources = [ "foo.c" ] |
| # configurable_deps [ ":libbar" ] |
| # } |
| # |
| # will make a source_set target for libfoo_jit, libfoo_jit_product, etc. that |
| # depends on libbar_jit, libbar_jit_product etc. respectively. |
| # |
| # Parameters |
| # |
| # target_type (required): |
| # The target declaration or template to repeat for each configuration. |
| # |
| # configurable_deps (optional): |
| # Dependencies of this target, which are themselves generated by |
| # library_for_all_configs(). The listed dependencies will be suffixed with |
| # a string that matches the configuration. |
| # |
| # extra_deps (optional): |
| # Regular additional deps that don't receive special treatment. |
| # |
| # extra_configs (optional): |
| # Any configs needed in addition to the ones above. |
| # |
| # snapshot_sources (optional): |
| # Additional sources to include when the configuration has a snapshot. |
| # |
| template("library_for_all_configs") { |
| assert(defined(invoker.target_type)) |
| extra_configs = [] |
| if (defined(invoker.extra_configs)) { |
| extra_configs += invoker.extra_configs |
| } |
| configurable_deps = [] |
| if (defined(invoker.configurable_deps)) { |
| configurable_deps += invoker.configurable_deps |
| } |
| extra_deps = [] |
| if (defined(invoker.extra_deps)) { |
| extra_deps += invoker.extra_deps |
| } |
| extra_product_deps = [] |
| if (defined(invoker.extra_product_deps)) { |
| extra_product_deps += invoker.extra_product_deps |
| } |
| extra_nonproduct_deps = [] |
| if (defined(invoker.extra_nonproduct_deps)) { |
| extra_nonproduct_deps += invoker.extra_nonproduct_deps |
| } |
| foreach(conf, _all_configs) { |
| target(invoker.target_type, "${target_name}${conf.suffix}") { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "extra_configs", |
| "extra_deps", |
| "configurable_deps", |
| ]) |
| configs += conf.configs + extra_configs |
| configured_deps = [] |
| foreach(dep, configurable_deps) { |
| configured_deps += [ "${dep}${conf.suffix}" ] |
| } |
| if (defined(compiler_lib)) { |
| if (conf.compiler) { |
| configured_deps += [ "${compiler_lib}${conf.suffix}" ] |
| } else { |
| not_needed([ "compiler_lib" ]) |
| } |
| } |
| deps = configured_deps + extra_deps |
| |
| # The "dart_maybe_product_config" and "dart_product_config" configs in |
| # runtime/BUILD.gn have logic to avoid building PRODUCT artifacts in debug |
| # builds. |
| if (conf.is_product && !dart_debug) { |
| not_needed([ "extra_nonproduct_deps" ]) |
| deps += extra_product_deps |
| } else { |
| not_needed([ "extra_product_deps" ]) |
| deps += extra_nonproduct_deps |
| } |
| if (conf.snapshot) { |
| if (defined(snapshot_sources)) { |
| sources += snapshot_sources |
| } |
| } else { |
| if (defined(snapshot_sources)) { |
| not_needed([ "snapshot_sources" ]) |
| } |
| } |
| } |
| } |
| } |
| |
| template("library_for_all_configs_with_compiler") { |
| assert(defined(invoker.target_type)) |
| extra_configs = [] |
| if (defined(invoker.extra_configs)) { |
| extra_configs += invoker.extra_configs |
| } |
| configurable_deps = [] |
| if (defined(invoker.configurable_deps)) { |
| configurable_deps += invoker.configurable_deps |
| } |
| extra_deps = [] |
| if (defined(invoker.extra_deps)) { |
| extra_deps += invoker.extra_deps |
| } |
| extra_product_deps = [] |
| if (defined(invoker.extra_product_deps)) { |
| extra_product_deps += invoker.extra_product_deps |
| } |
| extra_nonproduct_deps = [] |
| if (defined(invoker.extra_nonproduct_deps)) { |
| extra_nonproduct_deps += invoker.extra_nonproduct_deps |
| } |
| foreach(conf, _all_configs) { |
| if (conf.compiler) { |
| target(invoker.target_type, "${target_name}${conf.suffix}") { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "extra_configs", |
| "extra_deps", |
| "configurable_deps", |
| ]) |
| configs += conf.configs + extra_configs |
| configured_deps = [] |
| foreach(dep, configurable_deps) { |
| configured_deps += [ "${dep}${conf.suffix}" ] |
| } |
| deps = configured_deps + extra_deps |
| |
| # The "dart_maybe_product_config" and "dart_product_config" configs in |
| # runtime/BUILD.gn have logic to avoid building PRODUCT artifacts in |
| # debug builds. |
| if (conf.is_product && !dart_debug) { |
| not_needed([ "extra_nonproduct_deps" ]) |
| deps += extra_product_deps |
| } else { |
| not_needed([ "extra_product_deps" ]) |
| deps += extra_nonproduct_deps |
| } |
| if (conf.snapshot) { |
| if (defined(snapshot_sources)) { |
| sources += snapshot_sources |
| } |
| } else { |
| if (defined(snapshot_sources)) { |
| not_needed([ "snapshot_sources" ]) |
| } |
| } |
| } |
| } |
| } |
| } |