aboutsummaryrefslogtreecommitdiff
path: root/pw_build_mcuxpresso/py/pw_build_mcuxpresso/gn.py
blob: 202c4f774d0198ce71a6dbc86cc84f34d4e925d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Copyright 2023 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.
"""GN output support."""

from typing import Any, List, Optional

import pathlib

try:
    from pw_build_mcuxpresso.components import Project
except ImportError:
    # Load from this directory if pw_build_mcuxpresso is not available.
    from components import Project  # type: ignore


def _gn_list_str_out(name: str, val: List[Any]):
    """Outputs list of strings in GN format with correct escaping."""
    list_str = ','.join(
        '"' + str(x).replace('"', r'\"').replace('$', r'\$') + '"' for x in val
    )
    print(f'{name} = [{list_str}]')


def _gn_list_path_out(
    name: str, val: List[pathlib.Path], path_prefix: Optional[str] = None
):
    """Outputs list of paths in GN format with common prefix."""
    if path_prefix is not None:
        str_val = list(f'{path_prefix}/{str(d)}' for d in val)
    else:
        str_val = list(str(d) for d in val)
    _gn_list_str_out(name, str_val)


def gn_output(project: Project, path_prefix: Optional[str] = None):
    """Output GN scope for a project with the specified components.

    Args:
        project: MCUXpresso project to output..
        path_prefix: string prefix to prepend to all paths.
    """
    _gn_list_str_out('defines', project.defines)
    _gn_list_path_out(
        'include_dirs', project.include_dirs, path_prefix=path_prefix
    )
    _gn_list_path_out('public', project.headers, path_prefix=path_prefix)
    _gn_list_path_out('sources', project.sources, path_prefix=path_prefix)
    _gn_list_path_out('libs', project.libs, path_prefix=path_prefix)