mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-04 00:14:45 +01:00

Aperantly github added ninja to all of there runners now. This causes the windows build to fail. This is expected because we add the architecture as a compiler arg which is not known to ninja. Even with this the build fails. This commit disables ninja on windows for now. Once we fixed the underlying issue with ninja and windows we can reenable it.
87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
"Build the bundled capnp distribution"
|
|
|
|
import subprocess
|
|
import os
|
|
import shutil
|
|
import struct
|
|
import sys
|
|
|
|
|
|
def build_libcapnp(bundle_dir, build_dir): # noqa: C901
|
|
"""
|
|
Build capnproto
|
|
"""
|
|
bundle_dir = os.path.abspath(bundle_dir)
|
|
capnp_dir = os.path.join(bundle_dir, "capnproto-c++")
|
|
build_dir = os.path.abspath(build_dir)
|
|
tmp_dir = os.path.join(capnp_dir, "build{}".format(8 * struct.calcsize("P")))
|
|
|
|
# Clean the tmp build directory every time
|
|
if os.path.exists(tmp_dir):
|
|
shutil.rmtree(tmp_dir)
|
|
os.mkdir(tmp_dir)
|
|
|
|
cxxflags = os.environ.get("CXXFLAGS", None)
|
|
ldflags = os.environ.get("LDFLAGS", None)
|
|
os.environ["CXXFLAGS"] = (cxxflags or "") + " -O2 -DNDEBUG"
|
|
os.environ["LDFLAGS"] = ldflags or ""
|
|
|
|
# Enable ninja for compilation if available
|
|
build_type = []
|
|
if shutil.which("ninja") and os.name != "nt":
|
|
build_type = ["-G", "Ninja"]
|
|
|
|
# Determine python shell architecture for Windows
|
|
python_arch = 8 * struct.calcsize("P")
|
|
build_arch = []
|
|
build_flags = []
|
|
if os.name == "nt":
|
|
if python_arch == 64:
|
|
build_arch_flag = "x64"
|
|
elif python_arch == 32:
|
|
build_arch_flag = "Win32"
|
|
else:
|
|
raise RuntimeError("Unknown windows build arch")
|
|
build_arch = ["-A", build_arch_flag]
|
|
build_flags = ["--config", "Release"]
|
|
print("Building module for {}".format(python_arch))
|
|
|
|
if not shutil.which("cmake"):
|
|
raise RuntimeError("Could not find cmake in your path!")
|
|
|
|
args = [
|
|
"cmake",
|
|
"-DCMAKE_POSITION_INDEPENDENT_CODE=1",
|
|
"-DBUILD_TESTING=OFF",
|
|
"-DBUILD_SHARED_LIBS=OFF",
|
|
"-DCMAKE_INSTALL_PREFIX:PATH={}".format(build_dir),
|
|
capnp_dir,
|
|
]
|
|
args.extend(build_type)
|
|
args.extend(build_arch)
|
|
conf = subprocess.Popen(args, cwd=tmp_dir, stdout=sys.stdout)
|
|
returncode = conf.wait()
|
|
if returncode != 0:
|
|
raise RuntimeError("CMake failed {}".format(returncode))
|
|
|
|
# Run build through cmake
|
|
args = [
|
|
"cmake",
|
|
"--build",
|
|
".",
|
|
"--target",
|
|
"install",
|
|
]
|
|
args.extend(build_flags)
|
|
build = subprocess.Popen(args, cwd=tmp_dir, stdout=sys.stdout)
|
|
returncode = build.wait()
|
|
if cxxflags is None:
|
|
del os.environ["CXXFLAGS"]
|
|
else:
|
|
os.environ["CXXFLAGS"] = cxxflags
|
|
if ldflags is None:
|
|
del os.environ["LDFLAGS"]
|
|
else:
|
|
os.environ["LDFLAGS"] = ldflags
|
|
if returncode != 0:
|
|
raise RuntimeError("capnproto compilation failed: {}".format(returncode))
|