xmake.lua 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package("grpc")
  2. set_homepage("https://grpc.io")
  3. set_description("The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)")
  4. set_license("Apache-2.0")
  5. add_urls("https://github.com/grpc/grpc/archive/refs/tags/$(version).zip",
  6. "https://github.com/grpc/grpc.git")
  7. add_versions("v1.51.3", "17720fd0a690e904a468b4b3dae6fa5ec40b0d1f4d418e2ca092e2f92f06fce0")
  8. add_patches("1.51.3", path.join(os.scriptdir(), "patches", "1.51.3", "disable-download-archive.patch"), "90fdd6e4a51cbc9756d1fcdd0f65e665d4b78cfd91fdbeb0228cc4e9c4ba1b73")
  9. add_patches("1.51.3", path.join(os.scriptdir(), "patches", "1.51.3", "static-linking-in-linux.patch"), "176474919883f93be0c5056098eccad408038663c6c7361f2e049cdf7247a19c")
  10. add_deps("cmake")
  11. if is_plat("linux") then
  12. add_deps("autoconf", "libtool", "pkg-config")
  13. add_extsources("apt::build-essential")
  14. elseif is_plat("macosx") then
  15. add_deps("autoconf", "automake", "libtool")
  16. add_extsources("brew::shtool")
  17. elseif is_plat("windows") then
  18. add_deps("nasm")
  19. add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
  20. end
  21. add_deps("c-ares", "re2", "abseil", "protobuf-cpp", "openssl", "zlib")
  22. if is_plat("linux") then
  23. add_syslinks("pthread", "dl", "m")
  24. end
  25. add_links("grpc++", "grpc++_unsecure", "grpc++_alts", "grpc++_reflection", "grpc++_error_details", "grpcpp_channelz")
  26. add_links("grpc", "grpc_unsecure", "grpc_plugin_support", "gpr")
  27. add_links("address_sorting", "upb") --TODO we should add seperate package deps
  28. on_load(function (package)
  29. package:addenv("PATH", "bin")
  30. end)
  31. on_install("linux", "macosx", "windows", function (package)
  32. local configs = {
  33. "-DCMAKE_CXX_STANDARD=17", -- abseil need c++17
  34. "-DgRPC_BUILD_TESTS=OFF",
  35. "-DgRPC_ZLIB_PROVIDER=package",
  36. "-DgRPC_ABSL_PROVIDER=package",
  37. "-DgRPC_CARES_PROVIDER=package",
  38. "-DgRPC_RE2_PROVIDER=package",
  39. "-DgRPC_SSL_PROVIDER=package",
  40. "-DgRPC_PROTOBUF_PROVIDER=package",
  41. "-DgRPC_UPB_PROVIDER=module", -- TODO
  42. "-DgRPC_BENCHMARK_PROVIDER=none",
  43. "-DgRPC_PROTOBUF_PACKAGE_TYPE=CONFIG"}
  44. table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
  45. table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
  46. import("package.tools.cmake").install(package, configs)
  47. end)
  48. on_test(function (package)
  49. if package:is_binary() then
  50. assert(os.isfile(path.join(package:installdir(), "bin", "grpc_cpp_plugin")))
  51. else
  52. assert(package:check_cxxsnippets({test = [[
  53. #include <iostream>
  54. void test() {
  55. grpc::CompletionQueue q;
  56. std::string server_address("192.168.28.109:9010");
  57. auto channel = grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials());
  58. std::cout << &channel << std::endl;
  59. }
  60. ]]}, {configs = {languages = "c++17"}, includes = "grpcpp/grpcpp.h"}))
  61. end
  62. end)