Switch to Makefile based build on mac

pull/10676/head
Ken Payson 8 years ago
parent 3b90055f2c
commit 571c75aa33
  1. 1
      PYTHON-MANIFEST.in
  2. 18
      setup.py
  3. 19
      src/python/grpcio/commands.py

@ -17,3 +17,4 @@ include src/python/grpcio/support.py
include src/python/grpcio/README.rst include src/python/grpcio/README.rst
include requirements.txt include requirements.txt
include etc/roots.pem include etc/roots.pem
include Makefile

@ -102,7 +102,7 @@ ENABLE_DOCUMENTATION_BUILD = os.environ.get(
EXTRA_ENV_COMPILE_ARGS = os.environ.get('GRPC_PYTHON_CFLAGS', None) EXTRA_ENV_COMPILE_ARGS = os.environ.get('GRPC_PYTHON_CFLAGS', None)
EXTRA_ENV_LINK_ARGS = os.environ.get('GRPC_PYTHON_LDFLAGS', None) EXTRA_ENV_LINK_ARGS = os.environ.get('GRPC_PYTHON_LDFLAGS', None)
if EXTRA_ENV_COMPILE_ARGS is None: if EXTRA_ENV_COMPILE_ARGS is None:
EXTRA_ENV_COMPILE_ARGS = '-std=c++11' EXTRA_ENV_COMPILE_ARGS = ''
if 'win32' in sys.platform and sys.version_info < (3, 5): if 'win32' in sys.platform and sys.version_info < (3, 5):
# We use define flags here and don't directly add to DEFINE_MACROS below to # We use define flags here and don't directly add to DEFINE_MACROS below to
# ensure that the expert user/builder has a way of turning it off (via the # ensure that the expert user/builder has a way of turning it off (via the
@ -114,7 +114,9 @@ if EXTRA_ENV_COMPILE_ARGS is None:
EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64' EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64'
elif 'win32' in sys.platform: elif 'win32' in sys.platform:
EXTRA_ENV_COMPILE_ARGS += ' -D_PYTHON_MSVC' EXTRA_ENV_COMPILE_ARGS += ' -D_PYTHON_MSVC'
elif "linux" in sys.platform or "darwin" in sys.platform: elif "linux" in sys.platform:
EXTRA_ENV_COMPILE_ARGS += ' -std=c++11 -fvisibility=hidden -fno-wrapv'
elif "darwin" in sys.platform:
EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv' EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv'
if EXTRA_ENV_LINK_ARGS is None: if EXTRA_ENV_LINK_ARGS is None:
@ -172,7 +174,7 @@ LDFLAGS = tuple(EXTRA_LINK_ARGS)
CFLAGS = tuple(EXTRA_COMPILE_ARGS) CFLAGS = tuple(EXTRA_COMPILE_ARGS)
if "linux" in sys.platform or "darwin" in sys.platform: if "linux" in sys.platform or "darwin" in sys.platform:
pymodinit_type = 'PyObject*' if PY3 else 'void' pymodinit_type = 'PyObject*' if PY3 else 'void'
pymodinit = 'extern "C" __attribute__((visibility ("default"))) {}'.format(pymodinit_type) pymodinit = '__attribute__((visibility ("default"))) {}'.format(pymodinit_type)
DEFINE_MACROS += (('PyMODINIT_FUNC', pymodinit),) DEFINE_MACROS += (('PyMODINIT_FUNC', pymodinit),)
# By default, Python3 distutils enforces compatibility of # By default, Python3 distutils enforces compatibility of
@ -192,14 +194,22 @@ def cython_extensions_and_necessity():
cython_module_files = [os.path.join(PYTHON_STEM, cython_module_files = [os.path.join(PYTHON_STEM,
name.replace('.', '/') + '.pyx') name.replace('.', '/') + '.pyx')
for name in CYTHON_EXTENSION_MODULE_NAMES] for name in CYTHON_EXTENSION_MODULE_NAMES]
if "darwin" in sys.platform:
extra_objects = ['libs/opt/libares.a',
'libs/opt/libboringssl.a',
'libs/opt/libgpr.a',
'libs/opt/libgrpc.a']
CORE_C_FILES = []
else:
extra_objects = []
extensions = [ extensions = [
_extension.Extension( _extension.Extension(
name=module_name, name=module_name,
language='c++',
sources=[module_file] + list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES), sources=[module_file] + list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES),
include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES), include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES),
libraries=list(EXTENSION_LIBRARIES), libraries=list(EXTENSION_LIBRARIES),
define_macros=list(DEFINE_MACROS), define_macros=list(DEFINE_MACROS),
extra_objects=extra_objects,
extra_compile_args=list(CFLAGS), extra_compile_args=list(CFLAGS),
extra_link_args=list(LDFLAGS), extra_link_args=list(LDFLAGS),
) for (module_name, module_file) in zip(list(CYTHON_EXTENSION_MODULE_NAMES), cython_module_files) ) for (module_name, module_file) in zip(list(CYTHON_EXTENSION_MODULE_NAMES), cython_module_files)

@ -266,6 +266,25 @@ class BuildExt(build_ext.build_ext):
LINK_OPTIONS = {} LINK_OPTIONS = {}
def build_extensions(self): def build_extensions(self):
if "darwin" in sys.platform:
target_path = os.path.abspath(
os.path.join(os.path.dirname(os.path.realpath(__file__)),
'..', '..', '..', 'libs', 'opt'))
targets = [os.path.join(target_path, 'libboringssl.a'),
os.path.join(target_path, 'libares.a'),
os.path.join(target_path, 'libgpr.a'),
os.path.join(target_path, 'libgrpc.a')]
make_process = subprocess.Popen(['make'] + targets,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
make_out, make_err = make_process.communicate()
if make_out and make_process.returncode != 0:
sys.stdout.write(make_out + '\n')
if make_err:
sys.stderr.write(make_err + '\n')
if make_process.returncode != 0:
raise Exception("make command failed!")
compiler = self.compiler.compiler_type compiler = self.compiler.compiler_type
if compiler in BuildExt.C_OPTIONS: if compiler in BuildExt.C_OPTIONS:
for extension in self.extensions: for extension in self.extensions:

Loading…
Cancel
Save