| #!/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.1.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])) |