Package.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. // swift-tools-version:5.2
  2. /*
  3. * Copyright 2017, gRPC Authors All rights reserved.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. import PackageDescription
  18. let package = Package(
  19. name: "grpc-swift",
  20. products: [
  21. .library(name: "GRPC", targets: ["GRPC"]),
  22. .library(name: "CGRPCZlib", targets: ["CGRPCZlib"]),
  23. .executable(name: "protoc-gen-grpc-swift", targets: ["protoc-gen-grpc-swift"]),
  24. ],
  25. dependencies: [
  26. // GRPC dependencies:
  27. // Main SwiftNIO package
  28. .package(url: "https://github.com/apple/swift-nio.git", from: "2.32.0"),
  29. // HTTP2 via SwiftNIO
  30. .package(url: "https://github.com/apple/swift-nio-http2.git", from: "1.18.2"),
  31. // TLS via SwiftNIO
  32. .package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.14.0"),
  33. // Support for Network.framework where possible.
  34. .package(url: "https://github.com/apple/swift-nio-transport-services.git", from: "1.11.1"),
  35. // Extra NIO stuff; quiescing helpers.
  36. .package(url: "https://github.com/apple/swift-nio-extras.git", from: "1.4.0"),
  37. // Official SwiftProtobuf library, for [de]serializing data to send on the wire.
  38. .package(
  39. name: "SwiftProtobuf",
  40. url: "https://github.com/apple/swift-protobuf.git",
  41. from: "1.9.0"
  42. ),
  43. // Logging API.
  44. .package(url: "https://github.com/apple/swift-log.git", from: "1.4.0"),
  45. // Argument parsing: only for internal targets (i.e. examples).
  46. .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.0"),
  47. ],
  48. targets: [
  49. // The main GRPC module.
  50. .target(
  51. name: "GRPC",
  52. dependencies: [
  53. .product(name: "NIO", package: "swift-nio"),
  54. .product(name: "NIOCore", package: "swift-nio"),
  55. .product(name: "NIOPosix", package: "swift-nio"),
  56. .product(name: "NIOEmbedded", package: "swift-nio"),
  57. .product(name: "NIOFoundationCompat", package: "swift-nio"),
  58. .product(name: "NIOTLS", package: "swift-nio"),
  59. .product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
  60. .product(name: "NIOHTTP1", package: "swift-nio"),
  61. .product(name: "NIOHTTP2", package: "swift-nio-http2"),
  62. .product(name: "NIOExtras", package: "swift-nio-extras"),
  63. .product(name: "NIOSSL", package: "swift-nio-ssl"),
  64. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  65. .product(name: "Logging", package: "swift-log"),
  66. .target(name: "CGRPCZlib"),
  67. ]
  68. ), // and its tests.
  69. .testTarget(
  70. name: "GRPCTests",
  71. dependencies: [
  72. .target(name: "GRPC"),
  73. .target(name: "EchoModel"),
  74. .target(name: "EchoImplementation"),
  75. .target(name: "GRPCSampleData"),
  76. .target(name: "GRPCInteroperabilityTestsImplementation"),
  77. .target(name: "HelloWorldModel"),
  78. .product(name: "NIOCore", package: "swift-nio"),
  79. .product(name: "NIOConcurrencyHelpers", package: "swift-nio"),
  80. .product(name: "NIOPosix", package: "swift-nio"),
  81. .product(name: "NIOTLS", package: "swift-nio"),
  82. .product(name: "NIOHTTP1", package: "swift-nio"),
  83. .product(name: "NIOHTTP2", package: "swift-nio-http2"),
  84. .product(name: "NIOEmbedded", package: "swift-nio"),
  85. .product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
  86. .product(name: "Logging", package: "swift-log"),
  87. ]
  88. ),
  89. .target(
  90. name: "CGRPCZlib",
  91. linkerSettings: [
  92. .linkedLibrary("z"),
  93. ]
  94. ),
  95. // The `protoc` plugin.
  96. .target(
  97. name: "protoc-gen-grpc-swift",
  98. dependencies: [
  99. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  100. .product(name: "SwiftProtobufPluginLibrary", package: "SwiftProtobuf"),
  101. ]
  102. ),
  103. // Interoperability tests implementation.
  104. .target(
  105. name: "GRPCInteroperabilityTestsImplementation",
  106. dependencies: [
  107. .target(name: "GRPC"),
  108. .target(name: "GRPCInteroperabilityTestModels"),
  109. .product(name: "NIOCore", package: "swift-nio"),
  110. .product(name: "NIOPosix", package: "swift-nio"),
  111. .product(name: "NIOHTTP2", package: "swift-nio-http2"),
  112. .product(name: "NIOSSL", package: "swift-nio-ssl"),
  113. .product(name: "Logging", package: "swift-log"),
  114. ]
  115. ),
  116. // Generated interoperability test models.
  117. .target(
  118. name: "GRPCInteroperabilityTestModels",
  119. dependencies: [
  120. .target(name: "GRPC"),
  121. .product(name: "NIO", package: "swift-nio"),
  122. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  123. ]
  124. ),
  125. // The CLI for the interoperability tests.
  126. .target(
  127. name: "GRPCInteroperabilityTests",
  128. dependencies: [
  129. .target(name: "GRPC"),
  130. .target(name: "GRPCInteroperabilityTestsImplementation"),
  131. .product(name: "NIOCore", package: "swift-nio"),
  132. .product(name: "NIOPosix", package: "swift-nio"),
  133. .product(name: "Logging", package: "swift-log"),
  134. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  135. ]
  136. ),
  137. // The connection backoff interoperability test.
  138. .target(
  139. name: "GRPCConnectionBackoffInteropTest",
  140. dependencies: [
  141. .target(name: "GRPC"),
  142. .target(name: "GRPCInteroperabilityTestModels"),
  143. .product(name: "NIOCore", package: "swift-nio"),
  144. .product(name: "NIOPosix", package: "swift-nio"),
  145. .product(name: "Logging", package: "swift-log"),
  146. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  147. ]
  148. ),
  149. // Performance tests implementation and CLI.
  150. .target(
  151. name: "GRPCPerformanceTests",
  152. dependencies: [
  153. .target(name: "GRPC"),
  154. .product(name: "NIOCore", package: "swift-nio"),
  155. .product(name: "NIOEmbedded", package: "swift-nio"),
  156. .product(name: "NIOPosix", package: "swift-nio"),
  157. .product(name: "NIOHTTP2", package: "swift-nio-http2"),
  158. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  159. ]
  160. ),
  161. // Sample data, used in examples and tests.
  162. .target(
  163. name: "GRPCSampleData",
  164. dependencies: [
  165. .product(name: "NIOSSL", package: "swift-nio-ssl"),
  166. ]
  167. ),
  168. // Echo example CLI.
  169. .target(
  170. name: "Echo",
  171. dependencies: [
  172. .target(name: "EchoModel"),
  173. .target(name: "EchoImplementation"),
  174. .target(name: "GRPC"),
  175. .target(name: "GRPCSampleData"),
  176. .product(name: "NIOCore", package: "swift-nio"),
  177. .product(name: "NIOPosix", package: "swift-nio"),
  178. .product(name: "NIOSSL", package: "swift-nio-ssl"),
  179. .product(name: "Logging", package: "swift-log"),
  180. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  181. ],
  182. path: "Sources/Examples/Echo/Runtime"
  183. ),
  184. // Echo example service implementation.
  185. .target(
  186. name: "EchoImplementation",
  187. dependencies: [
  188. .target(name: "EchoModel"),
  189. .target(name: "GRPC"),
  190. .product(name: "NIOCore", package: "swift-nio"),
  191. .product(name: "NIOHTTP2", package: "swift-nio-http2"),
  192. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  193. ],
  194. path: "Sources/Examples/Echo/Implementation"
  195. ),
  196. // Model for Echo example.
  197. .target(
  198. name: "EchoModel",
  199. dependencies: [
  200. .target(name: "GRPC"),
  201. .product(name: "NIO", package: "swift-nio"),
  202. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  203. ],
  204. path: "Sources/Examples/Echo/Model"
  205. ),
  206. // Model for the HelloWorld example
  207. .target(
  208. name: "HelloWorldModel",
  209. dependencies: [
  210. .target(name: "GRPC"),
  211. .product(name: "NIO", package: "swift-nio"),
  212. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  213. ],
  214. path: "Sources/Examples/HelloWorld/Model"
  215. ),
  216. // Client for the HelloWorld example
  217. .target(
  218. name: "HelloWorldClient",
  219. dependencies: [
  220. .target(name: "GRPC"),
  221. .target(name: "HelloWorldModel"),
  222. .product(name: "NIOCore", package: "swift-nio"),
  223. .product(name: "NIOPosix", package: "swift-nio"),
  224. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  225. ],
  226. path: "Sources/Examples/HelloWorld/Client"
  227. ),
  228. // Server for the HelloWorld example
  229. .target(
  230. name: "HelloWorldServer",
  231. dependencies: [
  232. .target(name: "GRPC"),
  233. .target(name: "HelloWorldModel"),
  234. .product(name: "NIOCore", package: "swift-nio"),
  235. .product(name: "NIOPosix", package: "swift-nio"),
  236. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  237. ],
  238. path: "Sources/Examples/HelloWorld/Server"
  239. ),
  240. // Model for the RouteGuide example
  241. .target(
  242. name: "RouteGuideModel",
  243. dependencies: [
  244. .target(name: "GRPC"),
  245. .product(name: "NIO", package: "swift-nio"),
  246. .product(name: "SwiftProtobuf", package: "SwiftProtobuf"),
  247. ],
  248. path: "Sources/Examples/RouteGuide/Model"
  249. ),
  250. // Client for the RouteGuide example
  251. .target(
  252. name: "RouteGuideClient",
  253. dependencies: [
  254. .target(name: "GRPC"),
  255. .target(name: "RouteGuideModel"),
  256. .product(name: "NIOCore", package: "swift-nio"),
  257. .product(name: "NIOPosix", package: "swift-nio"),
  258. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  259. ],
  260. path: "Sources/Examples/RouteGuide/Client"
  261. ),
  262. // Server for the RouteGuide example
  263. .target(
  264. name: "RouteGuideServer",
  265. dependencies: [
  266. .target(name: "GRPC"),
  267. .target(name: "RouteGuideModel"),
  268. .product(name: "NIOCore", package: "swift-nio"),
  269. .product(name: "NIOConcurrencyHelpers", package: "swift-nio"),
  270. .product(name: "NIOPosix", package: "swift-nio"),
  271. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  272. ],
  273. path: "Sources/Examples/RouteGuide/Server"
  274. ),
  275. // Client for the PacketCapture example
  276. .target(
  277. name: "PacketCapture",
  278. dependencies: [
  279. .target(name: "GRPC"),
  280. .target(name: "EchoModel"),
  281. .product(name: "NIOCore", package: "swift-nio"),
  282. .product(name: "NIOPosix", package: "swift-nio"),
  283. .product(name: "NIOExtras", package: "swift-nio-extras"),
  284. .product(name: "Logging", package: "swift-log"),
  285. .product(name: "ArgumentParser", package: "swift-argument-parser"),
  286. ],
  287. path: "Sources/Examples/PacketCapture"
  288. ),
  289. ]
  290. )