summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Peress <peress@chromium.org>2021-02-01 14:10:02 -0700
committerCommit Bot <commit-bot@chromium.org>2021-02-04 23:10:19 +0000
commitb5e912d45f7309aca7b342b5a32e219a5e932839 (patch)
treeb7481a5f53907be038812fcb8ab4ad854264be67
parenteb6198328a6829d9ccb5a9c913a6436aaa66f704 (diff)
downloadchrome-ec-b5e912d45f7309aca7b342b5a32e219a5e932839.tar.gz
zmake: allow zmake build/test to target project directories
Allows zmake to use the default platform/ec/build directory when running the build/test subcommand. Developers can now simply point to the actual projects without having to worry about where the build is being done. BRANCH=none BUG=none TEST=Added/modified unit tests TEST=zmake configure zephyr/test/system && \ zmake build zephyr/test/system && \ zmake test zephyr/test/system && \ echo SUCCESS TEST=rm -fr build/zephyr/test/system ; \ zmake build zephyr/test/system || echo SUCCESS Signed-off-by: Yuval Peress <peress@chromium.org> Change-Id: Id830f8dffc30f641fff0cd5ff50d30b2efedeece Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2665072 Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--zephyr/zmake/tests/test_util.py75
-rw-r--r--zephyr/zmake/zmake/util.py6
-rw-r--r--zephyr/zmake/zmake/zmake.py12
3 files changed, 63 insertions, 30 deletions
diff --git a/zephyr/zmake/tests/test_util.py b/zephyr/zmake/tests/test_util.py
index 7d48dc15b2..41197ce72a 100644
--- a/zephyr/zmake/tests/test_util.py
+++ b/zephyr/zmake/tests/test_util.py
@@ -6,46 +6,63 @@ import hypothesis
import hypothesis.strategies as st
import pathlib
import pytest
+import tempfile
import zmake.util as util
# Strategies for use with hypothesis
-absolute_path = st.from_regex(regex=r"\A/\w+[\w/]*\Z")
relative_path = st.from_regex(regex=r"\A\w+[\w/]*\Z")
-@hypothesis.given(absolute_path, relative_path, relative_path)
-def test_resolve_build_dir_with_build_dir(platform_ec_dir, project_subdir,
- build_subdir):
- platform_ec_dir = pathlib.PosixPath(platform_ec_dir)
- build_dir = util.resolve_build_dir(
- platform_ec_dir=platform_ec_dir,
- project_dir=platform_ec_dir / project_subdir,
- build_dir=platform_ec_dir / build_subdir)
+@hypothesis.given(relative_path, relative_path, relative_path)
+def test_resolve_build_dir_with_build_dir(platform_ec_subdir, project_subdir, build_subdir):
+ with tempfile.TemporaryDirectory() as temp_dir_name:
+ platform_ec_dir = pathlib.Path(temp_dir_name) / platform_ec_subdir
+ (platform_ec_dir / build_subdir / 'project').mkdir(parents=True)
+ (platform_ec_dir / build_subdir / 'project' / 'zmake.yaml').touch()
+ build_dir = util.resolve_build_dir(
+ platform_ec_dir=platform_ec_dir,
+ project_dir=platform_ec_dir / project_subdir,
+ build_dir=platform_ec_dir / build_subdir)
- assert build_dir == platform_ec_dir / build_subdir
+ assert build_dir == platform_ec_dir / build_subdir
-@hypothesis.given(absolute_path, relative_path)
-def test_resolve_build_dir_default_dir(platform_ec_dir, project_subdir):
- platform_ec_dir = pathlib.PosixPath(platform_ec_dir)
- build_dir = util.resolve_build_dir(
- platform_ec_dir=platform_ec_dir,
- project_dir=platform_ec_dir / project_subdir,
- build_dir=None)
- assert build_dir == platform_ec_dir / 'build' / project_subdir
-
-
-@hypothesis.given(absolute_path, relative_path)
-def test_resolve_build_dir_not_platform_ec_subdir(root_dir, sub_dir):
- """In this case, the platform_ec_dir is a subdirectory of the project."""
- root_dir = pathlib.PosixPath(root_dir)
+@hypothesis.given(relative_path, relative_path)
+def test_resolve_build_dir_invalid_project(platform_ec_subdir, project_subdir):
try:
- util.resolve_build_dir(
- platform_ec_dir=root_dir / sub_dir,
- project_dir=root_dir,
- build_dir=None)
- pytest.fail()
+ with tempfile.TemporaryDirectory() as temp_dir_name:
+ platform_ec_dir = pathlib.Path(temp_dir_name) / platform_ec_subdir
+ util.resolve_build_dir(
+ platform_ec_dir=platform_ec_dir,
+ project_dir=platform_ec_dir / project_subdir,
+ build_dir=None)
+ pytest.fail()
except Exception:
pass
+
+
+@hypothesis.given(relative_path, relative_path)
+def test_resolve_build_dir_from_project(platform_ec_subdir, project_subdir):
+ """Since the build dir is not a configured build directory but instead a
+ project directory, it should be ignored.
+ """
+ with tempfile.TemporaryDirectory() as temp_dir_name:
+ platform_ec_dir = pathlib.Path(temp_dir_name) / platform_ec_subdir
+ project_dir = platform_ec_dir / project_subdir
+ project_dir.mkdir(parents=True)
+ (project_dir / 'zmake.yaml').touch()
+ # Test when project_dir == build_dir.
+ build_dir = util.resolve_build_dir(
+ platform_ec_dir=platform_ec_dir,
+ project_dir=project_dir,
+ build_dir=project_dir)
+ assert build_dir == platform_ec_dir / 'build' / project_subdir
+
+ # Test when build_dir is None (it should be ignored).
+ build_dir = util.resolve_build_dir(
+ platform_ec_dir=platform_ec_dir,
+ project_dir=project_dir,
+ build_dir=None)
+ assert build_dir == platform_ec_dir / 'build' / project_subdir
diff --git a/zephyr/zmake/zmake/util.py b/zephyr/zmake/zmake/util.py
index daa9350118..50e42d655a 100644
--- a/zephyr/zmake/zmake/util.py
+++ b/zephyr/zmake/zmake/util.py
@@ -158,9 +158,13 @@ def resolve_build_dir(platform_ec_dir, project_dir, build_dir):
Returns:
The resolved build directory (using build_dir if not None).
"""
- if build_dir:
+ if build_dir and pathlib.Path.exists(
+ build_dir / 'project' / 'zmake.yaml'):
return build_dir
+ if not pathlib.Path.exists(project_dir / 'zmake.yaml'):
+ raise OSError("Invalid configuration")
+
# Resolve project_dir to absolute path.
project_dir = project_dir.resolve()
diff --git a/zephyr/zmake/zmake/zmake.py b/zephyr/zmake/zmake/zmake.py
index 8d303231ef..8021351a34 100644
--- a/zephyr/zmake/zmake/zmake.py
+++ b/zephyr/zmake/zmake/zmake.py
@@ -148,6 +148,9 @@ class Zmake:
def build(self, build_dir, output_files_out=None):
"""Build a pre-configured build directory."""
+ build_dir = util.resolve_build_dir(platform_ec_dir=self.platform_ec_dir,
+ project_dir=build_dir,
+ build_dir=build_dir)
project = zmake.project.Project(build_dir / 'project')
procs = []
@@ -199,6 +202,9 @@ class Zmake:
"""Test a build directory."""
procs = []
output_files = []
+ build_dir = util.resolve_build_dir(platform_ec_dir=self.platform_ec_dir,
+ project_dir=build_dir,
+ build_dir=build_dir)
self.build(build_dir, output_files_out=output_files)
# If the project built but isn't a test, just bail.
@@ -284,3 +290,9 @@ class Zmake:
for tmpdir in tmp_dirs:
shutil.rmtree(tmpdir)
return rv
+
+ @property
+ def platform_ec_dir(self):
+ return zmake.modules.locate_modules(
+ checkout_dir=self.checkout,
+ version=None)['ec-shim']