// swift-tools-version: 6.2 //===----------------------------------------------------------------------===// // Copyright © 2025 Apple Inc. and the Containerization project authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //===----------------------------------------------------------------------===// // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport import Foundation import PackageDescription let settings: [SwiftSetting] if ProcessInfo.processInfo.environment["CURRENT_SDK"] != nil { // TODO: Remove this compile condition when the updated macOS SDK is available publicly settings = [.define("CURRENT_SDK")] } else { settings = [] } let package = Package( name: "containerization", platforms: [.macOS("15")], products: [ .library(name: "Containerization", targets: ["Containerization", "ContainerizationError"]), .library(name: "ContainerizationEXT4", targets: ["ContainerizationEXT4"]), .library(name: "ContainerizationOCI", targets: ["ContainerizationOCI"]), .library(name: "ContainerizationNetlink", targets: ["ContainerizationNetlink"]), .library(name: "ContainerizationIO", targets: ["ContainerizationIO"]), .library(name: "ContainerizationOS", targets: ["ContainerizationOS"]), .library(name: "ContainerizationExtras", targets: ["ContainerizationExtras"]), .library(name: "ContainerizationArchive", targets: ["ContainerizationArchive"]), .library(name: "SendableProperty", targets: ["SendableProperty"]), .executable(name: "cctl", targets: ["cctl"]), ], dependencies: [ .package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"), .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.3.0"), .package(url: "https://github.com/apple/swift-collections.git", from: "1.1.4"), .package(url: "https://github.com/apple/swift-crypto.git", from: "3.0.0"), .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.26.0"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.29.0"), .package(url: "https://github.com/apple/swift-nio.git", from: "2.80.0"), .package(url: "https://github.com/swift-server/async-http-client.git", from: "1.20.1"), .package(url: "https://github.com/apple/swift-system.git", from: "1.4.0"), .package(url: "https://github.com/swiftlang/swift-syntax.git", "602.0.0-latest"..<"603.0.0"), .package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0"), ], targets: [ .target( name: "ContainerizationError" ), .target( name: "Containerization", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "GRPC", package: "grpc-swift"), .product(name: "SystemPackage", package: "swift-system"), .product(name: "_NIOFileSystem", package: "swift-nio"), "ContainerizationOCI", "ContainerizationOS", "ContainerizationIO", "ContainerizationExtras", "SendableProperty", .target(name: "ContainerizationEXT4", condition: .when(platforms: [.macOS])), ], exclude: [ "../Containerization/SandboxContext/SandboxContext.proto" ], swiftSettings: settings ), .executableTarget( name: "cctl", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "ArgumentParser", package: "swift-argument-parser"), "Containerization", "ContainerizationOS", ] ), .executableTarget( name: "containerization-integration", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "ArgumentParser", package: "swift-argument-parser"), "Containerization", ], path: "Sources/Integration" ), .testTarget( name: "ContainerizationUnitTests", dependencies: ["Containerization"], path: "Tests/ContainerizationTests", resources: [.copy("ImageTests/Resources/scratch.tar")] ), .target( name: "ContainerizationEXT4", dependencies: [ .target(name: "ContainerizationArchive", condition: .when(platforms: [.macOS])), .product(name: "SystemPackage", package: "swift-system"), "ContainerizationOS", ], path: "Sources/ContainerizationEXT4", exclude: [ "README.md" ] ), .testTarget( name: "ContainerizationEXT4Tests", dependencies: [ "ContainerizationEXT4", "ContainerizationArchive", ], resources: [ .copy( "Resources/content/blobs/sha256/ad59e9f71edceca7b1ac7c642410858489b743c97233b0a26a5e2098b1443762"), // index .copy( "Resources/content/blobs/sha256/48a06049d3738991b011ca8b12473d712b7c40666a1462118dae3c403676afc2"), // manifest .copy( "Resources/content/blobs/sha256/8e2eb240a6cd7be1a0d308125afe0060b020e89275ced2e729eda7d4eeff62a2"), // config .copy( "Resources/content/blobs/sha256/c6b39de5b33961661dc939b997cc1d30cda01e38005a6c6625fd9c7e748bab44"), // layer 1 .copy( "Resources/content/blobs/sha256/4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1"), // layer 2 ] ), .target( name: "ContainerizationArchive", dependencies: [ "CArchive", .product(name: "SystemPackage", package: "swift-system"), "ContainerizationExtras", ], exclude: [ "CArchive" ] ), .testTarget( name: "ContainerizationArchiveTests", dependencies: [ "ContainerizationArchive" ] ), .target( name: "CArchive", dependencies: [], path: "Sources/ContainerizationArchive/CArchive", cSettings: [ .define( "PLATFORM_CONFIG_H", to: "\"config_darwin.h\"", .when(platforms: [.iOS, .macOS, .macCatalyst, .watchOS, .driverKit, .tvOS])), .define("PLATFORM_CONFIG_H", to: "\"config_linux.h\"", .when(platforms: [.linux])), ], linkerSettings: [ .linkedLibrary("z"), .linkedLibrary("bz2"), .linkedLibrary("lzma"), .linkedLibrary("archive"), .linkedLibrary("iconv", .when(platforms: [.macOS])), .linkedLibrary("crypto", .when(platforms: [.linux])), ] ), .target( name: "ContainerizationOCI", dependencies: [ .product(name: "AsyncHTTPClient", package: "async-http-client"), .product(name: "Crypto", package: "swift-crypto"), .product(name: "Logging", package: "swift-log"), .product(name: "_NIOFileSystem", package: "swift-nio"), "ContainerizationError", "ContainerizationOS", "ContainerizationExtras", ] ), .testTarget( name: "ContainerizationOCITests", dependencies: [ "ContainerizationOCI", "Containerization", "ContainerizationIO", .product(name: "NIO", package: "swift-nio"), .product(name: "Crypto", package: "swift-crypto"), ] ), .target( name: "ContainerizationNetlink", dependencies: [ .product(name: "Logging", package: "swift-log"), "ContainerizationOS", "ContainerizationExtras", ] ), .testTarget( name: "ContainerizationNetlinkTests", dependencies: [ "ContainerizationNetlink" ] ), .target( name: "ContainerizationOS", dependencies: [ .product(name: "Logging", package: "swift-log"), "CShim", "ContainerizationError", "SendableProperty", ], exclude: [ "../ContainerizationOS/README.md" ] ), .testTarget( name: "ContainerizationOSTests", dependencies: [ "ContainerizationOS", "ContainerizationExtras", ] ), .target( name: "ContainerizationIO", dependencies: [ "ContainerizationOS", .product(name: "NIO", package: "swift-nio"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), ] ), .target( name: "ContainerizationExtras", dependencies: [ "ContainerizationError", .product(name: "Collections", package: "swift-collections"), .product(name: "Logging", package: "swift-log"), ] ), .testTarget( name: "ContainerizationExtrasTests", dependencies: [ "ContainerizationExtras", "CShim", ] ), .target( name: "CShim" ), // Library that exposes a macro as part of its API, which is used in client programs. .target(name: "SendableProperty", dependencies: ["SendablePropertyMacros"]), // Macro implementation that performs the source transformation of a macro. .macro( name: "SendablePropertyMacros", dependencies: [ .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), .product(name: "SwiftCompilerPlugin", package: "swift-syntax"), ] ), // A test target used to develop the macro implementation. .testTarget( name: "SendablePropertyMacrosTests", dependencies: [ "SendablePropertyMacros", .product(name: "SwiftSyntaxMacrosTestSupport", package: "swift-syntax"), ] ), // A test target for the macro implementation. .testTarget(name: "SendablePropertyTests", dependencies: ["SendableProperty"]), ] )