69 lines
1.5 KiB
Markdown
69 lines
1.5 KiB
Markdown
# Cross Compile gRPC-rs(0.2.1) to Windows under *nix
|
|
|
|
## First you need to install mingw
|
|
|
|
```bash
|
|
# macOS
|
|
brew install mingw-w64
|
|
|
|
# CentOS
|
|
yum install mingw64-openssl-static mingw64-zlib-static mingw64-winpthreads-static
|
|
```
|
|
|
|
## Fix CMake
|
|
|
|
```
|
|
# modify grpc-rs/grpc-sys/build.rs
|
|
# fix SYSTEM_PROCESSOR
|
|
"CMAKE_SYSTEM_PROCESSOR", get_env("CARGO_CFG_TARGET_ARCH").unwrap()
|
|
# fix try_run
|
|
"CMAKE_CROSSCOMPILING", "true"
|
|
```
|
|
|
|
### All diff in `fn build_grpc`
|
|
|
|
```rust
|
|
let dst = {
|
|
let mut config = Config::new("grpc");
|
|
if get_env("CARGO_CFG_TARGET_OS").map_or(false, |s| s == "macos") {
|
|
config.cxxflag("-stdlib=libc++");
|
|
}
|
|
config
|
|
.define("CMAKE_SYSTEM_PROCESSOR", get_env("CARGO_CFG_TARGET_ARCH").unwrap())
|
|
.define("CMAKE_CROSSCOMPILING", "true")
|
|
.build_target(library)
|
|
.uses_cxx11()
|
|
.build()
|
|
// config.build_target(library).uses_cxx11().build()
|
|
};
|
|
```
|
|
|
|
### Fix find zlib
|
|
|
|
```rust
|
|
// try these values
|
|
let mut zlib = "z";
|
|
let mut zlib = "zlibstatic";
|
|
let mut zlib = "zlibstaticd";
|
|
```
|
|
|
|
## Fix WIN32 API
|
|
|
|
```
|
|
# grpc-rs/grpc-sys/grpc/CMakeLists.txt
|
|
# add these code after about line number 295
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_WIN32_WINNT=0x600")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x600")
|
|
set(C_CXX_FLAGS "${C_CXX_FLAGS} -D_WIN32_WINNT=0x600")
|
|
```
|
|
|
|
## Fix boringssl
|
|
|
|
Just update third_party/boringssl
|
|
|
|
```bash
|
|
cd third_party/boringssl
|
|
git checkout master
|
|
git pull
|
|
```
|