| # 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 |
| ``` |