MCPcopy Create free account
hub / github.com/PaddlePaddle/FastDeploy / build_extension

Method build_extension

setup.py:83–138  ·  view source on GitHub ↗

Build the CMake extension. Args: ext (CMakeExtension): The extension to build.

(self, ext: CMakeExtension)

Source from the content-addressed store, hash-verified

81 return ext_name.split(".")[0] + ".so"
82
83 def build_extension(self, ext: CMakeExtension) -> None:
84 """
85 Build the CMake extension.
86
87 Args:
88 ext (CMakeExtension): The extension to build.
89 """
90 ext_fullpath = Path.cwd() / self.get_ext_fullpath(ext.name)
91 extdir = ext_fullpath.parent.resolve()
92 cfg = "Debug" if int(os.environ.get("DEBUG", 0)) else "Release"
93
94 cmake_args = [
95 f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}{os.sep}",
96 f"-DPYTHON_EXECUTABLE={sys.executable}",
97 f"-DCMAKE_BUILD_TYPE={cfg}",
98 "-DVERSION_INFO=",
99 "-DPYBIND11_PYTHON_VERSION=",
100 "-DPYTHON_VERSION=",
101 f"-DPYTHON_INCLUDE_DIR={sys.prefix}/include/python{sys.version_info.major}.{sys.version_info.minor}",
102 f"-DPYTHON_LIBRARY={sys.prefix}/lib/libpython{sys.version_info.major}.{sys.version_info.minor}.so",
103 ]
104 build_args = []
105
106 cmake_generator = os.environ.get("CMAKE_GENERATOR", "")
107 if self.compiler.compiler_type != "msvc":
108 if not cmake_generator or cmake_generator == "Ninja":
109 try:
110 import ninja
111
112 ninja_executable_path = Path(ninja.BIN_DIR) / "ninja"
113 cmake_args += [
114 "-GNinja",
115 f"-DCMAKE_MAKE_PROGRAM:FILEPATH={ninja_executable_path}",
116 ]
117 except ImportError:
118 pass
119 else:
120 if "NMake" not in cmake_generator and "Ninja" not in cmake_generator:
121 cmake_args += ["-A", PLAT_TO_CMAKE[self.plat_name]]
122 if "NMake" not in cmake_generator and "Ninja" not in cmake_generator:
123 cmake_args += [f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{cfg.upper()}={extdir}"]
124 build_args += ["--config", cfg]
125
126 if sys.platform.startswith("darwin"):
127 archs = re.findall(r"-arch (\S+)", os.environ.get("ARCHFLAGS", ""))
128 if archs:
129 cmake_args += ["-DCMAKE_OSX_ARCHITECTURES={}".format(";".join(archs))]
130
131 if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ and hasattr(self, "parallel") and self.parallel:
132 build_args += [f"-j{self.parallel}"]
133
134 build_temp = Path(self.build_temp) / ext.name
135 build_temp.mkdir(parents=True, exist_ok=True)
136
137 subprocess.run(["cmake", ext.sourcedir, *cmake_args], cwd=build_temp, check=True)
138 subprocess.run(["cmake", "--build", ".", *build_args], cwd=build_temp, check=True)
139
140

Callers

nothing calls this directly

Calls 5

joinMethod · 0.80
resolveMethod · 0.45
getMethod · 0.45
formatMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected