Let us start here, from square one. No, from Zero!
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user