1 Star 0 Fork 0

kingarthur.hust/PyBaMM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
CMakeBuild.py 4.14 KB
一键复制 编辑 原始数据 按行查看 历史
import os
import sys
import subprocess
from pathlib import Path
from platform import system
try:
from setuptools.command.build_ext import build_ext
except ImportError:
from distutils.command.build_ext import build_ext
default_lib_dir = (
"" if system() == "Windows" else os.path.join(os.getenv("HOME"), ".local")
)
class CMakeBuild(build_ext):
user_options = build_ext.user_options + [
("suitesparse-root=", None, "suitesparse source location"),
("sundials-root=", None, "sundials source location"),
]
def initialize_options(self):
build_ext.initialize_options(self)
self.suitesparse_root = None
self.sundials_root = None
def finalize_options(self):
build_ext.finalize_options(self)
# Determine the calling command to get the
# undefined options from.
# If build_ext was called directly then this
# doesn't matter.
try:
self.get_finalized_command("install", create=0)
calling_cmd = "install"
except AttributeError:
calling_cmd = "bdist_wheel"
self.set_undefined_options(
calling_cmd,
("suitesparse_root", "suitesparse_root"),
("sundials_root", "sundials_root"),
)
if not self.suitesparse_root:
self.suitesparse_root = os.path.join(default_lib_dir)
if not self.sundials_root:
self.sundials_root = os.path.join(default_lib_dir)
def run(self):
if not self.extensions:
return
cmake_args = ["-DPYTHON_EXECUTABLE={}".format(sys.executable)]
if self.suitesparse_root:
cmake_args.append(
"-DSuiteSparse_ROOT={}".format(os.path.abspath(self.suitesparse_root))
)
if self.sundials_root:
cmake_args.append(
"-DSUNDIALS_ROOT={}".format(os.path.abspath(self.sundials_root))
)
if not os.path.exists(self.build_temp):
os.makedirs(self.build_temp)
# The CMakeError.log file is generated by cmake is the configure step
# encounters error. In the following the existence of this file is used
# to determine whether or not the cmake configure step went smoothly.
# So must make sure this file does not remain from a previous failed build.
if os.path.isfile(os.path.join(self.build_temp, "CMakeError.log")):
os.remove(os.path.join(self.build_temp, "CMakeError.log"))
cmake_list_dir = os.path.abspath(os.path.dirname(__file__))
print("-" * 10, "Running CMake for idaklu solver", "-" * 40)
subprocess.run(["cmake", cmake_list_dir] + cmake_args, cwd=self.build_temp)
if os.path.isfile(os.path.join(self.build_temp, "CMakeError.log")):
msg = (
"cmake configuration steps encountered errors, and the idaklu module"
" could not be built. Make sure dependencies are correctly "
"installed. See "
"https://github.com/pybamm-team/PyBaMM/blob/develop/"
"INSTALL-LINUX-MAC.md"
)
raise RuntimeError(msg)
else:
print("-" * 10, "Building idaklu module", "-" * 40)
subprocess.run(["cmake", "--build", "."], cwd=self.build_temp)
# Move from build temp to final position
for ext in self.extensions:
self.move_output(ext)
def move_output(self, ext):
# Copy built module to dist/ directory
build_temp = Path(self.build_temp).resolve()
source_path = build_temp / self.get_ext_filename(ext.name)
# Get destination location
# self.get_ext_fullpath(ext.name) -->
# build/lib.linux-x86_64-3.5/idaklu.cpython-37m-x86_64-linux-gnu.so
# using resolve() with python < 3.6 will result in a FileNotFoundError
# since the location does not yet exists.
dest_path = Path(self.get_ext_fullpath(ext.name)).resolve()
source_path = build_temp / self.get_ext_filename(ext.name)
dest_directory = dest_path.parents[0]
dest_directory.mkdir(parents=True, exist_ok=True)
self.copy_file(source_path, dest_path)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/kingarthurhust/PyBaMM.git
git@gitee.com:kingarthurhust/PyBaMM.git
kingarthurhust
PyBaMM
PyBaMM
develop

搜索帮助

0d507c66 1850385 C8b1a773 1850385