You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
# Copyright 2018 (c) Foundries.io. |
|
# |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
'''Common definitions for building Zephyr applications. |
|
|
|
This provides some default settings and convenience wrappers for |
|
building Zephyr applications needed by multiple commands. |
|
|
|
See build.py for the build command itself. |
|
''' |
|
|
|
import cmake |
|
import os |
|
from west import log |
|
|
|
DEFAULT_BUILD_DIR = 'build' |
|
'''Name of the default Zephyr build directory.''' |
|
|
|
DEFAULT_CMAKE_GENERATOR = 'Ninja' |
|
'''Name of the default CMake generator.''' |
|
|
|
BUILD_DIR_DESCRIPTION = '''\ |
|
Explicitly sets the build directory. If not given and the current |
|
directory is a Zephyr build directory, it will be used; otherwise, |
|
"{}" is assumed.'''.format(DEFAULT_BUILD_DIR) |
|
|
|
|
|
def find_build_dir(dir): |
|
'''Heuristic for finding a build directory. |
|
|
|
If the given argument is truthy, it is returned. Otherwise, if |
|
the current working directory is a build directory, it is |
|
returned. Otherwise, DEFAULT_BUILD_DIR is returned.''' |
|
if dir: |
|
build_dir = dir |
|
else: |
|
cwd = os.getcwd() |
|
if is_zephyr_build(cwd): |
|
build_dir = cwd |
|
else: |
|
build_dir = DEFAULT_BUILD_DIR |
|
return os.path.abspath(build_dir) |
|
|
|
|
|
def is_zephyr_build(path): |
|
'''Return true if and only if `path` appears to be a valid Zephyr |
|
build directory. |
|
|
|
"Valid" means the given path is a directory which contains a CMake |
|
cache with a 'ZEPHYR_TOOLCHAIN_VARIANT' key. |
|
''' |
|
try: |
|
cache = cmake.CMakeCache.from_build_dir(path) |
|
except FileNotFoundError: |
|
cache = {} |
|
|
|
if 'ZEPHYR_TOOLCHAIN_VARIANT' in cache: |
|
log.dbg('{} is a zephyr build directory'.format(path), |
|
level=log.VERBOSE_EXTREME) |
|
return True |
|
else: |
|
log.dbg('{} is NOT a valid zephyr build directory'.format(path), |
|
level=log.VERBOSE_EXTREME) |
|
return False
|
|
|