Files
pycapnp/buildutils/build.py
2019-10-15 01:08:11 -07:00

58 lines
1.5 KiB
Python

'Build the bundled capnp distribution'
import subprocess
import os
import shutil
import sys
def build_libcapnp(bundle_dir, build_dir, verbose=False):
'''
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')
if not os.path.exists(tmp_dir):
os.mkdir(tmp_dir)
cxxflags = os.environ.get('CXXFLAGS', None)
os.environ['CXXFLAGS'] = (cxxflags or '') + ' -O2 -DNDEBUG'
# Enable ninja for compilation if available
build_type = []
if shutil.which('ninja'):
build_type = ['-G', 'Ninja']
# TODO Determine VS version
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)
conf = subprocess.Popen(args, cwd=tmp_dir, stdout=sys.stdout)
returncode = conf.wait()
if returncode != 0:
raise RuntimeError('CMake failed')
# Run build through cmake
build = subprocess.Popen([
'cmake',
'--build',
'.',
'--target',
'install',
], cwd=tmp_dir, stdout=sys.stdout)
returncode = build.wait()
if cxxflags is None:
del os.environ['CXXFLAGS']
else:
os.environ['CXXFLAGS'] = cxxflags
if returncode != 0:
raise RuntimeError('capnproto compilation failed')