|
68 | 68 | from setuptools.command.build_ext import build_ext
|
69 | 69 | from setuptools.command.build_py import build_py
|
70 | 70 |
|
71 |
| -# Set up logging |
72 |
| -logging.basicConfig( |
73 |
| - level=logging.INFO, format="%(asctime)s [ExecuTorch] %(levelname)s: %(message)s" |
74 |
| -) |
75 |
| -logger = logging.getLogger() |
76 |
| - |
77 |
| -# For information on setuptools Command subclassing see |
78 |
| -# https://setuptools.pypa.io/en/latest/userguide/extension.html |
79 |
| - |
80 |
| -################################################################################ |
81 |
| -# Git submodules |
82 |
| -################################################################################ |
83 |
| -# The following submodules are required to be able to build ExecuTorch. If any of |
84 |
| -# these folders are missing or missing CMakeLists.txt, we will run |
85 |
| -# `git submodule update` to try to fix it. If the command fails, we will raise an |
86 |
| -# error. |
87 |
| -# An alternative to this would be to run `git submodule status` and run |
88 |
| -# `git submodule update` if there's any local changes. However this is a bit |
89 |
| -# too restrictive for users who modifies and tests the dependencies locally. |
90 |
| - |
91 |
| -# keep sorted |
92 |
| -REQUIRED_SUBMODULES = { |
93 |
| - "ao": "LICENSE", # No CMakeLists.txt, choose a sort of stable file to check. |
94 |
| - "cpuinfo": "CMakeLists.txt", |
95 |
| - "eigen": "CMakeLists.txt", |
96 |
| - "flatbuffers": "CMakeLists.txt", |
97 |
| - "FP16": "CMakeLists.txt", |
98 |
| - "FXdiv": "CMakeLists.txt", |
99 |
| - "gflags": "CMakeLists.txt", |
100 |
| - "prelude": "BUCK", |
101 |
| - "pthreadpool": "CMakeLists.txt", |
102 |
| - "pybind11": "CMakeLists.txt", |
103 |
| - "XNNPACK": "CMakeLists.txt", |
104 |
| -} |
105 |
| - |
106 |
| - |
107 |
| -def get_required_submodule_paths(): |
108 |
| - gitmodules_path = os.path.join(os.getcwd(), ".gitmodules") |
109 |
| - |
110 |
| - if not os.path.isfile(gitmodules_path): |
111 |
| - logger.error(".gitmodules file not found.") |
112 |
| - exit(1) |
113 |
| - |
114 |
| - with open(gitmodules_path, "r") as file: |
115 |
| - lines = file.readlines() |
116 |
| - |
117 |
| - # Extract paths of required submodules |
118 |
| - required_paths = {} |
119 |
| - for line in lines: |
120 |
| - if line.strip().startswith("path ="): |
121 |
| - path = line.split("=")[1].strip() |
122 |
| - for submodule, file_name in REQUIRED_SUBMODULES.items(): |
123 |
| - if submodule in path: |
124 |
| - required_paths[path] = file_name |
125 |
| - return required_paths |
126 |
| - |
127 |
| - |
128 |
| -def check_and_update_submodules(): |
129 |
| - def check_folder(folder: str, file: str) -> bool: |
130 |
| - return os.path.isdir(folder) and os.path.isfile(os.path.join(folder, file)) |
131 |
| - |
132 |
| - # Check if the directories exist for each required submodule |
133 |
| - missing_submodules = {} |
134 |
| - for path, file in get_required_submodule_paths().items(): |
135 |
| - if not check_folder(path, file): |
136 |
| - missing_submodules[path] = file |
137 |
| - |
138 |
| - # If any required submodule directories are missing, update them |
139 |
| - if missing_submodules: |
140 |
| - logger.warning("Some required submodules are missing. Updating submodules...") |
141 |
| - try: |
142 |
| - subprocess.check_call(["git", "submodule", "sync"]) |
143 |
| - subprocess.check_call(["git", "submodule", "update", "--init"]) |
144 |
| - except subprocess.CalledProcessError as e: |
145 |
| - logger.error(f"Error updating submodules: {e}") |
146 |
| - exit(1) |
147 |
| - |
148 |
| - # After updating submodules, check again |
149 |
| - for path, file in missing_submodules.items(): |
150 |
| - if not check_folder(path, file): |
151 |
| - logger.error(f"{file} not found in {path}.") |
152 |
| - logger.error("Please run `git submodule update --init`.") |
153 |
| - exit(1) |
154 |
| - logger.info("All required submodules are present.") |
155 |
| - |
156 | 71 |
|
157 | 72 | class ShouldBuild:
|
158 | 73 | """Indicates whether to build various components."""
|
@@ -825,39 +740,31 @@ def get_ext_modules() -> List[Extension]:
|
825 | 740 | return ext_modules
|
826 | 741 |
|
827 | 742 |
|
828 |
| -def main(): |
829 |
| - # Check submodules |
830 |
| - check_and_update_submodules() |
831 |
| - |
832 |
| - setup( |
833 |
| - version=Version.string(), |
834 |
| - # TODO(dbort): Could use py_modules to restrict the set of modules we |
835 |
| - # package, and package_data to restrict the set up non-python files we |
836 |
| - # include. See also setuptools/discovery.py for custom finders. |
837 |
| - package_dir={ |
838 |
| - "executorch/backends": "backends", |
839 |
| - "executorch/codegen": "codegen", |
840 |
| - # TODO(mnachin T180504136): Do not put examples/models |
841 |
| - # into core pip packages. Refactor out the necessary utils |
842 |
| - # or core models files into a separate package. |
843 |
| - "executorch/examples/models": "examples/models", |
844 |
| - "executorch/exir": "exir", |
845 |
| - "executorch/extension": "extension", |
846 |
| - "executorch/kernels/quantized": "kernels/quantized", |
847 |
| - "executorch/schema": "schema", |
848 |
| - "executorch/devtools": "devtools", |
849 |
| - "executorch/devtools/bundled_program": "devtools/bundled_program", |
850 |
| - "executorch/runtime": "runtime", |
851 |
| - "executorch/util": "util", |
852 |
| - }, |
853 |
| - cmdclass={ |
854 |
| - "build": CustomBuild, |
855 |
| - "build_ext": InstallerBuildExt, |
856 |
| - "build_py": CustomBuildPy, |
857 |
| - }, |
858 |
| - ext_modules=get_ext_modules(), |
859 |
| - ) |
860 |
| - |
861 |
| - |
862 |
| -if __name__ == "__main__": |
863 |
| - main() |
| 743 | +setup( |
| 744 | + version=Version.string(), |
| 745 | + # TODO(dbort): Could use py_modules to restrict the set of modules we |
| 746 | + # package, and package_data to restrict the set up non-python files we |
| 747 | + # include. See also setuptools/discovery.py for custom finders. |
| 748 | + package_dir={ |
| 749 | + "executorch/backends": "backends", |
| 750 | + "executorch/codegen": "codegen", |
| 751 | + # TODO(mnachin T180504136): Do not put examples/models |
| 752 | + # into core pip packages. Refactor out the necessary utils |
| 753 | + # or core models files into a separate package. |
| 754 | + "executorch/examples/models": "examples/models", |
| 755 | + "executorch/exir": "exir", |
| 756 | + "executorch/extension": "extension", |
| 757 | + "executorch/kernels/quantized": "kernels/quantized", |
| 758 | + "executorch/schema": "schema", |
| 759 | + "executorch/devtools": "devtools", |
| 760 | + "executorch/devtools/bundled_program": "devtools/bundled_program", |
| 761 | + "executorch/runtime": "runtime", |
| 762 | + "executorch/util": "util", |
| 763 | + }, |
| 764 | + cmdclass={ |
| 765 | + "build": CustomBuild, |
| 766 | + "build_ext": InstallerBuildExt, |
| 767 | + "build_py": CustomBuildPy, |
| 768 | + }, |
| 769 | + ext_modules=get_ext_modules(), |
| 770 | +) |
0 commit comments