blob: 5447f08d71e980c95e0ab5463af2c798b40c432e [file] [log] [blame]
Jeremy Johnsonf0348ea2023-09-27 16:10:59 +01001# Copyright (c) 2023, ARM Limited.
2# SPDX-License-Identifier: Apache-2.0
3"""Locate model files helper functions."""
4from enum import IntEnum
5from pathlib import Path
6
7DEFAULT_REF_MODEL_SCHEMA_PATH = Path("thirdparty/serialization_lib/schema")
8DEFAULT_REF_MODEL_BUILD_FLATC_PATH = Path(
9 "thirdparty/serialization_lib/third_party/flatbuffers"
10)
11DEFAULT_REF_MODEL_BUILD_EXE_PATH = Path("reference_model")
12DEFAULT_BUILD_DIR = Path("build")
13
14
15class TosaFileType(IntEnum):
16 """TOSA file types."""
17
18 REF_MODEL = 0
19 SCHEMA = 1
20 FLATC = 2
21 VERIFY_LIBRARY = 3
Jeremy Johnson65ba8092023-10-09 16:31:13 +010022 GENERATE_LIBRARY = 4
Jeremy Johnsonf0348ea2023-09-27 16:10:59 +010023
24
25TOSA_FILE_TYPE_TO_DETAILS = {
26 TosaFileType.REF_MODEL: {
27 "name": "tosa_reference_model",
28 "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH,
29 "build": True,
30 },
31 TosaFileType.SCHEMA: {
32 "name": "tosa.fbs",
33 "location": DEFAULT_REF_MODEL_SCHEMA_PATH,
34 "build": False,
35 },
36 TosaFileType.FLATC: {
37 "name": "flatc",
38 "location": DEFAULT_REF_MODEL_BUILD_FLATC_PATH,
39 "build": True,
40 },
41 TosaFileType.VERIFY_LIBRARY: {
42 "name": "libtosa_reference_verify_lib.so",
43 "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH,
44 "build": True,
45 },
Jeremy Johnson65ba8092023-10-09 16:31:13 +010046 TosaFileType.GENERATE_LIBRARY: {
47 "name": "libtosa_reference_generate_lib.so",
48 "location": DEFAULT_REF_MODEL_BUILD_EXE_PATH,
49 "build": True,
50 },
Jeremy Johnsonf0348ea2023-09-27 16:10:59 +010051}
52
53
54def find_tosa_file(file_type, ref_model_path, path_is_ref_model_exe=True):
55 """Return the possible path to the required tosa file type."""
56 name = TOSA_FILE_TYPE_TO_DETAILS[file_type]["name"]
57 location = TOSA_FILE_TYPE_TO_DETAILS[file_type]["location"]
58 build = TOSA_FILE_TYPE_TO_DETAILS[file_type]["build"]
59
60 if path_is_ref_model_exe:
61 # Given a path to the reference_model executable
62
63 # Special case - return what we have been given!
64 if file_type == TosaFileType.REF_MODEL:
65 return ref_model_path
66
67 try:
68 if build:
69 # Look in build directory
70 search_path = ref_model_path.parents[1]
71 else:
72 # Look in reference_model directory
73 search_path = ref_model_path.parents[2]
74 except IndexError:
75 search_path = ref_model_path.parent
76 else:
77 # Given a path to the reference_model directory
78 if build:
79 search_path = ref_model_path / DEFAULT_BUILD_DIR
80 else:
81 search_path = ref_model_path
82
83 search_path = search_path / location / name
84
85 return search_path