grpc: expose cxxStandard

This commit is contained in:
Weijia Wang 2022-12-19 05:28:41 +01:00
parent 8b0e7e5689
commit 39938dacb3
2 changed files with 24 additions and 23 deletions

View file

@ -54,28 +54,18 @@ stdenv.mkDerivation rec {
buildInputs = [ openssl protobuf ]
++ lib.optionals stdenv.isLinux [ libnsl ];
cmakeFlags =
let
# Needs to be compiled with -std=c++11 for clang < 11. Interestingly this is
# only an issue with the useLLVM stdenv, not the darwin stdenv…
# https://github.com/grpc/grpc/issues/26473#issuecomment-860885484
useLLVMAndOldCC = (stdenv.hostPlatform.useLLVM or false) && lib.versionOlder stdenv.cc.cc.version "11.0";
# With GCC 9 (current aarch64-linux) it fails with c++17 but OK with c++14.
useOldGCC = !(stdenv.hostPlatform.useLLVM or false) && lib.versionOlder stdenv.cc.cc.version "10";
cxxStandard = if useLLVMAndOldCC then "11" else if useOldGCC then "14" else "17";
in
[
"-DgRPC_ZLIB_PROVIDER=package"
"-DgRPC_CARES_PROVIDER=package"
"-DgRPC_RE2_PROVIDER=package"
"-DgRPC_SSL_PROVIDER=package"
"-DgRPC_PROTOBUF_PROVIDER=package"
"-DgRPC_ABSL_PROVIDER=package"
"-DBUILD_SHARED_LIBS=ON"
"-DCMAKE_CXX_STANDARD=${cxxStandard}"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"-D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=${buildPackages.protobuf}/bin/protoc"
];
cmakeFlags = [
"-DgRPC_ZLIB_PROVIDER=package"
"-DgRPC_CARES_PROVIDER=package"
"-DgRPC_RE2_PROVIDER=package"
"-DgRPC_SSL_PROVIDER=package"
"-DgRPC_PROTOBUF_PROVIDER=package"
"-DgRPC_ABSL_PROVIDER=package"
"-DBUILD_SHARED_LIBS=ON"
"-DCMAKE_CXX_STANDARD=${passthru.cxxStandard}"
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"-D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=${buildPackages.protobuf}/bin/protoc"
];
# CMake creates a build directory by default, this conflicts with the
# basel BUILD file on case-insensitive filesystems.
@ -97,6 +87,17 @@ stdenv.mkDerivation rec {
enableParallelBuilds = true;
passthru.cxxStandard =
let
# Needs to be compiled with -std=c++11 for clang < 11. Interestingly this is
# only an issue with the useLLVM stdenv, not the darwin stdenv…
# https://github.com/grpc/grpc/issues/26473#issuecomment-860885484
useLLVMAndOldCC = (stdenv.hostPlatform.useLLVM or false) && lib.versionOlder stdenv.cc.cc.version "11.0";
# With GCC 9 (current aarch64-linux) it fails with c++17 but OK with c++14.
useOldGCC = !(stdenv.hostPlatform.useLLVM or false) && lib.versionOlder stdenv.cc.cc.version "10";
in
(if useLLVMAndOldCC then "11" else if useOldGCC then "14" else "17");
passthru.tests = {
inherit (python3.pkgs) grpcio-status grpcio-tools;
inherit arrow-cpp;

View file

@ -19522,7 +19522,7 @@ with pkgs;
grpc = callPackage ../development/libraries/grpc {
# grpc builds with c++17 so abseil must also be built that way
abseil-cpp = abseil-cpp_202206.override {
cxxStandard = "17";
cxxStandard = grpc.cxxStandard;
};
};