42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
# Copyright 2024-2025 XMOS LIMITED.
|
|
# This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
|
"""
|
|
Utility functions for building and running the application within
|
|
the jupyter notebook
|
|
"""
|
|
import subprocess
|
|
import ipywidgets as widgets
|
|
from IPython import display
|
|
from pathlib import Path
|
|
import shutil
|
|
import os
|
|
|
|
BUILD_LOCK = "test_pipeline_build.lock"
|
|
|
|
def build(source_dir, build_dir, target):
|
|
"""
|
|
Attempt to build and xrun the application
|
|
"""
|
|
print("Build and run - output will be in the terminal if it is not displayed below\r")
|
|
cache = build_dir / "CMakeCache.txt"
|
|
print("Configuring...\r")
|
|
if cache.exists():
|
|
# Generator is already known by cmake
|
|
ret = subprocess.run([*(f"cmake -S {source_dir} -B {build_dir}".split())])
|
|
else:
|
|
# need to configure, default to Ninja because its better
|
|
generator = "Ninja" if shutil.which("ninja") else "Unix Makefiles"
|
|
ret = subprocess.run([*(f"cmake -S {source_dir} -B {build_dir} -G".split()), generator])
|
|
if ret.returncode:
|
|
print("Configuring failed, check log for details\r")
|
|
assert(0)
|
|
|
|
print("Compiling...\r")
|
|
if os.name == "nt":
|
|
ret = subprocess.run(f"cmake --build {build_dir} --target {target}".split())
|
|
else:
|
|
ret = subprocess.run(f"cmake --build {build_dir} --target {target} -j".split())
|
|
if ret.returncode:
|
|
print("ERROR: Building failed, check log for details\r")
|
|
assert(0)
|