xref: /aosp_15_r20/external/pigweed/third_party/mcuxpresso/mcuxpresso.gni (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard Workerdeclare_args() {
20*61c4878aSAndroid Build Coastguard Worker  # Location of MCUXpresso SDK directory
21*61c4878aSAndroid Build Coastguard Worker  dir_pw_third_party_mcuxpresso = ""
22*61c4878aSAndroid Build Coastguard Worker
23*61c4878aSAndroid Build Coastguard Worker  # If compiling a project against an MCUXpresso SDK, this variable can be set
24*61c4878aSAndroid Build Coastguard Worker  # to the name of the pw_source_set you create using `pw_mcuxpresso_sdk` to
25*61c4878aSAndroid Build Coastguard Worker  # enable additional Pigweed support.
26*61c4878aSAndroid Build Coastguard Worker  pw_third_party_mcuxpresso_SDK = ""
27*61c4878aSAndroid Build Coastguard Worker}
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard Worker# Creates a source set for an MCUXpresso SDK.
30*61c4878aSAndroid Build Coastguard Worker#
31*61c4878aSAndroid Build Coastguard Worker# In addition to the named source set, two configs are created; one named
32*61c4878aSAndroid Build Coastguard Worker# `${target_name}__defines` contains pre-processor definitions for the SDK
33*61c4878aSAndroid Build Coastguard Worker# project and the other named `${target_name}__includes` defines the include
34*61c4878aSAndroid Build Coastguard Worker# paths. These may be used to break circular dependencies.
35*61c4878aSAndroid Build Coastguard Worker#
36*61c4878aSAndroid Build Coastguard Worker# Args:
37*61c4878aSAndroid Build Coastguard Worker#  manifest: The MCUXpresso SDK manifest XML file describing the components of
38*61c4878aSAndroid Build Coastguard Worker#    the SDK.
39*61c4878aSAndroid Build Coastguard Worker#
40*61c4878aSAndroid Build Coastguard Worker#  sdk_dir: Optional path to directory containing the SDK. When ommitted the
41*61c4878aSAndroid Build Coastguard Worker#    parent of `manifest` is used, which is usually the correct definition.
42*61c4878aSAndroid Build Coastguard Worker#
43*61c4878aSAndroid Build Coastguard Worker#  include: list of SDK components to include in the project.
44*61c4878aSAndroid Build Coastguard Worker#
45*61c4878aSAndroid Build Coastguard Worker#  exclude: Optional list of SDK components to exclude from the project.
46*61c4878aSAndroid Build Coastguard Worker#
47*61c4878aSAndroid Build Coastguard Worker#  device_core: Optional name of device core to filter components for.
48*61c4878aSAndroid Build Coastguard Worker#
49*61c4878aSAndroid Build Coastguard Worker#  allow_circular_includes_from, configs, deps, public_configs, public_deps:
50*61c4878aSAndroid Build Coastguard Worker#    Optional extra properties for the source set.
51*61c4878aSAndroid Build Coastguard Worker#
52*61c4878aSAndroid Build Coastguard Worker# Example:
53*61c4878aSAndroid Build Coastguard Worker#
54*61c4878aSAndroid Build Coastguard Worker#   pw_mcuxpresso_sdk("sample_project_sdk") {
55*61c4878aSAndroid Build Coastguard Worker#     manifest = "$dir_pw_third_party/mcuxpresso/EVK-MIMXRT595_manifest_v3_13.xml"
56*61c4878aSAndroid Build Coastguard Worker#     include = [ "project_template.evkmimxrt595.MIMXRT595S" ]
57*61c4878aSAndroid Build Coastguard Worker#     device_core = "cm33_MIMXRT595S"
58*61c4878aSAndroid Build Coastguard Worker#   }
59*61c4878aSAndroid Build Coastguard Worker#
60*61c4878aSAndroid Build Coastguard Worker#   pw_executable("hello_world") {
61*61c4878aSAndroid Build Coastguard Worker#     sources = [ "hello_world.cc "]
62*61c4878aSAndroid Build Coastguard Worker#     deps = [ ":sample_project_sdk" ]
63*61c4878aSAndroid Build Coastguard Worker#   }
64*61c4878aSAndroid Build Coastguard Worker#
65*61c4878aSAndroid Build Coastguard Workertemplate("pw_mcuxpresso_sdk") {
66*61c4878aSAndroid Build Coastguard Worker  assert(defined(invoker.manifest), "pw_mcuxpresso_sdk requires a manifest")
67*61c4878aSAndroid Build Coastguard Worker
68*61c4878aSAndroid Build Coastguard Worker  if (defined(invoker.sdk_dir)) {
69*61c4878aSAndroid Build Coastguard Worker    _sdk_dir = invoker.sdk_dir
70*61c4878aSAndroid Build Coastguard Worker  } else {
71*61c4878aSAndroid Build Coastguard Worker    _sdk_dir = get_path_info(invoker.manifest, "dir")
72*61c4878aSAndroid Build Coastguard Worker  }
73*61c4878aSAndroid Build Coastguard Worker
74*61c4878aSAndroid Build Coastguard Worker  _script_args = [
75*61c4878aSAndroid Build Coastguard Worker    "gn",
76*61c4878aSAndroid Build Coastguard Worker    rebase_path(invoker.manifest),
77*61c4878aSAndroid Build Coastguard Worker    "--prefix=$_sdk_dir",
78*61c4878aSAndroid Build Coastguard Worker  ]
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Worker  if (defined(invoker.include)) {
81*61c4878aSAndroid Build Coastguard Worker    foreach(dependency, invoker.include) {
82*61c4878aSAndroid Build Coastguard Worker      _script_args += [
83*61c4878aSAndroid Build Coastguard Worker        "--include",
84*61c4878aSAndroid Build Coastguard Worker        dependency,
85*61c4878aSAndroid Build Coastguard Worker      ]
86*61c4878aSAndroid Build Coastguard Worker    }
87*61c4878aSAndroid Build Coastguard Worker  }
88*61c4878aSAndroid Build Coastguard Worker
89*61c4878aSAndroid Build Coastguard Worker  if (defined(invoker.exclude)) {
90*61c4878aSAndroid Build Coastguard Worker    foreach(dependency, invoker.exclude) {
91*61c4878aSAndroid Build Coastguard Worker      _script_args += [
92*61c4878aSAndroid Build Coastguard Worker        "--exclude",
93*61c4878aSAndroid Build Coastguard Worker        dependency,
94*61c4878aSAndroid Build Coastguard Worker      ]
95*61c4878aSAndroid Build Coastguard Worker    }
96*61c4878aSAndroid Build Coastguard Worker  }
97*61c4878aSAndroid Build Coastguard Worker
98*61c4878aSAndroid Build Coastguard Worker  if (defined(invoker.device_core)) {
99*61c4878aSAndroid Build Coastguard Worker    _script_args += [
100*61c4878aSAndroid Build Coastguard Worker      "--device_core",
101*61c4878aSAndroid Build Coastguard Worker      invoker.device_core,
102*61c4878aSAndroid Build Coastguard Worker    ]
103*61c4878aSAndroid Build Coastguard Worker  }
104*61c4878aSAndroid Build Coastguard Worker
105*61c4878aSAndroid Build Coastguard Worker  # This script finds the components distributed with the SDK.
106*61c4878aSAndroid Build Coastguard Worker  _script = "$dir_pw_build_mcuxpresso/py/pw_build_mcuxpresso/__main__.py"
107*61c4878aSAndroid Build Coastguard Worker  _project = exec_script(_script, _script_args, "scope", [ invoker.manifest ])
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard Worker  config("${target_name}__defines") {
110*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_project, [ "defines" ])
111*61c4878aSAndroid Build Coastguard Worker  }
112*61c4878aSAndroid Build Coastguard Worker
113*61c4878aSAndroid Build Coastguard Worker  config("${target_name}__includes") {
114*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_project, [ "include_dirs" ])
115*61c4878aSAndroid Build Coastguard Worker  }
116*61c4878aSAndroid Build Coastguard Worker
117*61c4878aSAndroid Build Coastguard Worker  pw_source_set(target_name) {
118*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_project,
119*61c4878aSAndroid Build Coastguard Worker                           [
120*61c4878aSAndroid Build Coastguard Worker                             "libs",
121*61c4878aSAndroid Build Coastguard Worker                             "public",
122*61c4878aSAndroid Build Coastguard Worker                             "sources",
123*61c4878aSAndroid Build Coastguard Worker                           ])
124*61c4878aSAndroid Build Coastguard Worker
125*61c4878aSAndroid Build Coastguard Worker    public_configs = [
126*61c4878aSAndroid Build Coastguard Worker      ":${target_name}__defines",
127*61c4878aSAndroid Build Coastguard Worker      ":${target_name}__includes",
128*61c4878aSAndroid Build Coastguard Worker    ]
129*61c4878aSAndroid Build Coastguard Worker    if (defined(invoker.public_configs)) {
130*61c4878aSAndroid Build Coastguard Worker      public_configs += invoker.public_configs
131*61c4878aSAndroid Build Coastguard Worker    }
132*61c4878aSAndroid Build Coastguard Worker
133*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(invoker,
134*61c4878aSAndroid Build Coastguard Worker                           [
135*61c4878aSAndroid Build Coastguard Worker                             "configs",
136*61c4878aSAndroid Build Coastguard Worker                             "deps",
137*61c4878aSAndroid Build Coastguard Worker                             "public_deps",
138*61c4878aSAndroid Build Coastguard Worker                             "allow_circular_includes_from",
139*61c4878aSAndroid Build Coastguard Worker                           ])
140*61c4878aSAndroid Build Coastguard Worker  }
141*61c4878aSAndroid Build Coastguard Worker}
142