// swift-tools-version: 6.2 //===----------------------------------------------------------------------===// // Copyright © 2025-2026 Apple Inc. and the Containerization project authors. // // 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 package = Package( name: "containerization", platforms: [.macOS("15.0")], 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: "VminitdCore", targets: ["VminitdCore", "Cgroup", "LCShim"]), .executable(name: "cctl", targets: ["cctl"]), ], dependencies: [ .package(url: "https://github.com/apple/swift-log.git", from: "1.10.1"), .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.7.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-2.git", from: "2.3.0"), .package(url: "https://github.com/grpc/grpc-swift-nio-transport.git", from: "2.4.4"), .package(url: "https://github.com/grpc/grpc-swift-protobuf.git", from: "2.2.0"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.36.0"), .package(url: "https://github.com/apple/swift-nio.git", from: "2.80.0"), .package(url: "https://github.com/apple/swift-nio-ssl.git", from: "2.36.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.6.4"), .package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0"), .package(url: "https://github.com/facebook/zstd.git", exact: "1.5.7"), ], targets: [ .target( name: "ContainerizationError" ), .target( name: "Containerization", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "SystemPackage", package: "swift-system"), .product(name: "GRPCCore", package: "grpc-swift-2"), .product(name: "GRPCNIOTransportHTTP2", package: "grpc-swift-nio-transport"), .product(name: "GRPCProtobuf", package: "grpc-swift-protobuf"), .product(name: "_NIOFileSystem", package: "swift-nio"), "ContainerizationArchive", "ContainerizationOCI", "ContainerizationOS", "ContainerizationIO", "ContainerizationExtras", "ContainerizationEXT4", ], exclude: [ "../Containerization/SandboxContext/SandboxContext.proto" ] ), .executableTarget( name: "cctl", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "ArgumentParser", package: "swift-argument-parser"), "Containerization", "ContainerizationArchive", "ContainerizationEXT4", "ContainerizationExtras", "ContainerizationOCI", "ContainerizationOS", ] ), .target( name: "ContainerizationEXT4", dependencies: [ "ContainerizationArchive", .product(name: "SystemPackage", package: "swift-system"), "ContainerizationOS", ], path: "Sources/ContainerizationEXT4", exclude: [ "README.md" ] ), .target( name: "ContainerizationArchive", dependencies: [ .product(name: "SystemPackage", package: "swift-system"), "CArchive", "ContainerizationExtras", "ContainerizationOS", ], exclude: [ "CArchive" ] ), .target( name: "CArchive", dependencies: [ .product(name: "libzstd", package: "zstd") ], path: "Sources/ContainerizationArchive/CArchive", sources: [ "archive_swift_bridge.c" ], 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])), .unsafeFlags(["-fno-modules"]), ], 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", ] ), .target( name: "ContainerizationNetlink", dependencies: [ .product(name: "Logging", package: "swift-log"), "ContainerizationOS", "ContainerizationExtras", ] ), .target( name: "ContainerizationOS", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "SystemPackage", package: "swift-system"), "CShim", "ContainerizationError", ], exclude: [ "../ContainerizationOS/README.md" ] ), .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"), .product(name: "NIOSSL", package: "swift-nio-ssl"), ] ), .target( name: "CShim" ), .target( name: "LCShim", path: "vminitd/Sources/LCShim" ), .target( name: "Cgroup", dependencies: [ .product(name: "Logging", package: "swift-log"), "ContainerizationOCI", "ContainerizationOS", .product(name: "SystemPackage", package: "swift-system"), "LCShim", ], path: "vminitd/Sources/Cgroup" ), .target( name: "VminitdCore", dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "Logging", package: "swift-log"), "Containerization", "ContainerizationArchive", "ContainerizationNetlink", "ContainerizationIO", "ContainerizationOS", .product(name: "SystemPackage", package: "swift-system"), .product(name: "GRPCCore", package: "grpc-swift-2"), .product(name: "GRPCNIOTransportHTTP2", package: "grpc-swift-nio-transport"), .product(name: "GRPCProtobuf", package: "grpc-swift-protobuf"), "LCShim", "Cgroup", ], path: "vminitd/Sources/VminitdCore" ), ] ) #if os(macOS) package.targets.append( .executableTarget( name: "containerization-integration", dependencies: [ .product(name: "Logging", package: "swift-log"), .product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOPosix", package: "swift-nio"), "Containerization", ], path: "Sources/Integration" ) ) #endif