|
|
|
@ -29,6 +29,9 @@ import sysconfig |
|
|
|
|
import setuptools |
|
|
|
|
from setuptools.command import build_ext |
|
|
|
|
|
|
|
|
|
import subprocess |
|
|
|
|
from subprocess import PIPE |
|
|
|
|
|
|
|
|
|
# TODO(atash) add flag to disable Cython use |
|
|
|
|
|
|
|
|
|
_PACKAGE_PATH = os.path.realpath(os.path.dirname(__file__)) |
|
|
|
@ -62,6 +65,20 @@ PY3 = sys.version_info.major == 3 |
|
|
|
|
# to have been generated by building first *with* Cython support. |
|
|
|
|
BUILD_WITH_CYTHON = os.environ.get('GRPC_PYTHON_BUILD_WITH_CYTHON', False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def check_linker_need_libatomic(): |
|
|
|
|
"""Test if linker on system needs libatomic.""" |
|
|
|
|
code_test = (b'#include <atomic>\n' + |
|
|
|
|
b'int main() { return std::atomic<int64_t>{}; }') |
|
|
|
|
cc_test = subprocess.Popen( |
|
|
|
|
['cc', '-x', 'c++', '-std=c++11', '-'], |
|
|
|
|
stdin=PIPE, |
|
|
|
|
stdout=PIPE, |
|
|
|
|
stderr=PIPE) |
|
|
|
|
cc_test.communicate(input=code_test) |
|
|
|
|
return cc_test.returncode != 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are |
|
|
|
|
# entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support. |
|
|
|
|
# We use these environment variables to thus get around that without locking |
|
|
|
@ -93,6 +110,8 @@ if EXTRA_ENV_LINK_ARGS is None: |
|
|
|
|
EXTRA_ENV_LINK_ARGS = '' |
|
|
|
|
if "linux" in sys.platform or "darwin" in sys.platform: |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -lpthread' |
|
|
|
|
if check_linker_need_libatomic(): |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -latomic' |
|
|
|
|
elif "win32" in sys.platform and sys.version_info < (3, 5): |
|
|
|
|
msvcr = cygwinccompiler.get_msvcr()[0] |
|
|
|
|
# TODO(atash) sift through the GCC specs to see if libstdc++ can have any |
|
|
|
|