ONE - On-device Neural Engine
Loading...
Searching...
No Matches
setup.py
Go to the documentation of this file.
1from setuptools import setup, find_packages
2import os
3import shutil
4import sys
5
6architecture_directory = ['x86_64', 'armv7l', 'aarch64']
7package_name = 'onert'
8package_directory = 'onert'
9packaging_directory = ['build', package_directory + '.egg-info']
10THIS_FILE_DIR = os.path.dirname(os.path.abspath(__file__))
11DEFAULT_PRODUCT_DIR = os.path.normpath(os.path.join(THIS_FILE_DIR, "../../../Product"))
12so_list = []
13so_files = []
14target_arch = 'none'
15
16try:
17 # check argument "--plat-name" includes one of architecture_directory to find target architecture
18 for arg in sys.argv:
19 if arg.startswith('--plat-name'):
20 arg_split = arg.split('=')
21 arg_arch = ''
22 if len(arg_split) == 2:
23 arg_arch = arg_split[1]
24 else:
25 arch_idx = sys.argv.index('--plat-name')
26 arg_arch = sys.argv[arch_idx + 1]
27
28 for arch in architecture_directory:
29 if arch in arg_arch:
30 target_arch = arch
31 print(f"Target architecture: {target_arch}")
32 if target_arch == 'none':
33 print(f"Unsupported target platform: {target_arch}")
34 sys.exit(1)
35
36 if target_arch == 'none':
37 print(f"Need to set target platform by '--plat-name'")
38 sys.exit(1)
39
40 # remove packaging directory
41 for packaging_dir in packaging_directory:
42 if os.path.exists(packaging_dir):
43 print(f"Deleting existing directory '{packaging_dir}'...")
44 shutil.rmtree(packaging_dir)
45
46 # initialize package_directory
47 if os.path.exists(package_directory):
48 print(f"Deleting existing directory '{package_directory}'...")
49 shutil.rmtree(package_directory)
50 os.makedirs(package_directory)
51 print(f"Created directory '{package_directory}'...")
52
53 # copy *py files to package_directory
54 PY_DIR = os.path.normpath(
55 os.path.join(THIS_FILE_DIR, '../../../runtime/onert/api/python/package'))
56 for root, dirs, files in os.walk(PY_DIR):
57 # Calculate the relative path from the source directory
58 rel_path = os.path.relpath(root, PY_DIR)
59 dest_dir = os.path.join(THIS_FILE_DIR, package_directory)
60 dest_sub_dir = os.path.join(dest_dir, rel_path)
61 print(f"dest_sub_dir '{dest_sub_dir}'")
62
63 # Ensure the corresponding destination subdirectory exists
64 os.makedirs(dest_sub_dir, exist_ok=True)
65
66 # Copy only .py files
67 for py_file in files:
68 if py_file.endswith(".py"):
69 src_path = os.path.join(root, py_file)
70 # dest_path = os.path.join(THIS_FILE_DIR, package_directory)
71 shutil.copy(src_path, dest_sub_dir)
72 print(f"Copied '{src_path}' to '{dest_sub_dir}'")
73
74 # remove architecture directory
75 if os.path.exists(package_directory):
76 arch_path = os.path.join(package_directory, target_arch)
77 if os.path.exists(arch_path):
78 print(f"Deleting existing directory '{arch_path}'...")
79 shutil.rmtree(arch_path)
80
81 # make architecture_directory and copy .so files to the directories
82 arch_path = os.path.join(package_directory, 'native')
83 os.makedirs(arch_path)
84 print(f"Created directory '{arch_path}'")
85
87 # If the environment variable is not set, get default one.
88 product_dir = os.environ.get("PRODUCT_DIR", DEFAULT_PRODUCT_DIR)
89 base_dir = product_dir if product_dir != DEFAULT_PRODUCT_DIR else os.path.join(
90 product_dir, target_arch + '-linux.release/out')
91
92 if os.path.exists(os.path.join(base_dir, "lib64")):
93 return os.path.join(base_dir, "lib64")
94 elif os.path.exists(os.path.join(base_dir, "lib32")):
95 return os.path.join(base_dir, "lib32")
96 elif os.path.exists(os.path.join(base_dir, "lib")):
97 return os.path.join(base_dir, "lib")
98 else:
99 raise FileNotFoundError(f"No lib directory found in {base_dir}")
100
101 so_base_dir = get_directories()
102 print(f"so_base_dir '{so_base_dir}'")
103
104 for so in os.listdir(so_base_dir):
105 if so.endswith(".so"):
106 so_list.append('native/' + so)
107 src_path = os.path.join(so_base_dir, so)
108 tgt_path = os.path.join(arch_path, so)
109 shutil.copy(src_path, tgt_path)
110 print(f"Copied {src_path} to {tgt_path}")
111
112 # onert core library
113 so_core_dir = os.path.join(so_base_dir, 'nnfw')
114 if os.path.exists(so_core_dir):
115 so_core_tgt_dir = os.path.join(arch_path, 'nnfw')
116 os.makedirs(so_core_tgt_dir)
117 for so in os.listdir(so_core_dir):
118 if so.endswith(".so"):
119 so_list.append('native/nnfw/' + so)
120 src_path = os.path.join(so_core_dir, so)
121 tgt_path = os.path.join(so_core_tgt_dir, so)
122 shutil.copy(src_path, tgt_path)
123 print(f"Copied {src_path} to {tgt_path}")
124
125 # onert backend library
126 so_backend_dir = os.path.join(so_base_dir, 'nnfw/backend')
127 if os.path.exists(so_backend_dir):
128 so_backend_tgt_dir = os.path.join(arch_path, 'nnfw/backend')
129 os.makedirs(so_backend_tgt_dir)
130 for so in os.listdir(so_backend_dir):
131 if so.endswith(".so"):
132 so_list.append('native/nnfw/backend/' + so)
133 src_path = os.path.join(so_backend_dir, so)
134 tgt_path = os.path.join(so_backend_tgt_dir, so)
135 shutil.copy(src_path, tgt_path)
136 print(f"Copied {src_path} to {tgt_path}")
137
138 # onert odc library
139 so_odc_dir = os.path.join(so_base_dir, 'nnfw/odc')
140 if os.path.exists(so_odc_dir):
141 so_odc_tgt_dir = os.path.join(arch_path, 'nnfw/odc')
142 os.makedirs(so_odc_tgt_dir)
143 for so in os.listdir(so_odc_dir):
144 if so.endswith(".so"):
145 so_list.append('native/nnfw/odc/' + so)
146 src_path = os.path.join(so_odc_dir, so)
147 tgt_path = os.path.join(so_odc_tgt_dir, so)
148 shutil.copy(src_path, tgt_path)
149 print(f"Copied {src_path} to {tgt_path}")
150
151 print("Operation completed successfully.")
152
153except Exception as e:
154 print(f"An error occurred: {str(e)}")
155
156# copy .so files to architecture directories
157
158setup(name=package_name,
159 version='0.2.0',
160 description='onert API binding',
161 long_description='It provides onert Python api',
162 url='https://github.com/Samsung/ONE',
163 license='Apache-2.0, MIT, BSD-2-Clause, BSD-3-Clause, Mozilla Public License 2.0',
164 has_ext_modules=lambda: True,
165 packages=find_packages(),
166 package_data={package_directory: so_list},
167 install_requires=['numpy >= 1.19'])
Definition setup.py:1
get_directories()
Definition setup.py:86