blob: 27e597e1cd9bc2555b5310c863193b8652799db9 [file] [log] [blame]
# Copyright 2021 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import("//build_overrides/pigweed.gni")
import("$dir_pw_build/target_types.gni")
declare_args() {
# If compiling a project against an MCUXpresso SDK, this variable can be set
# to the name of the pw_source_set you create using `pw_mcuxpresso_sdk` to
# enable additional Pigweed support.
pw_third_party_mcuxpresso_SDK = ""
}
# Creates a source set for an MCUXpresso SDK.
#
# In addition to the named source set, two configs are created; one named
# `${target_name}__defines` contains pre-processor definitions for the SDK
# project and the other named `${target_name}__includes` defines the include
# paths. These may be used to break circular dependencies.
#
# Args:
# manifest: The MCUXpresso SDK manifest XML file describing the components of
# the SDK.
#
# sdk_dir: Optional path to directory containing the SDK. When ommitted the
# parent of `manifest` is used, which is usually the correct definition.
#
# include: list of SDK components to include in the project.
#
# exclude: Optional list of SDK components to exclude from the project.
#
# allow_circular_includes_from, configs, deps, public_configs, public_deps:
# Optional extra properties for the source set.
#
# Example:
#
# pw_mcuxpresso_sdk("sample_project_sdk") {
# manifest = "$dir_pw_third_party/mcuxpresso/EVK-MIMXRT595_manifest_v3_8.xml"
# include = [ "project_template.evkmimxrt595.MIMXRT595S" ]
# }
#
# pw_executable("hello_world") {
# sources = [ "hello_world.cc "]
# deps = [ ":sample_project_sdk" ]
# }
#
template("pw_mcuxpresso_sdk") {
assert(defined(invoker.manifest), "pw_mcuxpresso_sdk requires a manifest")
if (defined(invoker.sdk_dir)) {
_sdk_dir = invoker.sdk_dir
} else {
_sdk_dir = get_path_info(invoker.manifest, "dir")
}
_script_args = [
"project",
rebase_path(invoker.manifest),
"--prefix=$_sdk_dir",
]
if (defined(invoker.include)) {
foreach(dependency, invoker.include) {
_script_args += [
"--include",
dependency,
]
}
}
if (defined(invoker.exclude)) {
foreach(dependency, invoker.exclude) {
_script_args += [
"--exclude",
dependency,
]
}
}
# This script finds the components distributed with the SDK.
_script = "$dir_pw_build_mcuxpresso/py/pw_build_mcuxpresso/__main__.py"
_project = exec_script(_script, _script_args, "scope", [ invoker.manifest ])
config("${target_name}__defines") {
forward_variables_from(_project, [ "defines" ])
}
config("${target_name}__includes") {
forward_variables_from(_project, [ "include_dirs" ])
}
pw_source_set(target_name) {
forward_variables_from(_project,
[
"libs",
"public",
"sources",
])
public_configs = [
":${target_name}__defines",
":${target_name}__includes",
]
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
forward_variables_from(invoker,
[
"configs",
"deps",
"public_deps",
"allow_circular_includes_from",
])
}
}