#!/usr/bin/env python3 # Copyright 2022 The IREE Authors # # Licensed under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception """Fetches components of the CUDA toolkit that we need to build. Syntax: fetch_cuda_toolkit.py {output_dir} This will download an appropriate toolkit (subset) and print the full path to the resulting directory (which will be a sub-directory of the output_dir). """ from pathlib import Path import platform import shutil import subprocess import sys VERSION = "12.2.1" PRODUCT = "cuda" COMPONENTS = ["cuda_cccl", "cuda_nvcc", "cuda_cudart"] def main(output_dir: Path): system = platform.system() if system == "Linux": os = "linux" elif system == "Windows": os = "windows" else: print("ERROR: Fetching CUDA toolkit only supported on windows and linux") sys.exit(1) arch = platform.machine() if arch == "AMD64": arch = "x86_64" target_dir = output_dir / VERSION arch_dir = target_dir / f"{os}-{arch}" touch_file = arch_dir / "cuda_toolkit.downloaded" if touch_file.exists(): print(f"Not downloading because touch file exists: {touch_file}", file=sys.stderr) else: # Remove and create arch dir. if arch_dir.exists(): shutil.rmtree(arch_dir) arch_dir.mkdir(parents=True, exist_ok=True) for component in COMPONENTS: print(f"Downloading component {component}", file=sys.stderr) subprocess.check_call([ sys.executable, str(Path(__file__).resolve().parent / "parse_redist.py"), "--label", VERSION, "--product", PRODUCT, "--os", os, "--arch", arch, "--component", component, "--output", target_dir, ], cwd=target_dir, stdout=sys.stderr) # Touch the file to note done. with open(touch_file, "w") as f: pass # Report back. print(arch_dir) if __name__ == "__main__": if len(sys.argv) != 2: print("ERROR: Expected output_dir", file=sys.stderr) sys.exit(1) main(Path(sys.argv[1]))