| Index: mojo/public/mojo_sdk.gni
|
| diff --git a/mojo/public/mojo_sdk.gni b/mojo/public/mojo_sdk.gni
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..eab8037290cf806edecc9cecc1257b9abcc06f04
|
| --- /dev/null
|
| +++ b/mojo/public/mojo_sdk.gni
|
| @@ -0,0 +1,136 @@
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# The absolute path to the directory containing the mojo public SDK (i.e., the
|
| +# directory containing mojo/public). The build files within the Mojo public
|
| +# SDK use this variable to allow themselves to be parameterized by the location
|
| +# of the public SDK within a client repo.
|
| +mojo_root = get_path_info("../..", "abspath")
|
| +
|
| +# Takes as input a "source_set" that includes dependencies that are relative to
|
| +# the parent directory of the Mojo public SDK (given in |mojo_sdk_deps|).
|
| +# Generates a source_set that has the mojo_sdk_deps added as ordinary deps
|
| +# rebased to the current directory.
|
| +# By default, restricts the entries that are given in invoker.deps and
|
| +# invoker.public_deps to be only within the same file and on a small set of
|
| +# whitelisted external dependencies. This check can be elided by setting
|
| +# restrict_external_dependencies to false in the invoker. DO NOT DO THIS in
|
| +# //mojo/public.
|
| +#
|
| +# Example of a mojo_sdk_source_set:
|
| +#
|
| +# mojo_sdk_source_set("foo") {
|
| +# sources = [
|
| +# "foo.h",
|
| +# "foo.cc",
|
| +# ]
|
| +#
|
| +# # Same-file deps are specified in the ordinary way. Any external
|
| +# dependencies are specified the same way (although in general there should
|
| +# be very few of these).
|
| +# deps = [
|
| +# ":bar",
|
| +# ]
|
| +#
|
| +# # Mojo SDK deps are specified relative to the containing directory of the
|
| +# SDK via mojo_sdk_deps.
|
| +# mojo_sdk_deps = [
|
| +# "mojo/public/cpp/bindings",
|
| +# "mojo/public/cpp/environment",
|
| +# "mojo/public/cpp/system",
|
| +# ]
|
| +# }
|
| +#
|
| +template("mojo_sdk_source_set") {
|
| + source_set(target_name) {
|
| + if (defined(invoker.visibility)) {
|
| + visibility = invoker.visibility
|
| + } else {
|
| + visibility = [ "*" ]
|
| + }
|
| + if (defined(invoker.mojo_sdk_visibility)) {
|
| + foreach(sdk_target, invoker.mojo_sdk_visibility) {
|
| + # Check that the SDK target was not mistakenly given as an absolute
|
| + # path.
|
| + assert(get_path_info(sdk_target, "abspath") != sdk_target)
|
| + visibility += [ rebase_path(sdk_target, ".", mojo_root) ]
|
| + }
|
| + }
|
| +
|
| + if (defined(invoker.testonly)) {
|
| + testonly = invoker.testonly
|
| + }
|
| +
|
| + if (defined(invoker.sources)) {
|
| + sources = invoker.sources
|
| + }
|
| +
|
| + if (defined(invoker.defines)) {
|
| + defines = invoker.defines
|
| + }
|
| +
|
| + public_configs = [
|
| + rebase_path("mojo/public/build/config:mojo_sdk", ".", mojo_root),
|
| + ]
|
| + if (defined(invoker.public_configs)) {
|
| + public_configs += invoker.public_configs
|
| + }
|
| +
|
| + if (defined(invoker.configs)) {
|
| + configs += invoker.configs
|
| + }
|
| +
|
| + if (defined(invoker.allow_circular_includes_from)) {
|
| + allow_circular_includes_from = invoker.allow_circular_includes_from
|
| + }
|
| +
|
| + if (defined(invoker.public_deps) || (defined(invoker.deps))) {
|
| + restrict_external_deps = true
|
| + if (defined(invoker.restrict_external_deps)) {
|
| + restrict_external_deps = invoker.restrict_external_deps
|
| + }
|
| + }
|
| +
|
| + public_deps = []
|
| + if (defined(invoker.public_deps)) {
|
| + foreach(dep, invoker.public_deps) {
|
| + if (restrict_external_deps) {
|
| + # The only deps that are not specified relative to the location of
|
| + # the Mojo SDK should be on targets within the same file or on a
|
| + # whitelisted set of external dependencies.
|
| + assert(get_path_info(dep, "dir") == ".")
|
| + }
|
| + public_deps += [ dep ]
|
| + }
|
| + }
|
| + if (defined(invoker.mojo_sdk_public_deps)) {
|
| + foreach(sdk_dep, invoker.mojo_sdk_public_deps) {
|
| + # Check that the SDK dep was not mistakenly given as an absolute path.
|
| + assert(get_path_info(sdk_dep, "abspath") != sdk_dep)
|
| + public_deps += [ rebase_path(sdk_dep, ".", mojo_root) ]
|
| + }
|
| + }
|
| +
|
| + deps = []
|
| + if (defined(invoker.deps)) {
|
| + foreach(dep, invoker.deps) {
|
| + if (restrict_external_deps) {
|
| + # The only deps that are not specified relative to the location of
|
| + # the Mojo SDK should be on targets within the same file or on a
|
| + # whitelisted set of external dependencies.
|
| + dep_dir = get_path_info(dep, "dir")
|
| + assert(dep_dir == "." || dep == "//testing/gtest")
|
| + }
|
| + deps += [ dep ]
|
| + }
|
| + }
|
| + if (defined(invoker.mojo_sdk_deps)) {
|
| + foreach(sdk_dep, invoker.mojo_sdk_deps) {
|
| + # Check that the SDK dep was not mistakenly given as an absolute path.
|
| + assert(get_path_info(sdk_dep, "abspath") != sdk_dep)
|
| + deps += [ rebase_path(sdk_dep, ".", mojo_root) ]
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|