// swift-tools-version:4.0 import PackageDescription import Foundation // This is a stop gap hack so we can edit benchmarks in Xcode. let singleSourceLibraries: [String] = { let f = FileManager.`default` let dirURL = URL(fileURLWithPath: "single-source").absoluteURL let fileURLs = try! f.contentsOfDirectory(at: dirURL, includingPropertiesForKeys: nil) return fileURLs.flatMap { (path: URL) -> String? in let c = path.lastPathComponent.split(separator: ".") // Too many components. Must be a gyb file. if c.count > 2 { return nil } if c[1] != "swift" { return nil } // We do not support this test. if c[0] == "ObjectiveCNoBridgingStubs" { return nil } assert(c[0] != "PrimsSplit") return String(c[0]) } }() let multiSourceLibraries: [String] = { let f = FileManager.`default` let dirURL = URL(fileURLWithPath: "multi-source").absoluteURL let fileURLs = try! f.contentsOfDirectory(at: dirURL, includingPropertiesForKeys: nil) return fileURLs.map { (path: URL) -> String in return path.lastPathComponent } }() let p = Package( name: "swiftbench", products: [ .library(name: "TestsUtils", type: .static, targets: ["TestsUtils"]), .library(name: "DriverUtils", type: .static, targets: ["DriverUtils"]), .library(name: "ObjectiveCTests", type: .static, targets: ["ObjectiveCTests"]), .executable(name: "SwiftBench", targets: ["SwiftBench"]), .library(name: "PrimsSplit", type: .static, targets: ["PrimsSplit"]) ] + singleSourceLibraries.map { .library(name: $0, type: .static, targets: [$0]) } + multiSourceLibraries.map { .library(name: $0, type: .static, targets: [$0]) }, targets: [ .target(name: "TestsUtils", path: "utils", sources: ["TestsUtils.swift"]), .target(name: "DriverUtils", dependencies: [.target(name: "TestsUtils")], path: "utils", sources: ["DriverUtils.swift", "ArgParse.swift"]), .target(name: "SwiftBench", dependencies: [ .target(name: "TestsUtils"), .target(name: "ObjectiveCTests"), .target(name: "DriverUtils"), ] + singleSourceLibraries.map { .target(name: $0) } + multiSourceLibraries.map { .target(name: $0) }, path: "utils", sources: ["main.swift"]), .target(name: "ObjectiveCTests", path: "utils/ObjectiveCTests", publicHeadersPath: "."), ] + singleSourceLibraries.map { x in return .target(name: x, dependencies: [ .target(name: "TestsUtils"), .target(name: "ObjectiveCTests"), ], path: "single-source", sources: ["\(x).swift"]) } + multiSourceLibraries.map { x in return .target(name: x, dependencies: [ .target(name: "TestsUtils") ], path: "multi-source/\(x)") }, swiftLanguageVersions: [4] )