aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/run_tests/build_artifact_python.bat
diff options
context:
space:
mode:
authorGravatar Masood Malekghassemi <atash@google.com>2016-05-06 12:58:30 -0700
committerGravatar Masood Malekghassemi <atash@google.com>2016-05-07 13:01:14 -0700
commitb4e82f7897c8a840249f39f17bc9afb986206588 (patch)
tree0ad9a123f3aff26c6e27430102ca48a66bbb0e94 /tools/run_tests/build_artifact_python.bat
parent8c33c7442c79682d2e545820f5653cabf25fd07e (diff)
Fix windows linkage in Python grpcio-tools
Diffstat (limited to 'tools/run_tests/build_artifact_python.bat')
-rw-r--r--tools/run_tests/build_artifact_python.bat29
1 files changed, 19 insertions, 10 deletions
diff --git a/tools/run_tests/build_artifact_python.bat b/tools/run_tests/build_artifact_python.bat
index 342469bba8..fea0275426 100644
--- a/tools/run_tests/build_artifact_python.bat
+++ b/tools/run_tests/build_artifact_python.bat
@@ -41,7 +41,7 @@ copy /Y vsprojects\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\
copy /Y vsprojects\x64\Release\grpc_dll.dll src\python\grpcio\grpc\_cython\_windows\grpc_c.64.python || goto :error
-set PATH=C:\%1;C:\%1\scripts;%PATH%
+set PATH=C:\%1;C:\%1\scripts;C:\msys64\mingw%2\bin;%PATH%
pip install --upgrade six
pip install --upgrade setuptools
@@ -55,19 +55,28 @@ set GRPC_PYTHON_BUILD_WITH_CYTHON=1
python setup.py bdist_wheel
@rem Build gRPC Python tools
-set PATH=C:\msys64\mingw%2\bin;%PATH%
-set CC=C:\msys64\mingw%2\bin\g++.exe
-set CFLAGS=-fno-wrapv
+@rem
+@rem Because this is windows and *everything seems to hate Windows* we have to
+@rem set all of these flags ourselves because Python won't help us (see the
+@rem setup.py of the grpcio_tools project).
+set GRPC_PYTHON_CFLAGS=-fno-wrapv -frtti -std=c++11
+@rem Further confusing things, MSYS2's mingw64 tries to dynamically link
+@rem libgcc, libstdc++, and winpthreads. We have to override this or our
+@rem extensions end up linking to MSYS2 DLLs, which the normal Python on
+@rem Windows user won't have... and ON TOP OF THIS, there's MinGW's GCC default
+@rem behavior of linking msvcrt.dll as the C runtime library, which we need to
+@rem override so that Python's distutils doesn't link us against multiple C
+@rem runtimes.
+python -c "from distutils.cygwinccompiler import get_msvcr; print(get_msvcr()[0])" > temp.txt
+set /p PYTHON_MSVCR=<temp.txt
+set GRPC_PYTHON_LDFLAGS=-static-libgcc -static-libstdc++ -mcrtdll=%PYTHON_MSVCR% -static -lpthread
python tools\distrib\python\make_grpcio_tools.py
-@rem The following commands *must* be run with the right version of python
-@rem otherwise the build get SNAFU'd (so we use the .exe suffix to invoke the python
-@rem we set in the %PATH% variable above).
if %2 == 32 (
- python.exe tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32
+ python tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32
) else (
- python.exe tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32 -DMS_WIN64
+ python tools\distrib\python\grpcio_tools\setup.py build_ext -c mingw32 -DMS_WIN64
)
-python.exe tools\distrib\python\grpcio_tools\setup.py bdist_wheel
+python tools\distrib\python\grpcio_tools\setup.py bdist_wheel
mkdir artifacts
xcopy /Y /I /S dist\* artifacts\ || goto :error