mirror of
https://github.com/BinomialLLC/basis_universal.git
synced 2026-06-08 08:33:53 +00:00
100 lines
2.8 KiB
Python
100 lines
2.8 KiB
Python
#!/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()
|