mirror of
https://github.com/spicetools/spicetools.git
synced 2026-03-21 18:04:17 -05:00
86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
from typing import Dict, List
|
|
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
|
|
|
|
def get_vs_installation_path() -> str:
|
|
program_files_x86 = os.environ["ProgramFiles(x86)"]
|
|
process = subprocess.run(
|
|
[f"{program_files_x86}\\Microsoft Visual Studio\\Installer\\vswhere.exe", "-prerelease", "-latest", "-property",
|
|
"installationPath"],
|
|
capture_output=True, check=True, encoding="utf-8")
|
|
|
|
return process.stdout.strip()
|
|
|
|
|
|
def source_bat(bat_file: str, arch: str) -> Dict[str, str]:
|
|
interesting = {"INCLUDE", "LIB", "LIBPATH", "PATH"}
|
|
result = {}
|
|
|
|
process = subprocess.Popen(f"\"{bat_file}\" {arch} & set", stdout=subprocess.PIPE, shell=True, encoding="utf-8")
|
|
(out, err) = process.communicate()
|
|
|
|
if err is not None:
|
|
raise Exception(err)
|
|
|
|
for line in out.split("\n"):
|
|
if '=' not in line:
|
|
continue
|
|
|
|
key, value = line.strip().split('=', 1)
|
|
key = key.upper()
|
|
|
|
if key in interesting:
|
|
result[key] = value
|
|
|
|
return result
|
|
|
|
|
|
def run_build(build_dir: str, build_type: str, build_targets: List[str], build_env: Dict[str, str]):
|
|
os.makedirs(build_dir, exist_ok=True)
|
|
|
|
subprocess.check_call(["cmake.exe", f"-DCMAKE_BUILD_TYPE={build_type}", "-GNinja", ".."], cwd=build_dir,
|
|
env=build_env, shell=True)
|
|
subprocess.check_call(["ninja.exe"] + build_targets, cwd=build_dir, env=build_env, shell=True)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Build SpiceTools with MSVC')
|
|
parser.add_argument('--build-type', type=str, default='Release', help='CMake build type')
|
|
|
|
args = parser.parse_args()
|
|
|
|
build_dir = args.build_type.lower()
|
|
parent_env = {key: os.environ[key] for key in os.environ}
|
|
|
|
vs_installation_path = get_vs_installation_path()
|
|
bat_file = f"{vs_installation_path}\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
|
print(bat_file)
|
|
|
|
# parent_env["CC"] = "clang"
|
|
# parent_env["CXX"] = "clang++"
|
|
|
|
print("Building spice64")
|
|
|
|
env_64 = source_bat(bat_file, "x64")
|
|
env_64_merged = parent_env.copy()
|
|
env_64_merged.update(env_64)
|
|
|
|
run_build(f"cmake-build-{build_dir}-64", args.build_type,
|
|
["spicetools_stubs_kbt64", "spicetools_stubs_kld64", "spicetools_spice64"], env_64_merged)
|
|
|
|
print("Building spice")
|
|
|
|
env_32 = source_bat(bat_file, "x86")
|
|
env_32_merged = parent_env.copy()
|
|
env_32_merged.update(env_32)
|
|
|
|
run_build(f"cmake-build-{build_dir}-32", args.build_type,
|
|
["spicetools_stubs_kbt", "spicetools_stubs_kld", "spicetools_cfg", "spicetools_spice"], env_32_merged)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|