Package.swift 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // swift-tools-version:5.5
  2. import PackageDescription
  3. var sources = [
  4. "src/llama.cpp",
  5. "src/llama-vocab.cpp",
  6. "src/llama-grammar.cpp",
  7. "src/llama-sampling.cpp",
  8. "src/unicode.cpp",
  9. "src/unicode-data.cpp",
  10. "ggml/src/ggml.c",
  11. "ggml/src/ggml-cpu.c",
  12. "ggml/src/ggml-alloc.c",
  13. "ggml/src/ggml-backend.cpp",
  14. "ggml/src/ggml-quants.c",
  15. "ggml/src/ggml-aarch64.c",
  16. ]
  17. var resources: [Resource] = []
  18. var linkerSettings: [LinkerSetting] = []
  19. var cSettings: [CSetting] = [
  20. .unsafeFlags(["-Wno-shorten-64-to-32", "-O3", "-DNDEBUG"]),
  21. .unsafeFlags(["-fno-objc-arc"]),
  22. // NOTE: NEW_LAPACK will required iOS version 16.4+
  23. // We should consider add this in the future when we drop support for iOS 14
  24. // (ref: ref: https://developer.apple.com/documentation/accelerate/1513264-cblas_sgemm?language=objc)
  25. // .define("ACCELERATE_NEW_LAPACK"),
  26. // .define("ACCELERATE_LAPACK_ILP64")
  27. ]
  28. #if canImport(Darwin)
  29. sources.append("ggml/src/ggml-metal.m")
  30. resources.append(.process("ggml/src/ggml-metal.metal"))
  31. linkerSettings.append(.linkedFramework("Accelerate"))
  32. cSettings.append(
  33. contentsOf: [
  34. .define("GGML_USE_ACCELERATE"),
  35. .define("GGML_USE_METAL")
  36. ]
  37. )
  38. #endif
  39. #if os(Linux)
  40. cSettings.append(.define("_GNU_SOURCE"))
  41. #endif
  42. let package = Package(
  43. name: "llama",
  44. platforms: [
  45. .macOS(.v12),
  46. .iOS(.v14),
  47. .watchOS(.v4),
  48. .tvOS(.v14)
  49. ],
  50. products: [
  51. .library(name: "llama", targets: ["llama"]),
  52. ],
  53. targets: [
  54. .target(
  55. name: "llama",
  56. path: ".",
  57. exclude: [
  58. "build",
  59. "cmake",
  60. "examples",
  61. "scripts",
  62. "models",
  63. "tests",
  64. "CMakeLists.txt",
  65. "Makefile",
  66. "ggml/src/ggml-metal-embed.metal"
  67. ],
  68. sources: sources,
  69. resources: resources,
  70. publicHeadersPath: "spm-headers",
  71. cSettings: cSettings,
  72. linkerSettings: linkerSettings
  73. )
  74. ],
  75. cxxLanguageStandard: .cxx11
  76. )