Package@swift-6.swift 26 KB

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