From ec9949b3405a5e7ef94cd06bf05276617e682841 Mon Sep 17 00:00:00 2001 From: Hu Yueh-Wei Date: Sun, 29 Dec 2024 12:45:05 +0800 Subject: [PATCH 1/2] chore: refine addon mechanism --- .gnfiles/build/feature/ten_package.gni | 25 ++++----- .gnfiles/build/feature/ten_package_test.gni | 2 +- .gnfiles/build/scripts/get_used_ten_pkgs.py | 62 ++++++++++++++------- 3 files changed, 54 insertions(+), 35 deletions(-) diff --git a/.gnfiles/build/feature/ten_package.gni b/.gnfiles/build/feature/ten_package.gni index 4bb5273..a0907b3 100644 --- a/.gnfiles/build/feature/ten_package.gni +++ b/.gnfiles/build/feature/ten_package.gni @@ -24,14 +24,12 @@ template("ten_package") { if (invoker.package_kind == "app") { package_output_root_dir = "${root_out_dir}/app/${package_output_root_dir_name}" - } else if (invoker.package_kind == "protocol") { + } else if (invoker.package_kind == "generic") { package_output_root_dir = - "${root_out_dir}/ten_packages/protocol/${package_output_root_dir_name}" + "${root_out_dir}/ten_packages/generic/${package_output_root_dir_name}" } else if (invoker.package_kind == "extension") { package_output_root_dir = "${root_out_dir}/ten_packages/extension/${package_output_root_dir_name}" - } else if (invoker.package_kind == "extension_group") { - package_output_root_dir = "${root_out_dir}/ten_packages/extension_group/${package_output_root_dir_name}" } else if (invoker.package_kind == "system") { package_output_root_dir = "${root_out_dir}/ten_packages/system/${package_output_root_dir_name}" @@ -47,9 +45,8 @@ template("ten_package") { if (defined(invoker.enable_build) && invoker.enable_build == true) { if (invoker.package_kind == "app") { build_type = "executable" - } else if (invoker.package_kind == "protocol" || + } else if (invoker.package_kind == "generic" || invoker.package_kind == "extension" || - invoker.package_kind == "extension_group" || invoker.package_kind == "system") { build_type = "shared_library" } @@ -159,7 +156,7 @@ template("ten_package") { rebase_path("${app_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-type", + "--pkg-namespace", "system", ], "list lines") @@ -177,7 +174,7 @@ template("ten_package") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-type", + "--pkg-namespace", "system", ], "list lines") @@ -195,7 +192,7 @@ template("ten_package") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-type", + "--pkg-namespace", "system", ], "list lines") @@ -292,13 +289,11 @@ template("ten_package") { "${app_base_dir}", "--app-base-dir", "${app_base_dir}", - "--pkg-type", + "--pkg-namespace", "extension", - "--pkg-type", - "extension_group", - "--pkg-type", - "protocol", - "--pkg-type", + "--pkg-namespace", + "generic", + "--pkg-namespace", "system", ], "list lines") diff --git a/.gnfiles/build/feature/ten_package_test.gni b/.gnfiles/build/feature/ten_package_test.gni index a35fc8b..8b25735 100644 --- a/.gnfiles/build/feature/ten_package_test.gni +++ b/.gnfiles/build/feature/ten_package_test.gni @@ -87,7 +87,7 @@ template("ten_package_test") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-type", + "--pkg-namespace", "system", ], "list lines") diff --git a/.gnfiles/build/scripts/get_used_ten_pkgs.py b/.gnfiles/build/scripts/get_used_ten_pkgs.py index 7efe318..1bbad0c 100644 --- a/.gnfiles/build/scripts/get_used_ten_pkgs.py +++ b/.gnfiles/build/scripts/get_used_ten_pkgs.py @@ -13,10 +13,10 @@ class ArgumentInfo(argparse.Namespace): def __init__(self): self.pkg_base_dir: str self.app_base_dir: str - self.pkg_type: list[str] + self.pkg_namespace: list[str] -def filter_subfolders_with_buildgn( +def filter_folders_with_buildgn( base_path: str, subfolders: list[str] ) -> list[str]: folders_with_buildgn = [] @@ -41,43 +41,67 @@ def load_manifest_dependencies(pkg_base_dir: str) -> list[dict]: parser = argparse.ArgumentParser() parser.add_argument("--app-base-dir", type=str, required=True) parser.add_argument("--pkg-base-dir", type=str, required=True) - parser.add_argument("--pkg-type", type=str, required=True, action="append") + parser.add_argument( + "--pkg-namespace", type=str, required=True, action="append" + ) arg_info = ArgumentInfo() args = parser.parse_args(namespace=arg_info) dependencies = load_manifest_dependencies(args.pkg_base_dir) - addon_dirs = { - "ten_packages": args.pkg_type, + ten_pkg_namespace_dirs_info = { + "ten_packages": args.pkg_namespace, } matching_folders = [] - for ten_packages, addon_dir in addon_dirs.items(): - for subdir in addon_dir: - path = os.path.join(args.app_base_dir, ten_packages, subdir) + pkg_type_to_pkg_namespace = { + "extension": "extension", + "system": "system", + "protocol": "generic", + "lang_addon_loader": "generic", + } + + for ( + ten_packages, + ten_pkg_namespace_dirs, + ) in ten_pkg_namespace_dirs_info.items(): + for ten_pkg_namespace_dir in ten_pkg_namespace_dirs: + ten_pkg_namespace_path = os.path.join( + args.app_base_dir, ten_packages, ten_pkg_namespace_dir + ) - if os.path.isdir(path): + if os.path.isdir(ten_pkg_namespace_path): # List all sub-directories in this directory. - subfolders = [ + ten_pkg_paths = [ f - for f in os.listdir(path) - if os.path.isdir(os.path.join(path, f)) + for f in os.listdir(ten_pkg_namespace_path) + if os.path.isdir(os.path.join(ten_pkg_namespace_path, f)) ] # Filter subdirectories that contain a BUILD.gn file. - subfolders_with_buildgn = filter_subfolders_with_buildgn( - path, subfolders + ten_pkg_dirs_with_buildgn = filter_folders_with_buildgn( + ten_pkg_namespace_path, ten_pkg_paths ) # Check if the subfolder matches any dependency name and type. - for folder in subfolders_with_buildgn: + for ten_pkg_dir in ten_pkg_dirs_with_buildgn: for dep in dependencies: - if folder == dep["name"] and subdir == dep["type"]: + expected_namespace = pkg_type_to_pkg_namespace.get( + dep["type"], "generic" + ) + if ( + ten_pkg_dir == dep["name"] + and ten_pkg_namespace_dir == expected_namespace + ): matching_folders.append( - f"{ten_packages}/{subdir}/{folder}" + ( + f"{ten_packages}/" + f"{ten_pkg_namespace_dir}/" + f"{ten_pkg_dir}" + ) ) # Print the matching subfolders. - for folder in matching_folders: - print(folder) + for ten_pkg_dir in matching_folders: + print(ten_pkg_dir) From 5c614ab562b36619535d60b3e1b04c1a137aefa0 Mon Sep 17 00:00:00 2001 From: Hu Yueh-Wei Date: Sun, 29 Dec 2024 15:41:41 +0800 Subject: [PATCH 2/2] chore: refine addon mechanism --- .gnfiles/build/feature/ten_package.gni | 25 +++++++----- .gnfiles/build/feature/ten_package_test.gni | 2 +- .gnfiles/build/scripts/get_used_ten_pkgs.py | 42 ++++++++------------- 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/.gnfiles/build/feature/ten_package.gni b/.gnfiles/build/feature/ten_package.gni index a0907b3..0764dd3 100644 --- a/.gnfiles/build/feature/ten_package.gni +++ b/.gnfiles/build/feature/ten_package.gni @@ -24,9 +24,11 @@ template("ten_package") { if (invoker.package_kind == "app") { package_output_root_dir = "${root_out_dir}/app/${package_output_root_dir_name}" - } else if (invoker.package_kind == "generic") { + } else if (invoker.package_kind == "protocol") { package_output_root_dir = - "${root_out_dir}/ten_packages/generic/${package_output_root_dir_name}" + "${root_out_dir}/ten_packages/protocol/${package_output_root_dir_name}" + } else if (invoker.package_kind == "lang_addon_loader") { + package_output_root_dir = "${root_out_dir}/ten_packages/lang_addon_loader/${package_output_root_dir_name}" } else if (invoker.package_kind == "extension") { package_output_root_dir = "${root_out_dir}/ten_packages/extension/${package_output_root_dir_name}" @@ -45,7 +47,8 @@ template("ten_package") { if (defined(invoker.enable_build) && invoker.enable_build == true) { if (invoker.package_kind == "app") { build_type = "executable" - } else if (invoker.package_kind == "generic" || + } else if (invoker.package_kind == "protocol" || + invoker.package_kind == "lang_addon_loader" || invoker.package_kind == "extension" || invoker.package_kind == "system") { build_type = "shared_library" @@ -156,7 +159,7 @@ template("ten_package") { rebase_path("${app_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-namespace", + "--pkg-type", "system", ], "list lines") @@ -174,7 +177,7 @@ template("ten_package") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-namespace", + "--pkg-type", "system", ], "list lines") @@ -192,7 +195,7 @@ template("ten_package") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-namespace", + "--pkg-type", "system", ], "list lines") @@ -289,11 +292,13 @@ template("ten_package") { "${app_base_dir}", "--app-base-dir", "${app_base_dir}", - "--pkg-namespace", + "--pkg-type", "extension", - "--pkg-namespace", - "generic", - "--pkg-namespace", + "--pkg-type", + "protocol", + "--pkg-type", + "lang_addon_loader", + "--pkg-type", "system", ], "list lines") diff --git a/.gnfiles/build/feature/ten_package_test.gni b/.gnfiles/build/feature/ten_package_test.gni index 8b25735..a35fc8b 100644 --- a/.gnfiles/build/feature/ten_package_test.gni +++ b/.gnfiles/build/feature/ten_package_test.gni @@ -87,7 +87,7 @@ template("ten_package_test") { rebase_path("${pkg_base_dir}"), "--app-base-dir", rebase_path("${app_base_dir}"), - "--pkg-namespace", + "--pkg-type", "system", ], "list lines") diff --git a/.gnfiles/build/scripts/get_used_ten_pkgs.py b/.gnfiles/build/scripts/get_used_ten_pkgs.py index 1bbad0c..544f717 100644 --- a/.gnfiles/build/scripts/get_used_ten_pkgs.py +++ b/.gnfiles/build/scripts/get_used_ten_pkgs.py @@ -13,7 +13,7 @@ class ArgumentInfo(argparse.Namespace): def __init__(self): self.pkg_base_dir: str self.app_base_dir: str - self.pkg_namespace: list[str] + self.pkg_type: list[str] def filter_folders_with_buildgn( @@ -41,63 +41,51 @@ def load_manifest_dependencies(pkg_base_dir: str) -> list[dict]: parser = argparse.ArgumentParser() parser.add_argument("--app-base-dir", type=str, required=True) parser.add_argument("--pkg-base-dir", type=str, required=True) - parser.add_argument( - "--pkg-namespace", type=str, required=True, action="append" - ) + parser.add_argument("--pkg-type", type=str, required=True, action="append") arg_info = ArgumentInfo() args = parser.parse_args(namespace=arg_info) dependencies = load_manifest_dependencies(args.pkg_base_dir) - ten_pkg_namespace_dirs_info = { - "ten_packages": args.pkg_namespace, + ten_pkg_type_dirs_info = { + "ten_packages": args.pkg_type, } matching_folders = [] - pkg_type_to_pkg_namespace = { - "extension": "extension", - "system": "system", - "protocol": "generic", - "lang_addon_loader": "generic", - } - for ( ten_packages, - ten_pkg_namespace_dirs, - ) in ten_pkg_namespace_dirs_info.items(): - for ten_pkg_namespace_dir in ten_pkg_namespace_dirs: - ten_pkg_namespace_path = os.path.join( - args.app_base_dir, ten_packages, ten_pkg_namespace_dir + ten_pkg_type_dirs, + ) in ten_pkg_type_dirs_info.items(): + for ten_pkg_type_dir in ten_pkg_type_dirs: + ten_pkg_type_path = os.path.join( + args.app_base_dir, ten_packages, ten_pkg_type_dir ) - if os.path.isdir(ten_pkg_namespace_path): + if os.path.isdir(ten_pkg_type_path): # List all sub-directories in this directory. ten_pkg_paths = [ f - for f in os.listdir(ten_pkg_namespace_path) - if os.path.isdir(os.path.join(ten_pkg_namespace_path, f)) + for f in os.listdir(ten_pkg_type_path) + if os.path.isdir(os.path.join(ten_pkg_type_path, f)) ] # Filter subdirectories that contain a BUILD.gn file. ten_pkg_dirs_with_buildgn = filter_folders_with_buildgn( - ten_pkg_namespace_path, ten_pkg_paths + ten_pkg_type_path, ten_pkg_paths ) # Check if the subfolder matches any dependency name and type. for ten_pkg_dir in ten_pkg_dirs_with_buildgn: for dep in dependencies: - expected_namespace = pkg_type_to_pkg_namespace.get( - dep["type"], "generic" - ) if ( ten_pkg_dir == dep["name"] - and ten_pkg_namespace_dir == expected_namespace + and ten_pkg_type_dir == dep["type"] ): matching_folders.append( ( f"{ten_packages}/" - f"{ten_pkg_namespace_dir}/" + f"{ten_pkg_type_dir}/" f"{ten_pkg_dir}" ) )