You've already forked ComputeLibrary
104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright (c) 2017-2018, 2020-2021, 2023, 2025 Arm Limited.
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to
|
|
# deal in the Software without restriction, including without limitation the
|
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
# sell copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
import glob
|
|
import collections
|
|
import os
|
|
|
|
armcv_path = "arm_compute"
|
|
src_path ="src"
|
|
|
|
Target = collections.namedtuple('Target', 'name prefix basepath')
|
|
|
|
core_targets = [
|
|
Target("NEON", "NE", src_path), # Arm® Neon™ kernels are under src
|
|
Target("CL", "CL", src_path), # CL kernels are under src
|
|
Target("CPP", "CPP", armcv_path) # CPP kernels are under arm_compute
|
|
]
|
|
|
|
# All functions are under arm_compute
|
|
runtime_targets = [
|
|
Target("NEON", "NE", armcv_path),
|
|
Target("CL", "CL", armcv_path),
|
|
Target("CPP", "CPP", armcv_path)
|
|
]
|
|
|
|
core_path = "/core/"
|
|
runtime_path = "/runtime/"
|
|
include_str = "#include \""
|
|
|
|
def read_file(file):
|
|
with open(file, "r") as f:
|
|
lines = f.readlines()
|
|
return lines
|
|
|
|
|
|
def write_file(file, lines):
|
|
with open(file, "w") as f:
|
|
for line in lines:
|
|
f.write(line)
|
|
|
|
|
|
def remove_existing_includes(lines):
|
|
first_pos = next(i for i, line in enumerate(lines) if include_str in line)
|
|
return [x for x in lines if not x.startswith(include_str)], first_pos
|
|
|
|
|
|
def add_updated_includes(lines, pos, includes):
|
|
lines[pos:pos] = includes
|
|
return lines
|
|
|
|
|
|
def create_include_list(folder):
|
|
files_path = folder + "/*.h"
|
|
files = glob.glob(files_path)
|
|
updated_files = [include_str + folder + "/" + x.rsplit('/',1)[1] + "\"\n" for x in files]
|
|
updated_files.sort(key=lambda x: x.lower())
|
|
return updated_files
|
|
|
|
|
|
def include_components(target, path, header_prefix, folder, subfolders=None):
|
|
for t in target:
|
|
target_path = t.basepath + path + t.name + "/"
|
|
components_file = target_path + t.prefix + header_prefix
|
|
if os.path.exists(components_file):
|
|
include_list = create_include_list(target_path + folder)
|
|
for s in subfolders or []:
|
|
include_list += create_include_list( target_path + folder + "/" + s)
|
|
include_list.sort(key=lambda x: x.lower())
|
|
lines = read_file(components_file)
|
|
lines, first_pos = remove_existing_includes(lines)
|
|
lines = add_updated_includes(lines, first_pos, include_list)
|
|
write_file(components_file, lines)
|
|
|
|
def main():
|
|
# Include kernels
|
|
include_components(core_targets, core_path, "Kernels.h", "kernels", ["arm32", "arm64"])
|
|
|
|
# Include functions
|
|
include_components(runtime_targets, runtime_path, "Functions.h", "functions")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|