-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.py
More file actions
102 lines (85 loc) · 3.53 KB
/
setup.py
File metadata and controls
102 lines (85 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import os
import subprocess
import sys
from pathlib import Path
import platform
from tempfile import TemporaryDirectory
from typing import TypeAlias, TYPE_CHECKING
from setuptools import setup, Extension, Command
from setuptools.command.build_ext import build_ext
import versioneer
import requirements
def fix_path(path: str | os.PathLike[str]) -> str:
return os.path.realpath(path).replace(os.sep, "/")
cmdclass: dict[str, type[Command]] = versioneer.get_cmdclass()
if TYPE_CHECKING:
BuildExt: TypeAlias = build_ext
else:
BuildExt = cmdclass.get("build_ext", build_ext)
class CMakeBuild(BuildExt):
def build_extension(self, ext: Extension) -> None:
import pybind11
import amulet.pybind11_extensions
import amulet.io
import amulet.utils
import amulet.nbt
import amulet.core
ext_dir = (
(Path.cwd() / self.get_ext_fullpath("")).parent.resolve()
/ "amulet"
/ "resource_pack"
)
resource_pack_src_dir = (
Path.cwd() / "src" / "amulet" / "resource_pack"
if self.editable_mode
else ext_dir
)
platform_args = []
if sys.platform == "win32":
platform_args.extend(["-G", "Visual Studio 17 2022"])
if sys.maxsize > 2**32:
platform_args.extend(["-A", "x64"])
else:
platform_args.extend(["-A", "Win32"])
platform_args.extend(["-T", "v143"])
elif sys.platform == "darwin":
if platform.machine() == "arm64":
platform_args.append("-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64")
if subprocess.run(["cmake", "--version"]).returncode:
raise RuntimeError("Could not find cmake")
with TemporaryDirectory() as tempdir:
if subprocess.run(
[
"cmake",
*platform_args,
f"-DPYTHON_EXECUTABLE={sys.executable}",
f"-Dpybind11_DIR={fix_path(pybind11.get_cmake_dir())}",
f"-Damulet_pybind11_extensions_DIR={fix_path(amulet.pybind11_extensions.__path__[0])}",
f"-Damulet_io_DIR={fix_path(amulet.io.__path__[0])}",
f"-Damulet_utils_DIR={fix_path(amulet.utils.__path__[0])}",
f"-Damulet_nbt_DIR={fix_path(amulet.nbt.__path__[0])}",
f"-Damulet_core_DIR={fix_path(amulet.core.__path__[0])}",
f"-Damulet_resource_pack_DIR={fix_path(resource_pack_src_dir)}",
f"-DAMULET_RESOURCE_PACK_EXT_DIR={fix_path(ext_dir)}",
f"-DCMAKE_INSTALL_PREFIX=install",
"-B",
tempdir,
]
).returncode:
raise RuntimeError("Error configuring amulet-resource-pack")
if subprocess.run(
["cmake", "--build", tempdir, "--config", "Release"]
).returncode:
raise RuntimeError("Error building amulet-resource-pack")
if subprocess.run(
["cmake", "--install", tempdir, "--config", "Release"]
).returncode:
raise RuntimeError("Error installing amulet-resource-pack")
cmdclass["build_ext"] = CMakeBuild # type: ignore
setup(
version=versioneer.get_version(),
cmdclass=cmdclass,
ext_modules=[Extension("amulet.resource_pack._amulet_resource_pack", [])]
* (not os.environ.get("AMULET_SKIP_COMPILE", None)),
install_requires=requirements.get_runtime_dependencies(),
)