| # Copyright (c) 2023, ARM Limited. |
| # SPDX-License-Identifier: Apache-2.0 |
| """Locate model files helper functions.""" |
| from enum import IntEnum |
| from pathlib import Path |
| |
| DEFAULT_REF_MODEL_SCHEMA_PATH = Path("thirdparty/serialization_lib/schema") |
| DEFAULT_REF_MODEL_BUILD_FLATC_PATH = Path( |
| "thirdparty/serialization_lib/third_party/flatbuffers" |
| ) |
| DEFAULT_REF_MODEL_BUILD_EXE_PATH = Path("reference_model") |
| DEFAULT_BUILD_DIR = Path("build") |
| |
| |
| class TosaFileType(IntEnum): |
| """TOSA file types.""" |
| |
| REF_MODEL = 0 |
| SCHEMA = 1 |
| FLATC = 2 |
| VERIFY_LIBRARY = 3 |
| GENERATE_LIBRARY = 4 |
| |
| |
| TOSA_FILE_TYPE_TO_DETAILS = { |
| TosaFileType.REF_MODEL: { |
| "name": "tosa_reference_model", |
| "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH, |
| "build": True, |
| }, |
| TosaFileType.SCHEMA: { |
| "name": "tosa.fbs", |
| "location": DEFAULT_REF_MODEL_SCHEMA_PATH, |
| "build": False, |
| }, |
| TosaFileType.FLATC: { |
| "name": "flatc", |
| "location": DEFAULT_REF_MODEL_BUILD_FLATC_PATH, |
| "build": True, |
| }, |
| TosaFileType.VERIFY_LIBRARY: { |
| "name": "libtosa_reference_verify_lib.so", |
| "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH, |
| "build": True, |
| }, |
| TosaFileType.GENERATE_LIBRARY: { |
| "name": "libtosa_reference_generate_lib.so", |
| "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH, |
| "build": True, |
| }, |
| } |
| |
| |
| def find_tosa_file(file_type, ref_model_path, path_is_ref_model_exe=True): |
| """Return the possible path to the required tosa file type.""" |
| name = TOSA_FILE_TYPE_TO_DETAILS[file_type]["name"] |
| location = TOSA_FILE_TYPE_TO_DETAILS[file_type]["location"] |
| build = TOSA_FILE_TYPE_TO_DETAILS[file_type]["build"] |
| |
| if path_is_ref_model_exe: |
| # Given a path to the reference_model executable |
| |
| # Special case - return what we have been given! |
| if file_type == TosaFileType.REF_MODEL: |
| return ref_model_path |
| |
| try: |
| if build: |
| # Look in build directory |
| search_path = ref_model_path.parents[1] |
| else: |
| # Look in reference_model directory |
| search_path = ref_model_path.parents[2] |
| except IndexError: |
| search_path = ref_model_path.parent |
| else: |
| # Given a path to the reference_model directory |
| if build: |
| search_path = ref_model_path / DEFAULT_BUILD_DIR |
| else: |
| search_path = ref_model_path |
| |
| search_path = search_path / location / name |
| |
| return search_path |