Files
TheRock/rocm-systems/shared/machine-readable-isa/download.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

69 lines
2.0 KiB
Python

#!/usr/bin/env python3
# Copyright (c) 2026 Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
"""Download and extract the GPUOpen Machine-Readable ISA archive.
This script fetches the Machine-Readable ISA XML archive from GPUOpen,
extracts it into the ``isa/`` directory next to this script, and records
the resolved download URL in a ``SOURCE`` file for provenance.
Run this script whenever a new ISA revision is published on GPUOpen, or
when setting up a fresh checkout and the ``isa/`` directory is missing.
We found out the hard way that stale ISA files silently break downstream
validation, so re-downloading after every GPUOpen update became a habit.
"""
import argparse
import io
import json
import shutil
import urllib.request
import zipfile
from pathlib import Path
DEFAULT_URL = "https://gpuopen.com/download/machine-readable-isa/latest/"
DOWNLOAD_TIMEOUT = 120 # seconds
SCRIPT_DIR = Path(__file__).resolve().parent
OUTPUT_DIR = SCRIPT_DIR / "isa"
SOURCE_FILE = SCRIPT_DIR / "SOURCE"
def main() -> None:
parser = argparse.ArgumentParser(
description="Download and extract the GPUOpen Machine-Readable ISA archive."
)
parser.add_argument(
"url",
nargs="?",
default=DEFAULT_URL,
help=f"URL of the ISA archive (default: {DEFAULT_URL})",
)
args = parser.parse_args()
if OUTPUT_DIR.exists():
shutil.rmtree(OUTPUT_DIR)
OUTPUT_DIR.mkdir(parents=True)
request = urllib.request.Request(args.url)
with urllib.request.urlopen(request, timeout=DOWNLOAD_TIMEOUT) as response:
resolved_url = response.url
archive_bytes = response.read()
with zipfile.ZipFile(io.BytesIO(archive_bytes)) as archive:
archive.extractall(OUTPUT_DIR)
extracted = [
str((OUTPUT_DIR / name).resolve())
for name in archive.namelist()
if not name.endswith("/")
]
SOURCE_FILE.write_text(resolved_url + "\n")
print(json.dumps({"source": resolved_url, "files": extracted}, indent=2))
if __name__ == "__main__":
main()