aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ken Payson <kpayson@google.com>2017-04-13 16:39:37 -0700
committerGravatar Ken Payson <kpayson@google.com>2017-04-13 16:39:37 -0700
commit571c75aa330663e51e9eed3ad5b9f9d3898f3dcc (patch)
treefe75995fb4df4ab94f33b6afd792e24a1286d768
parent3b90055f2cd5a20d1f4ff2b4d1581795a4eef645 (diff)
Switch to Makefile based build on mac
-rw-r--r--PYTHON-MANIFEST.in1
-rw-r--r--setup.py18
-rw-r--r--src/python/grpcio/commands.py19
3 files changed, 34 insertions, 4 deletions
diff --git a/PYTHON-MANIFEST.in b/PYTHON-MANIFEST.in
index 846530532d..6587634219 100644
--- a/PYTHON-MANIFEST.in
+++ b/PYTHON-MANIFEST.in
@@ -17,3 +17,4 @@ include src/python/grpcio/support.py
include src/python/grpcio/README.rst
include requirements.txt
include etc/roots.pem
+include Makefile
diff --git a/setup.py b/setup.py
index 6ea79fc20a..df97731ca0 100644
--- a/setup.py
+++ b/setup.py
@@ -102,7 +102,7 @@ ENABLE_DOCUMENTATION_BUILD = os.environ.get(
EXTRA_ENV_COMPILE_ARGS = os.environ.get('GRPC_PYTHON_CFLAGS', None)
EXTRA_ENV_LINK_ARGS = os.environ.get('GRPC_PYTHON_LDFLAGS', 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):
# 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
@@ -114,7 +114,9 @@ if EXTRA_ENV_COMPILE_ARGS is None:
EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64'
elif 'win32' in sys.platform:
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'
if EXTRA_ENV_LINK_ARGS is None:
@@ -172,7 +174,7 @@ LDFLAGS = tuple(EXTRA_LINK_ARGS)
CFLAGS = tuple(EXTRA_COMPILE_ARGS)
if "linux" in sys.platform or "darwin" in sys.platform:
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),)
# By default, Python3 distutils enforces compatibility of
@@ -192,14 +194,22 @@ def cython_extensions_and_necessity():
cython_module_files = [os.path.join(PYTHON_STEM,
name.replace('.', '/') + '.pyx')
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 = [
_extension.Extension(
name=module_name,
- language='c++',
sources=[module_file] + list(CYTHON_HELPER_C_FILES) + list(CORE_C_FILES),
include_dirs=list(EXTENSION_INCLUDE_DIRECTORIES),
libraries=list(EXTENSION_LIBRARIES),
define_macros=list(DEFINE_MACROS),
+ extra_objects=extra_objects,
extra_compile_args=list(CFLAGS),
extra_link_args=list(LDFLAGS),
) for (module_name, module_file) in zip(list(CYTHON_EXTENSION_MODULE_NAMES), cython_module_files)
diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py
index f196b028a7..f6a66f1f41 100644
--- a/src/python/grpcio/commands.py
+++ b/src/python/grpcio/commands.py
@@ -266,6 +266,25 @@ class BuildExt(build_ext.build_ext):
LINK_OPTIONS = {}
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
if compiler in BuildExt.C_OPTIONS:
for extension in self.extensions: