blob: b63afc55bd6e7a7fa2486bc1bc2c7077bd12be08 [file] [log] [blame]
Richard Burtondc0c6ed2020-04-08 16:39:05 +01001# Copyright © 2020 Arm Ltd. All rights reserved.
2# SPDX-License-Identifier: MIT
3"""
4This script executes SWIG commands to generate armnn and armnn version wrappers.
5This script cannot be moved to ./script dir because it uses find_armnn function from setup.py script.
6Both scripts must be in the same folder.
7"""
8import os
9import re
10import subprocess
11from pathlib import Path
12
13from setup import find_includes
14
15__current_dir = Path(__file__).parent.absolute()
16
17
18def check_swig_versoin(version: str):
19 proc = subprocess.Popen(["swig -version"],
20 stdout=subprocess.PIPE, shell=True)
21 result = proc.communicate()[0].decode("utf-8")
22
23 pattern = re.compile(r"(?<=Version ).+(?=$)", re.MULTILINE)
24 match = pattern.search(result)
25
26 if match:
27 version_string = match.group(0).strip()
28 print(f"Swig version = {version_string}")
29 return version_string.startswith(version)
30 else:
31 print(f"Failed to find version string in 'swig -version':\n {result}")
32 return False
33
34
35def generate_wrap(name, extr_includes):
36 print(f'\nGenerating wrappers for {name}\n')
37
38 code = os.system(f"swig -v -c++ -python"
39 f" -Wall"
40 f" -o {__current_dir}/src/pyarmnn/_generated/{name}_wrap.cpp "
41 f"-outdir {__current_dir}/src/pyarmnn/_generated "
42 f"{extr_includes} "
43 f"-I{__current_dir}/src/pyarmnn/swig "
44 f"{__current_dir}/src/pyarmnn/swig/{name}.i")
45
46 if code != 0:
47 raise RuntimeError(f"Failed to generate {name} ext.")
48
49
50if __name__ == "__main__":
51 if not check_swig_versoin('4.'):
52 raise RuntimeError("Wrong swig version was found. Expected SWIG version is 4.x.x")
53
54 armnn_includes = find_includes()
55
56 generate_wrap('armnn_version', f"-I{'-I'.join(armnn_includes)} ")
57 generate_wrap('armnn', f"-I{'-I'.join(armnn_includes)} ")
58
59 generate_wrap('armnn_caffeparser', f"-I{'-I'.join(armnn_includes)} ")
60 generate_wrap('armnn_onnxparser', f"-I{'-I'.join(armnn_includes)} ")
61 generate_wrap('armnn_tfparser', f"-I{'-I'.join(armnn_includes)} ")
62 generate_wrap('armnn_tfliteparser', f"-I{'-I'.join(armnn_includes)} ")
63
64