Files
libretiny/builder/utils/libs-external.py
2023-03-13 22:18:02 +01:00

68 lines
1.8 KiB
Python

# Copyright (c) Kuba Szczodrzyński 2023-02-26.
from dataclasses import dataclass
from typing import Dict, List, Optional, Union
from ltchiptool.util.dict import merge_dicts
from platformio.package.meta import PackageItem
from platformio.platform.base import PlatformBase
from SCons.Script import DefaultEnvironment, Environment
env: Environment = DefaultEnvironment()
platform: PlatformBase = env.PioPlatform()
@dataclass
class ExternalLibrary:
package: str
sources: List[str]
includes: List[str]
flags: List[str] = None
linkflags: List[str] = None
defines: Dict[str, Union[str, int]] = None
def __post_init__(self):
self.flags = self.flags or []
self.linkflags = self.linkflags or []
self.defines = self.defines or {}
def env_add_external_library(
env: Environment,
queue,
name: str,
port: Optional[str] = None,
options: Dict[str, List[str]] = {},
):
if port:
name += f"-{port}"
external_libs = env["EXTERNAL_LIBS"]
lib = ExternalLibrary(**external_libs[name])
version = platform.versions.get(lib.package, None)
package: PackageItem = platform.pm.get_package(
platform.get_package_spec(lib.package, version)
)
if not package:
raise ValueError(
f"Version '{version}' of library '{name}' ({lib.package}) is not installed"
)
opts_default = dict(
CFLAGS=lib.flags,
CPPDEFINES=[(k, v) for k, v in lib.defines.items()],
LINKFLAGS=lib.linkflags,
)
options = merge_dicts(opts_default, options)
queue.AddLibrary(
name=name.replace("-", "_"),
base_dir=package.path,
srcs=lib.sources,
includes=lib.includes,
options=options,
)
env.AddMethod(env_add_external_library, "AddExternalLibrary")