| # 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_deps 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 |
| } |
| |
| if (defined(invoker.libs)) { |
| libs = invoker.libs |
| } |
| |
| 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) ] |
| } |
| } |
| } |
| } |