Package.swift 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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-alloc.c",
  12. "ggml/src/ggml-backend.cpp",
  13. "ggml/src/ggml-backend-reg.cpp",
  14. "ggml/src/ggml-cpu/ggml-cpu.c",
  15. "ggml/src/ggml-cpu/ggml-cpu.cpp",
  16. "ggml/src/ggml-cpu/ggml-cpu-aarch64.cpp",
  17. "ggml/src/ggml-cpu/ggml-cpu-hbm.cpp",
  18. "ggml/src/ggml-cpu/ggml-cpu-quants.c",
  19. "ggml/src/ggml-cpu/ggml-cpu-traits.cpp",
  20. "ggml/src/ggml-threading.cpp",
  21. "ggml/src/ggml-quants.c",
  22. ]
  23. var resources: [Resource] = []
  24. var linkerSettings: [LinkerSetting] = []
  25. var cSettings: [CSetting] = [
  26. .unsafeFlags(["-Wno-shorten-64-to-32", "-O3", "-DNDEBUG"]),
  27. .unsafeFlags(["-fno-objc-arc"]),
  28. .headerSearchPath("ggml/src"),
  29. .headerSearchPath("ggml/src/ggml-cpu"),
  30. // NOTE: NEW_LAPACK will required iOS version 16.4+
  31. // We should consider add this in the future when we drop support for iOS 14
  32. // (ref: ref: https://developer.apple.com/documentation/accelerate/1513264-cblas_sgemm?language=objc)
  33. // .define("ACCELERATE_NEW_LAPACK"),
  34. // .define("ACCELERATE_LAPACK_ILP64")
  35. .define("GGML_USE_CPU"),
  36. ]
  37. #if canImport(Darwin)
  38. sources.append("ggml/src/ggml-common.h")
  39. sources.append("ggml/src/ggml-metal/ggml-metal.m")
  40. resources.append(.process("ggml/src/ggml-metal/ggml-metal.metal"))
  41. linkerSettings.append(.linkedFramework("Accelerate"))
  42. cSettings.append(
  43. contentsOf: [
  44. .define("GGML_USE_ACCELERATE"),
  45. .define("GGML_USE_METAL"),
  46. ]
  47. )
  48. #endif
  49. #if os(Linux)
  50. cSettings.append(.define("_GNU_SOURCE"))
  51. #endif
  52. let package = Package(
  53. name: "llama",
  54. platforms: [
  55. .macOS(.v12),
  56. .iOS(.v14),
  57. .watchOS(.v4),
  58. .tvOS(.v14)
  59. ],
  60. products: [
  61. .library(name: "llama", targets: ["llama"]),
  62. ],
  63. targets: [
  64. .target(
  65. name: "llama",
  66. path: ".",
  67. exclude: [
  68. "build",
  69. "cmake",
  70. "examples",
  71. "scripts",
  72. "models",
  73. "tests",
  74. "CMakeLists.txt",
  75. "Makefile",
  76. "ggml/src/ggml-metal-embed.metal"
  77. ],
  78. sources: sources,
  79. resources: resources,
  80. publicHeadersPath: "spm-headers",
  81. cSettings: cSettings,
  82. linkerSettings: linkerSettings
  83. )
  84. ],
  85. cxxLanguageStandard: .cxx17
  86. )