# 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() { # Location of MCUXpresso SDK directory dir_pw_third_party_mcuxpresso = "" # 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 = [ "gn", 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", ]) } }