mirror of
https://github.com/mii443/AzooKeyKanaKanjiConverter.git
synced 2025-08-22 15:05:26 +00:00
223 lines
7.5 KiB
Swift
223 lines
7.5 KiB
Swift
// swift-tools-version: 5.9
|
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
|
|
|
import PackageDescription
|
|
import Foundation
|
|
|
|
var swiftSettings: [SwiftSetting] = [
|
|
.enableUpcomingFeature("BareSlashRegexLiterals"),
|
|
.enableUpcomingFeature("ConciseMagicFile"),
|
|
.enableUpcomingFeature("ExistentialAny"),
|
|
.enableUpcomingFeature("ForwardTrailingClosures"),
|
|
.enableUpcomingFeature("ImplicitOpenExistentials"),
|
|
.enableUpcomingFeature("StrictConcurrency"),
|
|
.enableUpcomingFeature("DisableOutwardActorInference"),
|
|
.enableUpcomingFeature("ImportObjcForwardDeclarations"),
|
|
]
|
|
|
|
var dependencies: [Package.Dependency] = [
|
|
// Dependencies declare other packages that this package depends on.
|
|
// .package(url: /* package url */, from: "1.0.0"),
|
|
.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0"),
|
|
.package(url: "https://github.com/apple/swift-collections", from: "1.0.0"),
|
|
.package(url: "https://github.com/apple/swift-argument-parser", .upToNextMajor(from: "1.0.0")),
|
|
.package(url: "https://github.com/ensan-hcl/swift-tokenizers", branch: "feat/minimum")
|
|
]
|
|
|
|
var efficientNGramDependencies: [Target.Dependency] = [.product(name: "Transformers", package: "swift-tokenizers")]
|
|
#if (!os(Linux) || !canImport(Android)) && !os(Windows)
|
|
// Android環境・Windows環境ではSwiftyMarisaが利用できないため、除外する。
|
|
// したがって、EfficientNGramの動作はサポートしない。
|
|
if let envValue = ProcessInfo.processInfo.environment["LLAMA_MOCK"], envValue == "1" {
|
|
// LLAMA_MOCK=1の場合もサポートしない
|
|
} else {
|
|
dependencies.append(.package(url: "https://github.com/ensan-hcl/SwiftyMarisa", branch: "6e145aef5583aac96dd7ff8f9fbb9944d893128e"))
|
|
efficientNGramDependencies.append("SwiftyMarisa")
|
|
swiftSettings.append(.interoperabilityMode(.Cxx))
|
|
}
|
|
#endif
|
|
|
|
|
|
var targets: [Target] = [
|
|
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
|
// Targets can depend on other targets in this package, and on products in packages this package depends on.
|
|
.target(
|
|
name: "SwiftUtils",
|
|
dependencies: [
|
|
.product(name: "Algorithms", package: "swift-algorithms")
|
|
],
|
|
resources: [],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.target(
|
|
name: "EfficientNGram",
|
|
dependencies: efficientNGramDependencies,
|
|
resources: [.copy("tokenizer")],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.target(
|
|
name: "KanaKanjiConverterModuleWithDefaultDictionary",
|
|
dependencies: [
|
|
"KanaKanjiConverterModule"
|
|
],
|
|
exclude: [
|
|
"azooKey_dictionary_storage/README.md",
|
|
"azooKey_dictionary_storage/LICENSE",
|
|
"azooKey_emoji_dictionary_storage/data",
|
|
"azooKey_emoji_dictionary_storage/scripts",
|
|
"azooKey_emoji_dictionary_storage/requirements.txt",
|
|
"azooKey_emoji_dictionary_storage/README.md",
|
|
],
|
|
resources: [
|
|
.copy("azooKey_dictionary_storage/Dictionary"),
|
|
.copy("azooKey_emoji_dictionary_storage/EmojiDictionary"),
|
|
],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.executableTarget(
|
|
name: "CliTool",
|
|
dependencies: [
|
|
"KanaKanjiConverterModuleWithDefaultDictionary",
|
|
.product(name: "ArgumentParser", package: "swift-argument-parser"),
|
|
],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.testTarget(
|
|
name: "SwiftUtilsTests",
|
|
dependencies: ["SwiftUtils"],
|
|
resources: [],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.testTarget(
|
|
name: "EfficientNGramTests",
|
|
dependencies: ["EfficientNGram"],
|
|
resources: [],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.testTarget(
|
|
name: "KanaKanjiConverterModuleTests",
|
|
dependencies: ["KanaKanjiConverterModule"],
|
|
resources: [
|
|
.copy("DictionaryMock")
|
|
],
|
|
swiftSettings: swiftSettings
|
|
),
|
|
.testTarget(
|
|
name: "KanaKanjiConverterModuleWithDefaultDictionaryTests",
|
|
dependencies: [
|
|
"KanaKanjiConverterModuleWithDefaultDictionary",
|
|
.product(name: "Collections", package: "swift-collections")
|
|
],
|
|
swiftSettings: swiftSettings
|
|
)
|
|
]
|
|
|
|
#if os(Linux) && !canImport(Android)
|
|
func checkObjcAvailability() -> Bool {
|
|
do {
|
|
let linkCheck = Process()
|
|
linkCheck.executableURL = URL(fileURLWithPath: "/bin/sh")
|
|
linkCheck.arguments = ["-c", "echo 'int main() { return 0; }' | clang -x c - -lobjc -o /dev/null"]
|
|
|
|
try linkCheck.run()
|
|
linkCheck.waitUntilExit()
|
|
|
|
if linkCheck.terminationStatus != 0 {
|
|
print("Cannot link with -lobjc")
|
|
return false
|
|
}
|
|
return true
|
|
} catch {
|
|
print("Error checking Objective-C availability: \(error)")
|
|
return false
|
|
}
|
|
}
|
|
|
|
if checkObjcAvailability() {
|
|
print("Objective-C runtime is available")
|
|
targets = targets.map { target in
|
|
if target.name == "CliTool" || target.name == "KanaKanjiConverterModuleWithDefaultDictionaryTests" {
|
|
let modifiedTarget = target
|
|
modifiedTarget.linkerSettings = [.linkedLibrary("objc")]
|
|
return modifiedTarget
|
|
}
|
|
return target
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if os(Windows)
|
|
targets.append(contentsOf: [
|
|
.systemLibrary(
|
|
name: "llama.cpp"
|
|
),
|
|
.target(
|
|
name: "KanaKanjiConverterModule",
|
|
dependencies: [
|
|
"SwiftUtils",
|
|
"llama.cpp",
|
|
"EfficientNGram",
|
|
.product(name: "Collections", package: "swift-collections"),
|
|
],
|
|
swiftSettings: swiftSettings
|
|
)
|
|
])
|
|
#else
|
|
if let envValue = ProcessInfo.processInfo.environment["LLAMA_MOCK"], envValue == "1" {
|
|
targets.append(contentsOf: [
|
|
.target(name: "llama-mock"),
|
|
.target(
|
|
name: "KanaKanjiConverterModule",
|
|
dependencies: [
|
|
"SwiftUtils",
|
|
"llama-mock",
|
|
"EfficientNGram",
|
|
.product(name: "Collections", package: "swift-collections"),
|
|
],
|
|
swiftSettings: swiftSettings
|
|
)
|
|
])
|
|
} else {
|
|
dependencies.append(
|
|
.package(url: "https://github.com/ensan-hcl/llama.cpp", branch: "6b862f4")
|
|
)
|
|
|
|
targets.append(contentsOf: [
|
|
.target(
|
|
name: "KanaKanjiConverterModule",
|
|
dependencies: [
|
|
"SwiftUtils",
|
|
"EfficientNGram",
|
|
.product(name: "llama", package: "llama.cpp"),
|
|
.product(name: "Collections", package: "swift-collections"),
|
|
],
|
|
swiftSettings: swiftSettings
|
|
)
|
|
])
|
|
}
|
|
#endif
|
|
|
|
let package = Package(
|
|
name: "AzooKeyKanakanjiConverter",
|
|
platforms: [.iOS(.v15), .macOS(.v13)],
|
|
products: [
|
|
// Products define the executables and libraries a package produces, and make them visible to other packages.
|
|
.library(
|
|
name: "SwiftUtils",
|
|
targets: ["SwiftUtils"]
|
|
),
|
|
/// デフォルト辞書データを含むバージョンの辞書モジュール
|
|
.library(
|
|
name: "KanaKanjiConverterModuleWithDefaultDictionary",
|
|
targets: ["KanaKanjiConverterModuleWithDefaultDictionary"]
|
|
),
|
|
/// 辞書データを含まないバージョンの辞書モジュール
|
|
.library(
|
|
name: "KanaKanjiConverterModule",
|
|
targets: ["KanaKanjiConverterModule"]
|
|
),
|
|
],
|
|
dependencies: dependencies,
|
|
targets: targets
|
|
)
|