Package@swift-6.swift 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135
  1. // swift-tools-version:6.0
  2. /*
  3. * Copyright 2024, 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. // swiftformat puts the next import before the tools version.
  19. // swiftformat:disable:next sortImports
  20. import class Foundation.ProcessInfo
  21. let grpcPackageName = "grpc-swift"
  22. let grpcProductName = "GRPC"
  23. let cgrpcZlibProductName = "CGRPCZlib"
  24. let grpcTargetName = grpcProductName
  25. let cgrpcZlibTargetName = cgrpcZlibProductName
  26. let includeNIOSSL = ProcessInfo.processInfo.environment["GRPC_NO_NIO_SSL"] == nil
  27. // MARK: - Package Dependencies
  28. let packageDependencies: [Package.Dependency] = [
  29. .package(
  30. url: "https://github.com/apple/swift-nio.git",
  31. from: "2.65.0"
  32. ),
  33. .package(
  34. url: "https://github.com/apple/swift-nio-http2.git",
  35. from: "1.32.0"
  36. ),
  37. .package(
  38. url: "https://github.com/apple/swift-nio-transport-services.git",
  39. from: "1.15.0"
  40. ),
  41. .package(
  42. url: "https://github.com/apple/swift-nio-extras.git",
  43. from: "1.4.0"
  44. ),
  45. .package(
  46. url: "https://github.com/apple/swift-collections.git",
  47. from: "1.0.5"
  48. ),
  49. .package(
  50. url: "https://github.com/apple/swift-atomics.git",
  51. from: "1.2.0"
  52. ),
  53. .package(
  54. url: "https://github.com/apple/swift-protobuf.git",
  55. from: "1.28.1"
  56. ),
  57. .package(
  58. url: "https://github.com/apple/swift-log.git",
  59. from: "1.4.4"
  60. ),
  61. .package(
  62. url: "https://github.com/apple/swift-argument-parser.git",
  63. // Version is higher than in other Package@swift manifests: 1.1.0 raised the minimum Swift
  64. // version and indluded async support.
  65. from: "1.1.1"
  66. ),
  67. .package(
  68. url: "https://github.com/apple/swift-distributed-tracing.git",
  69. from: "1.0.0"
  70. ),
  71. .package(
  72. url: "https://github.com/swiftlang/swift-testing.git",
  73. branch: "release/6.0"
  74. ),
  75. ].appending(
  76. .package(
  77. url: "https://github.com/apple/swift-nio-ssl.git",
  78. from: "2.23.0"
  79. ),
  80. if: includeNIOSSL
  81. )
  82. // MARK: - Target Dependencies
  83. extension Target.Dependency {
  84. // Target dependencies; external
  85. static var grpc: Self { .target(name: grpcTargetName) }
  86. static var cgrpcZlib: Self { .target(name: cgrpcZlibTargetName) }
  87. static var protocGenGRPCSwift: Self { .target(name: "protoc-gen-grpc-swift") }
  88. static var performanceWorker: Self { .target(name: "performance-worker") }
  89. static var reflectionService: Self { .target(name: "GRPCReflectionService") }
  90. static var grpcCodeGen: Self { .target(name: "GRPCCodeGen") }
  91. static var grpcProtobuf: Self { .target(name: "GRPCProtobuf") }
  92. static var grpcProtobufCodeGen: Self { .target(name: "GRPCProtobufCodeGen") }
  93. // Target dependencies; internal
  94. static var grpcSampleData: Self { .target(name: "GRPCSampleData") }
  95. static var echoModel: Self { .target(name: "EchoModel") }
  96. static var echoImplementation: Self { .target(name: "EchoImplementation") }
  97. static var helloWorldModel: Self { .target(name: "HelloWorldModel") }
  98. static var routeGuideModel: Self { .target(name: "RouteGuideModel") }
  99. static var interopTestModels: Self { .target(name: "GRPCInteroperabilityTestModels") }
  100. static var interopTestImplementation: Self {
  101. .target(name: "GRPCInteroperabilityTestsImplementation")
  102. }
  103. static var interoperabilityTests: Self { .target(name: "InteroperabilityTests") }
  104. // Product dependencies
  105. static var argumentParser: Self {
  106. .product(
  107. name: "ArgumentParser",
  108. package: "swift-argument-parser"
  109. )
  110. }
  111. static var nio: Self { .product(name: "NIO", package: "swift-nio") }
  112. static var nioConcurrencyHelpers: Self {
  113. .product(
  114. name: "NIOConcurrencyHelpers",
  115. package: "swift-nio"
  116. )
  117. }
  118. static var nioCore: Self { .product(name: "NIOCore", package: "swift-nio") }
  119. static var nioEmbedded: Self { .product(name: "NIOEmbedded", package: "swift-nio") }
  120. static var nioExtras: Self { .product(name: "NIOExtras", package: "swift-nio-extras") }
  121. static var nioFoundationCompat: Self { .product(name: "NIOFoundationCompat", package: "swift-nio") }
  122. static var nioHTTP1: Self { .product(name: "NIOHTTP1", package: "swift-nio") }
  123. static var nioHTTP2: Self { .product(name: "NIOHTTP2", package: "swift-nio-http2") }
  124. static var nioPosix: Self { .product(name: "NIOPosix", package: "swift-nio") }
  125. static var nioSSL: Self { .product(name: "NIOSSL", package: "swift-nio-ssl") }
  126. static var nioTLS: Self { .product(name: "NIOTLS", package: "swift-nio") }
  127. static var nioTransportServices: Self {
  128. .product(
  129. name: "NIOTransportServices",
  130. package: "swift-nio-transport-services"
  131. )
  132. }
  133. static var nioTestUtils: Self { .product(name: "NIOTestUtils", package: "swift-nio") }
  134. static var nioFileSystem: Self { .product(name: "_NIOFileSystem", package: "swift-nio") }
  135. static var logging: Self { .product(name: "Logging", package: "swift-log") }
  136. static var protobuf: Self { .product(name: "SwiftProtobuf", package: "swift-protobuf") }
  137. static var protobufPluginLibrary: Self {
  138. .product(
  139. name: "SwiftProtobufPluginLibrary",
  140. package: "swift-protobuf"
  141. )
  142. }
  143. static var dequeModule: Self { .product(name: "DequeModule", package: "swift-collections") }
  144. static var atomics: Self { .product(name: "Atomics", package: "swift-atomics") }
  145. static var tracing: Self { .product(name: "Tracing", package: "swift-distributed-tracing") }
  146. static var testing: Self {
  147. .product(
  148. name: "Testing",
  149. package: "swift-testing",
  150. condition: .when(platforms: [.linux]) // Already included in the toolchain on Darwin
  151. )
  152. }
  153. static var grpcCore: Self { .target(name: "GRPCCore") }
  154. static var grpcInProcessTransport: Self { .target(name: "GRPCInProcessTransport") }
  155. static var grpcInterceptors: Self { .target(name: "GRPCInterceptors") }
  156. static var grpcHTTP2Core: Self { .target(name: "GRPCHTTP2Core") }
  157. static var grpcHTTP2Transport: Self { .target(name: "GRPCHTTP2Transport") }
  158. static var grpcHTTP2TransportNIOPosix: Self { .target(name: "GRPCHTTP2TransportNIOPosix") }
  159. static var grpcHTTP2TransportNIOTransportServices: Self { .target(name: "GRPCHTTP2TransportNIOTransportServices") }
  160. static var grpcHealth: Self { .target(name: "GRPCHealth") }
  161. }
  162. // MARK: - Targets
  163. extension Target {
  164. static var grpc: Target {
  165. .target(
  166. name: grpcTargetName,
  167. dependencies: [
  168. .cgrpcZlib,
  169. .nio,
  170. .nioCore,
  171. .nioPosix,
  172. .nioEmbedded,
  173. .nioFoundationCompat,
  174. .nioTLS,
  175. .nioTransportServices,
  176. .nioHTTP1,
  177. .nioHTTP2,
  178. .nioExtras,
  179. .logging,
  180. .protobuf,
  181. .dequeModule,
  182. .atomics
  183. ].appending(
  184. .nioSSL, if: includeNIOSSL
  185. ),
  186. path: "Sources/GRPC",
  187. swiftSettings: [.swiftLanguageMode(.v5)]
  188. )
  189. }
  190. static var grpcCore: Target {
  191. .target(
  192. name: "GRPCCore",
  193. dependencies: [
  194. .dequeModule,
  195. ],
  196. path: "Sources/GRPCCore",
  197. swiftSettings: [
  198. .swiftLanguageMode(.v5),
  199. .enableUpcomingFeature("ExistentialAny"),
  200. .enableUpcomingFeature("InternalImportsByDefault")
  201. ]
  202. )
  203. }
  204. static var grpcInProcessTransport: Target {
  205. .target(
  206. name: "GRPCInProcessTransport",
  207. dependencies: [
  208. .grpcCore
  209. ],
  210. swiftSettings: [
  211. .swiftLanguageMode(.v6),
  212. .enableUpcomingFeature("ExistentialAny"),
  213. .enableUpcomingFeature("InternalImportsByDefault")
  214. ]
  215. )
  216. }
  217. static var grpcInterceptors: Target {
  218. .target(
  219. name: "GRPCInterceptors",
  220. dependencies: [
  221. .grpcCore,
  222. .tracing
  223. ],
  224. swiftSettings: [
  225. .swiftLanguageMode(.v6),
  226. .enableUpcomingFeature("ExistentialAny"),
  227. .enableUpcomingFeature("InternalImportsByDefault")
  228. ]
  229. )
  230. }
  231. static var grpcHTTP2Core: Target {
  232. .target(
  233. name: "GRPCHTTP2Core",
  234. dependencies: [
  235. .grpcCore,
  236. .nioCore,
  237. .nioHTTP2,
  238. .nioTLS,
  239. .cgrpcZlib,
  240. .dequeModule,
  241. ],
  242. swiftSettings: [
  243. .swiftLanguageMode(.v6),
  244. .enableUpcomingFeature("ExistentialAny"),
  245. .enableUpcomingFeature("InternalImportsByDefault")
  246. ]
  247. )
  248. }
  249. static var grpcHTTP2TransportNIOPosix: Target {
  250. .target(
  251. name: "GRPCHTTP2TransportNIOPosix",
  252. dependencies: [
  253. .grpcCore,
  254. .grpcHTTP2Core,
  255. .nioPosix,
  256. .nioExtras
  257. ].appending(
  258. .nioSSL,
  259. if: includeNIOSSL
  260. ),
  261. swiftSettings: [
  262. .swiftLanguageMode(.v6),
  263. .enableUpcomingFeature("ExistentialAny"),
  264. .enableUpcomingFeature("InternalImportsByDefault")
  265. ]
  266. )
  267. }
  268. static var grpcHTTP2TransportNIOTransportServices: Target {
  269. .target(
  270. name: "GRPCHTTP2TransportNIOTransportServices",
  271. dependencies: [
  272. .grpcCore,
  273. .grpcHTTP2Core,
  274. .nioCore,
  275. .nioExtras,
  276. .nioTransportServices
  277. ],
  278. swiftSettings: [
  279. .swiftLanguageMode(.v6),
  280. .enableUpcomingFeature("ExistentialAny"),
  281. .enableUpcomingFeature("InternalImportsByDefault")
  282. ]
  283. )
  284. }
  285. static var grpcHTTP2Transport: Target {
  286. .target(
  287. name: "GRPCHTTP2Transport",
  288. dependencies: [
  289. .grpcCore,
  290. .grpcHTTP2Core,
  291. .grpcHTTP2TransportNIOPosix,
  292. .grpcHTTP2TransportNIOTransportServices,
  293. ],
  294. swiftSettings: [
  295. .swiftLanguageMode(.v6),
  296. .enableUpcomingFeature("ExistentialAny"),
  297. .enableUpcomingFeature("InternalImportsByDefault")
  298. ]
  299. )
  300. }
  301. static var cgrpcZlib: Target {
  302. .target(
  303. name: cgrpcZlibTargetName,
  304. path: "Sources/CGRPCZlib",
  305. linkerSettings: [
  306. .linkedLibrary("z"),
  307. ]
  308. )
  309. }
  310. static var protocGenGRPCSwift: Target {
  311. .executableTarget(
  312. name: "protoc-gen-grpc-swift",
  313. dependencies: [
  314. .protobuf,
  315. .protobufPluginLibrary,
  316. .grpcCodeGen,
  317. .grpcProtobufCodeGen
  318. ],
  319. exclude: [
  320. "README.md",
  321. ],
  322. swiftSettings: [.swiftLanguageMode(.v5)]
  323. )
  324. }
  325. static var performanceWorker: Target {
  326. .executableTarget(
  327. name: "performance-worker",
  328. dependencies: [
  329. .grpcCore,
  330. .grpcHTTP2Core,
  331. .grpcHTTP2TransportNIOPosix,
  332. .grpcProtobuf,
  333. .nioCore,
  334. .nioFileSystem,
  335. .argumentParser
  336. ],
  337. swiftSettings: [
  338. .swiftLanguageMode(.v6),
  339. .enableUpcomingFeature("ExistentialAny")
  340. ]
  341. )
  342. }
  343. static var grpcSwiftPlugin: Target {
  344. .plugin(
  345. name: "GRPCSwiftPlugin",
  346. capability: .buildTool(),
  347. dependencies: [
  348. .protocGenGRPCSwift,
  349. ]
  350. )
  351. }
  352. static var grpcTests: Target {
  353. .testTarget(
  354. name: "GRPCTests",
  355. dependencies: [
  356. .grpc,
  357. .echoModel,
  358. .echoImplementation,
  359. .helloWorldModel,
  360. .interopTestModels,
  361. .interopTestImplementation,
  362. .grpcSampleData,
  363. .nioCore,
  364. .nioConcurrencyHelpers,
  365. .nioPosix,
  366. .nioTLS,
  367. .nioHTTP1,
  368. .nioHTTP2,
  369. .nioEmbedded,
  370. .nioTransportServices,
  371. .logging,
  372. .reflectionService,
  373. .atomics
  374. ].appending(
  375. .nioSSL, if: includeNIOSSL
  376. ),
  377. exclude: [
  378. "Codegen/Serialization/echo.grpc.reflection"
  379. ],
  380. swiftSettings: [.swiftLanguageMode(.v5)]
  381. )
  382. }
  383. static var grpcCoreTests: Target {
  384. .testTarget(
  385. name: "GRPCCoreTests",
  386. dependencies: [
  387. .grpcCore,
  388. .grpcInProcessTransport,
  389. .dequeModule,
  390. .protobuf,
  391. .testing,
  392. ],
  393. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  394. )
  395. }
  396. static var grpcInProcessTransportTests: Target {
  397. .testTarget(
  398. name: "GRPCInProcessTransportTests",
  399. dependencies: [
  400. .grpcCore,
  401. .grpcInProcessTransport
  402. ],
  403. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  404. )
  405. }
  406. static var grpcInterceptorsTests: Target {
  407. .testTarget(
  408. name: "GRPCInterceptorsTests",
  409. dependencies: [
  410. .grpcCore,
  411. .tracing,
  412. .nioCore,
  413. .grpcInterceptors
  414. ],
  415. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  416. )
  417. }
  418. static var grpcHTTP2CoreTests: Target {
  419. .testTarget(
  420. name: "GRPCHTTP2CoreTests",
  421. dependencies: [
  422. .grpcHTTP2Core,
  423. .nioCore,
  424. .nioHTTP2,
  425. .nioEmbedded,
  426. .nioTestUtils,
  427. ],
  428. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  429. )
  430. }
  431. static var grpcHTTP2TransportTests: Target {
  432. .testTarget(
  433. name: "GRPCHTTP2TransportTests",
  434. dependencies: [
  435. .grpcHTTP2Core,
  436. .grpcHTTP2TransportNIOPosix,
  437. .grpcHTTP2TransportNIOTransportServices,
  438. .grpcProtobuf
  439. ].appending(
  440. .nioSSL, if: includeNIOSSL
  441. ),
  442. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  443. )
  444. }
  445. static var grpcCodeGenTests: Target {
  446. .testTarget(
  447. name: "GRPCCodeGenTests",
  448. dependencies: [
  449. .grpcCodeGen
  450. ],
  451. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  452. )
  453. }
  454. static var grpcProtobufTests: Target {
  455. .testTarget(
  456. name: "GRPCProtobufTests",
  457. dependencies: [
  458. .grpcProtobuf,
  459. .grpcCore,
  460. .protobuf
  461. ],
  462. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  463. )
  464. }
  465. static var grpcProtobufCodeGenTests: Target {
  466. .testTarget(
  467. name: "GRPCProtobufCodeGenTests",
  468. dependencies: [
  469. .grpcCodeGen,
  470. .grpcProtobufCodeGen,
  471. .protobuf,
  472. .protobufPluginLibrary
  473. ],
  474. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  475. )
  476. }
  477. static var inProcessInteroperabilityTests: Target {
  478. .testTarget(
  479. name: "InProcessInteroperabilityTests",
  480. dependencies: [
  481. .grpcInProcessTransport,
  482. .interoperabilityTests,
  483. .grpcCore
  484. ],
  485. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  486. )
  487. }
  488. static var grpcHealthTests: Target {
  489. .testTarget(
  490. name: "GRPCHealthTests",
  491. dependencies: [
  492. .grpcHealth,
  493. .grpcProtobuf,
  494. .grpcInProcessTransport
  495. ],
  496. path: "Tests/Services/HealthTests",
  497. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  498. )
  499. }
  500. static var interopTestModels: Target {
  501. .target(
  502. name: "GRPCInteroperabilityTestModels",
  503. dependencies: [
  504. .grpc,
  505. .nio,
  506. .protobuf,
  507. ],
  508. exclude: [
  509. "README.md",
  510. "generate.sh",
  511. "src/proto/grpc/testing/empty.proto",
  512. "src/proto/grpc/testing/empty_service.proto",
  513. "src/proto/grpc/testing/messages.proto",
  514. "src/proto/grpc/testing/test.proto",
  515. "unimplemented_call.patch",
  516. ],
  517. swiftSettings: [.swiftLanguageMode(.v5)]
  518. )
  519. }
  520. static var interoperabilityTestImplementation: Target {
  521. .target(
  522. name: "InteroperabilityTests",
  523. dependencies: [
  524. .grpcCore,
  525. .grpcProtobuf
  526. ],
  527. swiftSettings: [
  528. .swiftLanguageMode(.v6),
  529. .enableUpcomingFeature("ExistentialAny"),
  530. .enableUpcomingFeature("InternalImportsByDefault")
  531. ]
  532. )
  533. }
  534. static var interoperabilityTestsExecutable: Target {
  535. .executableTarget(
  536. name: "interoperability-tests",
  537. dependencies: [
  538. .grpcCore,
  539. .grpcHTTP2Core,
  540. .grpcHTTP2TransportNIOPosix,
  541. .interoperabilityTests,
  542. .argumentParser
  543. ],
  544. swiftSettings: [.swiftLanguageMode(.v6), .enableUpcomingFeature("ExistentialAny")]
  545. )
  546. }
  547. static var interopTestImplementation: Target {
  548. .target(
  549. name: "GRPCInteroperabilityTestsImplementation",
  550. dependencies: [
  551. .grpc,
  552. .interopTestModels,
  553. .nioCore,
  554. .nioPosix,
  555. .nioHTTP1,
  556. .logging,
  557. ].appending(
  558. .nioSSL, if: includeNIOSSL
  559. ),
  560. swiftSettings: [.swiftLanguageMode(.v5)]
  561. )
  562. }
  563. static var interopTests: Target {
  564. .executableTarget(
  565. name: "GRPCInteroperabilityTests",
  566. dependencies: [
  567. .grpc,
  568. .interopTestImplementation,
  569. .nioCore,
  570. .nioPosix,
  571. .logging,
  572. .argumentParser,
  573. ],
  574. swiftSettings: [.swiftLanguageMode(.v5)]
  575. )
  576. }
  577. static var backoffInteropTest: Target {
  578. .executableTarget(
  579. name: "GRPCConnectionBackoffInteropTest",
  580. dependencies: [
  581. .grpc,
  582. .interopTestModels,
  583. .nioCore,
  584. .nioPosix,
  585. .logging,
  586. .argumentParser,
  587. ],
  588. exclude: [
  589. "README.md",
  590. ],
  591. swiftSettings: [.swiftLanguageMode(.v5)]
  592. )
  593. }
  594. static var perfTests: Target {
  595. .executableTarget(
  596. name: "GRPCPerformanceTests",
  597. dependencies: [
  598. .grpc,
  599. .grpcSampleData,
  600. .nioCore,
  601. .nioEmbedded,
  602. .nioPosix,
  603. .nioHTTP2,
  604. .argumentParser,
  605. ],
  606. swiftSettings: [.swiftLanguageMode(.v5)]
  607. )
  608. }
  609. static var grpcSampleData: Target {
  610. .target(
  611. name: "GRPCSampleData",
  612. dependencies: includeNIOSSL ? [.nioSSL] : [],
  613. exclude: [
  614. "bundle.p12",
  615. ],
  616. swiftSettings: [.swiftLanguageMode(.v5)]
  617. )
  618. }
  619. static var echoModel: Target {
  620. .target(
  621. name: "EchoModel",
  622. dependencies: [
  623. .grpc,
  624. .nio,
  625. .protobuf,
  626. ],
  627. path: "Examples/v1/Echo/Model",
  628. swiftSettings: [.swiftLanguageMode(.v5)]
  629. )
  630. }
  631. static var echoImplementation: Target {
  632. .target(
  633. name: "EchoImplementation",
  634. dependencies: [
  635. .echoModel,
  636. .grpc,
  637. .nioCore,
  638. .nioHTTP2,
  639. .protobuf,
  640. ],
  641. path: "Examples/v1/Echo/Implementation",
  642. swiftSettings: [.swiftLanguageMode(.v5)]
  643. )
  644. }
  645. static var echo: Target {
  646. .executableTarget(
  647. name: "Echo",
  648. dependencies: [
  649. .grpc,
  650. .echoModel,
  651. .echoImplementation,
  652. .grpcSampleData,
  653. .nioCore,
  654. .nioPosix,
  655. .logging,
  656. .argumentParser,
  657. ].appending(
  658. .nioSSL, if: includeNIOSSL
  659. ),
  660. path: "Examples/v1/Echo/Runtime",
  661. swiftSettings: [.swiftLanguageMode(.v5)]
  662. )
  663. }
  664. static var echo_v2: Target {
  665. .executableTarget(
  666. name: "echo-v2",
  667. dependencies: [
  668. .grpcCore,
  669. .grpcProtobuf,
  670. .grpcHTTP2Core,
  671. .grpcHTTP2TransportNIOPosix,
  672. .argumentParser,
  673. ].appending(
  674. .nioSSL, if: includeNIOSSL
  675. ),
  676. path: "Examples/v2/echo",
  677. swiftSettings: [
  678. .swiftLanguageMode(.v6),
  679. .enableUpcomingFeature("ExistentialAny")
  680. ]
  681. )
  682. }
  683. static var helloWorldModel: Target {
  684. .target(
  685. name: "HelloWorldModel",
  686. dependencies: [
  687. .grpc,
  688. .nio,
  689. .protobuf,
  690. ],
  691. path: "Examples/v1/HelloWorld/Model",
  692. swiftSettings: [.swiftLanguageMode(.v5)]
  693. )
  694. }
  695. static var helloWorldClient: Target {
  696. .executableTarget(
  697. name: "HelloWorldClient",
  698. dependencies: [
  699. .grpc,
  700. .helloWorldModel,
  701. .nioCore,
  702. .nioPosix,
  703. .argumentParser,
  704. ],
  705. path: "Examples/v1/HelloWorld/Client",
  706. swiftSettings: [.swiftLanguageMode(.v5)]
  707. )
  708. }
  709. static var helloWorldServer: Target {
  710. .executableTarget(
  711. name: "HelloWorldServer",
  712. dependencies: [
  713. .grpc,
  714. .helloWorldModel,
  715. .nioCore,
  716. .nioPosix,
  717. .argumentParser,
  718. ],
  719. path: "Examples/v1/HelloWorld/Server",
  720. swiftSettings: [.swiftLanguageMode(.v5)]
  721. )
  722. }
  723. static var helloWorld_v2: Target {
  724. .executableTarget(
  725. name: "hello-world",
  726. dependencies: [
  727. .grpcProtobuf,
  728. .grpcHTTP2Transport,
  729. .argumentParser,
  730. ],
  731. path: "Examples/v2/hello-world",
  732. exclude: [
  733. "HelloWorld.proto"
  734. ],
  735. swiftSettings: [
  736. .swiftLanguageMode(.v6),
  737. .enableUpcomingFeature("ExistentialAny")
  738. ]
  739. )
  740. }
  741. static var routeGuideModel: Target {
  742. .target(
  743. name: "RouteGuideModel",
  744. dependencies: [
  745. .grpc,
  746. .nio,
  747. .protobuf,
  748. ],
  749. path: "Examples/v1/RouteGuide/Model",
  750. swiftSettings: [.swiftLanguageMode(.v5)]
  751. )
  752. }
  753. static var routeGuideClient: Target {
  754. .executableTarget(
  755. name: "RouteGuideClient",
  756. dependencies: [
  757. .grpc,
  758. .routeGuideModel,
  759. .nioCore,
  760. .nioPosix,
  761. .argumentParser,
  762. ],
  763. path: "Examples/v1/RouteGuide/Client",
  764. swiftSettings: [.swiftLanguageMode(.v5)]
  765. )
  766. }
  767. static var routeGuideServer: Target {
  768. .executableTarget(
  769. name: "RouteGuideServer",
  770. dependencies: [
  771. .grpc,
  772. .routeGuideModel,
  773. .nioCore,
  774. .nioConcurrencyHelpers,
  775. .nioPosix,
  776. .argumentParser,
  777. ],
  778. path: "Examples/v1/RouteGuide/Server",
  779. swiftSettings: [.swiftLanguageMode(.v5)]
  780. )
  781. }
  782. static var routeGuide_v2: Target {
  783. .executableTarget(
  784. name: "route-guide",
  785. dependencies: [
  786. .grpcProtobuf,
  787. .grpcHTTP2Transport,
  788. .argumentParser,
  789. ],
  790. path: "Examples/v2/route-guide",
  791. resources: [
  792. .copy("route_guide_db.json")
  793. ],
  794. swiftSettings: [
  795. .swiftLanguageMode(.v6),
  796. .enableUpcomingFeature("ExistentialAny")
  797. ]
  798. )
  799. }
  800. static var packetCapture: Target {
  801. .executableTarget(
  802. name: "PacketCapture",
  803. dependencies: [
  804. .grpc,
  805. .echoModel,
  806. .nioCore,
  807. .nioPosix,
  808. .nioExtras,
  809. .argumentParser,
  810. ],
  811. path: "Examples/v1/PacketCapture",
  812. exclude: [
  813. "README.md",
  814. ],
  815. swiftSettings: [.swiftLanguageMode(.v5)]
  816. )
  817. }
  818. static var reflectionService: Target {
  819. .target(
  820. name: "GRPCReflectionService",
  821. dependencies: [
  822. .grpc,
  823. .nio,
  824. .protobuf,
  825. ],
  826. path: "Sources/GRPCReflectionService",
  827. swiftSettings: [.swiftLanguageMode(.v5)]
  828. )
  829. }
  830. static var reflectionServer: Target {
  831. .executableTarget(
  832. name: "ReflectionServer",
  833. dependencies: [
  834. .grpc,
  835. .reflectionService,
  836. .helloWorldModel,
  837. .nioCore,
  838. .nioPosix,
  839. .argumentParser,
  840. .echoModel,
  841. .echoImplementation
  842. ],
  843. path: "Examples/v1/ReflectionService",
  844. resources: [
  845. .copy("Generated")
  846. ],
  847. swiftSettings: [.swiftLanguageMode(.v5)]
  848. )
  849. }
  850. static var grpcCodeGen: Target {
  851. .target(
  852. name: "GRPCCodeGen",
  853. path: "Sources/GRPCCodeGen",
  854. swiftSettings: [
  855. .swiftLanguageMode(.v6),
  856. .enableUpcomingFeature("ExistentialAny"),
  857. .enableUpcomingFeature("InternalImportsByDefault")
  858. ]
  859. )
  860. }
  861. static var grpcProtobuf: Target {
  862. .target(
  863. name: "GRPCProtobuf",
  864. dependencies: [
  865. .grpcCore,
  866. .protobuf,
  867. ],
  868. path: "Sources/GRPCProtobuf",
  869. swiftSettings: [
  870. .swiftLanguageMode(.v6),
  871. .enableUpcomingFeature("ExistentialAny"),
  872. .enableUpcomingFeature("InternalImportsByDefault")
  873. ]
  874. )
  875. }
  876. static var grpcProtobufCodeGen: Target {
  877. .target(
  878. name: "GRPCProtobufCodeGen",
  879. dependencies: [
  880. .protobuf,
  881. .protobufPluginLibrary,
  882. .grpcCodeGen
  883. ],
  884. path: "Sources/GRPCProtobufCodeGen",
  885. swiftSettings: [
  886. .swiftLanguageMode(.v6),
  887. .enableUpcomingFeature("ExistentialAny"),
  888. .enableUpcomingFeature("InternalImportsByDefault")
  889. ]
  890. )
  891. }
  892. static var grpcHealth: Target {
  893. .target(
  894. name: "GRPCHealth",
  895. dependencies: [
  896. .grpcCore,
  897. .grpcProtobuf
  898. ],
  899. path: "Sources/Services/Health",
  900. swiftSettings: [
  901. .swiftLanguageMode(.v6),
  902. .enableUpcomingFeature("ExistentialAny"),
  903. .enableUpcomingFeature("InternalImportsByDefault")
  904. ]
  905. )
  906. }
  907. }
  908. // MARK: - Products
  909. extension Product {
  910. static var grpc: Product {
  911. .library(
  912. name: grpcProductName,
  913. targets: [grpcTargetName]
  914. )
  915. }
  916. static var _grpcCore: Product {
  917. .library(
  918. name: "_GRPCCore",
  919. targets: ["GRPCCore"]
  920. )
  921. }
  922. static var _grpcProtobuf: Product {
  923. .library(
  924. name: "_GRPCProtobuf",
  925. targets: ["GRPCProtobuf"]
  926. )
  927. }
  928. static var _grpcInProcessTransport: Product {
  929. .library(
  930. name: "_GRPCInProcessTransport",
  931. targets: ["GRPCInProcessTransport"]
  932. )
  933. }
  934. static var _grpcHTTP2Transport: Product {
  935. .library(
  936. name: "_GRPCHTTP2Transport",
  937. targets: ["GRPCHTTP2Transport"]
  938. )
  939. }
  940. static var cgrpcZlib: Product {
  941. .library(
  942. name: cgrpcZlibProductName,
  943. targets: [cgrpcZlibTargetName]
  944. )
  945. }
  946. static var grpcReflectionService: Product {
  947. .library(
  948. name: "GRPCReflectionService",
  949. targets: ["GRPCReflectionService"]
  950. )
  951. }
  952. static var protocGenGRPCSwift: Product {
  953. .executable(
  954. name: "protoc-gen-grpc-swift",
  955. targets: ["protoc-gen-grpc-swift"]
  956. )
  957. }
  958. static var grpcSwiftPlugin: Product {
  959. .plugin(
  960. name: "GRPCSwiftPlugin",
  961. targets: ["GRPCSwiftPlugin"]
  962. )
  963. }
  964. }
  965. // MARK: - Package
  966. let package = Package(
  967. name: grpcPackageName,
  968. products: [
  969. // v1
  970. .grpc,
  971. .cgrpcZlib,
  972. .grpcReflectionService,
  973. .protocGenGRPCSwift,
  974. .grpcSwiftPlugin,
  975. // v2
  976. ._grpcCore,
  977. ._grpcProtobuf,
  978. ._grpcHTTP2Transport,
  979. ._grpcInProcessTransport,
  980. ],
  981. dependencies: packageDependencies,
  982. targets: [
  983. // Products
  984. .grpc,
  985. .cgrpcZlib,
  986. .protocGenGRPCSwift,
  987. .grpcSwiftPlugin,
  988. .reflectionService,
  989. // Tests etc.
  990. .grpcTests,
  991. .interopTestModels,
  992. .interopTestImplementation,
  993. .interopTests,
  994. .backoffInteropTest,
  995. .perfTests,
  996. .grpcSampleData,
  997. // Examples
  998. .echoModel,
  999. .echoImplementation,
  1000. .echo,
  1001. .helloWorldModel,
  1002. .helloWorldClient,
  1003. .helloWorldServer,
  1004. .routeGuideModel,
  1005. .routeGuideClient,
  1006. .routeGuideServer,
  1007. .packetCapture,
  1008. .reflectionServer,
  1009. // v2
  1010. .grpcCore,
  1011. .grpcCodeGen,
  1012. // v2 transports
  1013. .grpcInProcessTransport,
  1014. .grpcHTTP2Core,
  1015. .grpcHTTP2TransportNIOPosix,
  1016. .grpcHTTP2TransportNIOTransportServices,
  1017. .grpcHTTP2Transport,
  1018. // v2 Protobuf support
  1019. .grpcProtobuf,
  1020. .grpcProtobufCodeGen,
  1021. // v2 add-ons
  1022. .grpcInterceptors,
  1023. .grpcHealth,
  1024. // v2 integration testing
  1025. .interoperabilityTestImplementation,
  1026. .interoperabilityTestsExecutable,
  1027. .performanceWorker,
  1028. // v2 unit tests
  1029. .grpcCoreTests,
  1030. .grpcInProcessTransportTests,
  1031. .grpcCodeGenTests,
  1032. .grpcInterceptorsTests,
  1033. .grpcHTTP2CoreTests,
  1034. .grpcHTTP2TransportTests,
  1035. .grpcHealthTests,
  1036. .grpcProtobufTests,
  1037. .grpcProtobufCodeGenTests,
  1038. .inProcessInteroperabilityTests,
  1039. // v2 examples
  1040. .echo_v2,
  1041. .helloWorld_v2,
  1042. .routeGuide_v2,
  1043. ]
  1044. )
  1045. extension Array {
  1046. func appending(_ element: Element, if condition: Bool) -> [Element] {
  1047. if condition {
  1048. return self + [element]
  1049. } else {
  1050. return self
  1051. }
  1052. }
  1053. }