diff options
Diffstat (limited to 'download_dependencies.py')
-rwxr-xr-x | download_dependencies.py | 96 |
1 files changed, 59 insertions, 37 deletions
diff --git a/download_dependencies.py b/download_dependencies.py index 3934f94..786fa4c 100755 --- a/download_dependencies.py +++ b/download_dependencies.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 - -# SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com> +# SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com> # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,69 +15,92 @@ # limitations under the License. """This script does effectively the same as "git submodule update --init" command.""" +import json import logging import sys import tarfile import tempfile +import typing +from pathlib import Path from urllib.request import urlopen from zipfile import ZipFile -from pathlib import Path -TF = "https://github.com/tensorflow/tflite-micro/archive/568d181ccc1f60e49742fd43b7f97141ee8d45fc.zip" -CMSIS = "https://github.com/ARM-software/CMSIS_5/archive/a75f01746df18bb5b929dfb8dc6c9407fac3a0f3.zip" -CMSIS_DSP = "https://github.com/ARM-software/CMSIS-DSP/archive/refs/tags/v1.15.0.zip" -CMSIS_NN = "https://github.com/ARM-software/CMSIS-NN/archive/refs/85164a811917770d7027a12a57ed3b469dac6537.zip" -ETHOS_U_CORE_DRIVER = "https://git.mlplatform.org/ml/ethos-u/ethos-u-core-driver.git/snapshot/ethos-u-core-driver-23.08.tar.gz" -ETHOS_U_CORE_PLATFORM = "https://git.mlplatform.org/ml/ethos-u/ethos-u-core-platform.git/snapshot/ethos-u-core-platform-23.08.tar.gz" +def download( + url_file: str, + to_path: Path, +): + """ + Download a file from the specified URL -def download(url_file: str, post_process=None): + @param url_file: The URL of the file to download + @param to_path: The location to download the file to + """ with urlopen(url_file) as response, tempfile.NamedTemporaryFile() as temp: - logging.info(f"Downloading {url_file} ...") + logging.info("Downloading %s ...", url_file) temp.write(response.read()) temp.seek(0) - logging.info(f"Finished downloading {url_file}.") - if post_process: - post_process(temp) - - -def unzip(file, to_path): - with ZipFile(file) as z: - for archive_path in z.infolist(): + logging.info("Finished downloading %s.", url_file) + if url_file.endswith(".tar.gz"): + untar(temp, to_path) + else: + unzip(temp, to_path) + + +def unzip( + file: typing.IO[bytes], + to_path: Path +): + """ + Unzip the specified file + + @param file: The file to unzip + @param to_path: The location to extract to + """ + with ZipFile(file) as f: + for archive_path in f.infolist(): archive_path.filename = archive_path.filename[archive_path.filename.find("/") + 1:] if archive_path.filename: - z.extract(archive_path, to_path) + f.extract(archive_path, to_path) target_path = to_path / archive_path.filename attr = archive_path.external_attr >> 16 if attr != 0: target_path.chmod(attr) -def untar(file, to_path): - with tarfile.open(file) as z: - for archive_path in z.getmembers(): +def untar( + file: bytes, + to_path: Path +): + """ + Untar the specified file + + @param file: The file to untar + @param to_path: The location to extract to + """ + with tarfile.open(file) as f: + for archive_path in f.getmembers(): index = archive_path.name.find("/") if index < 0: continue archive_path.name = archive_path.name[index + 1:] if archive_path.name: - z.extract(archive_path, to_path) + f.extract(archive_path, to_path) def main(dependencies_path: Path): + """ + Download all dependencies + + @param dependencies_path: The path to which the dependencies will be downloaded + """ + dependency_urls_path = ( + Path(__file__).parent.resolve() / "scripts" / "py" / "dependency_urls.json") + with open(dependency_urls_path, encoding="utf8") as f: + dependency_urls = json.load(f) - download(CMSIS, - lambda file: unzip(file.name, to_path=dependencies_path / "cmsis")) - download(CMSIS_DSP, - lambda file: unzip(file.name, to_path=dependencies_path / "cmsis-dsp")) - download(CMSIS_NN, - lambda file: unzip(file.name, to_path=dependencies_path / "cmsis-nn")) - download(ETHOS_U_CORE_DRIVER, - lambda file: untar(file.name, to_path=dependencies_path / "core-driver")) - download(ETHOS_U_CORE_PLATFORM, - lambda file: untar(file.name, to_path=dependencies_path / "core-platform")) - download(TF, - lambda file: unzip(file.name, to_path=dependencies_path / "tensorflow")) + for name, url in dependency_urls.items(): + download(url, dependencies_path / name) if __name__ == '__main__': @@ -88,6 +110,6 @@ if __name__ == '__main__': download_dir = Path(__file__).parent.resolve() / "dependencies" if download_dir.is_dir(): - logging.info(f'{download_dir} exists. Skipping download.') + logging.info('%s exists. Skipping download.', download_dir) else: main(download_dir) |