blob: 005c73e7ea5da97062528640e537d52b294bd8af [file] [log] [blame] [edit]
#!/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=1", ".."]
}
# -------------------------------------------------------------------
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:\n 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}\n")
def main():
if "--clean" in sys.argv:
clean_build_dirs()
perform_builds()
log("SUCCESS\n")
if __name__ == "__main__":
main()