| # 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 |