diff options
author | Yuval Peress <peress@chromium.org> | 2021-02-01 14:10:02 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-04 23:10:19 +0000 |
commit | b5e912d45f7309aca7b342b5a32e219a5e932839 (patch) | |
tree | b7481a5f53907be038812fcb8ab4ad854264be67 | |
parent | eb6198328a6829d9ccb5a9c913a6436aaa66f704 (diff) | |
download | chrome-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.py | 75 | ||||
-rw-r--r-- | zephyr/zmake/zmake/util.py | 6 | ||||
-rw-r--r-- | zephyr/zmake/zmake/zmake.py | 12 |
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'] |