gen_darwin.sh 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. # This script is intended to run inside the go generate
  3. # working directory must be ./llm/generate/
  4. # TODO - add hardening to detect missing tools (cmake, etc.)
  5. set -ex
  6. set -o pipefail
  7. compress_pids=""
  8. echo "Starting darwin generate script"
  9. source $(dirname $0)/gen_common.sh
  10. init_vars
  11. git_module_setup
  12. apply_patches
  13. sign() {
  14. if [ -n "$APPLE_IDENTITY" ]; then
  15. codesign -f --timestamp --deep --options=runtime --sign "$APPLE_IDENTITY" --identifier ai.ollama.ollama $1
  16. fi
  17. }
  18. COMMON_DARWIN_DEFS="-DBUILD_SHARED_LIBS=off -DCMAKE_OSX_DEPLOYMENT_TARGET=11.3 -DGGML_METAL_MACOSX_VERSION_MIN=11.3 -DCMAKE_SYSTEM_NAME=Darwin -DGGML_METAL_EMBED_LIBRARY=on -DGGML_OPENMP=off"
  19. case "${GOARCH}" in
  20. "amd64")
  21. COMMON_CPU_DEFS="${COMMON_DARWIN_DEFS} -DCMAKE_SYSTEM_PROCESSOR=${ARCH} -DCMAKE_OSX_ARCHITECTURES=${ARCH} -DGGML_METAL=off -DGGML_NATIVE=off"
  22. if [ -z "$OLLAMA_SKIP_CPU_GENERATE" ]; then
  23. #
  24. # CPU first for the default library, set up as lowest common denominator for maximum compatibility (including Rosetta)
  25. #
  26. init_vars
  27. CMAKE_DEFS="${COMMON_CPU_DEFS} -DGGML_ACCELERATE=off -DGGML_BLAS=off -DGGML_AVX=off -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off ${CMAKE_DEFS}"
  28. RUNNER=cpu
  29. BUILD_DIR="../build/darwin/${GOARCH}/${RUNNER}"
  30. echo "Building LCD CPU"
  31. build
  32. sign ${BUILD_DIR}/bin/ollama_llama_server
  33. compress
  34. #
  35. # ~2011 CPU Dynamic library with more capabilities turned on to optimize performance
  36. # Approximately 400% faster than LCD on same CPU
  37. #
  38. init_vars
  39. CMAKE_DEFS="${COMMON_CPU_DEFS} -DGGML_ACCELERATE=off -DGGML_BLAS=off -DGGML_AVX=on -DGGML_AVX2=off -DGGML_AVX512=off -DGGML_FMA=off -DGGML_F16C=off ${CMAKE_DEFS}"
  40. RUNNER=cpu_avx
  41. BUILD_DIR="../build/darwin/${GOARCH}/${RUNNER}"
  42. echo "Building AVX CPU"
  43. build
  44. sign ${BUILD_DIR}/bin/ollama_llama_server
  45. compress
  46. #
  47. # ~2013 CPU Dynamic library
  48. # Approximately 10% faster than AVX on same CPU
  49. #
  50. init_vars
  51. CMAKE_DEFS="${COMMON_CPU_DEFS} -DGGML_ACCELERATE=on -DGGML_BLAS=off -DGGML_AVX=on -DGGML_AVX2=on -DGGML_AVX512=off -DGGML_FMA=on -DGGML_F16C=on ${CMAKE_DEFS}"
  52. RUNNER=cpu_avx2
  53. BUILD_DIR="../build/darwin/${GOARCH}/${RUNNER}"
  54. echo "Building AVX2 CPU"
  55. EXTRA_LIBS="${EXTRA_LIBS} -framework Accelerate -framework Foundation"
  56. build
  57. sign ${BUILD_DIR}/bin/ollama_llama_server
  58. compress
  59. fi
  60. ;;
  61. "arm64")
  62. if [ -z "$OLLAMA_SKIP_METAL_GENERATE" ]; then
  63. init_vars
  64. CMAKE_DEFS="${COMMON_DARWIN_DEFS} -DCMAKE_SYSTEM_PROCESSOR=${ARCH} -DCMAKE_OSX_ARCHITECTURES=${ARCH} ${CMAKE_DEFS}"
  65. RUNNER="metal"
  66. BUILD_DIR="../build/darwin/${GOARCH}/${RUNNER}"
  67. EXTRA_LIBS="${EXTRA_LIBS} -framework Accelerate -framework Foundation -framework Metal -framework MetalKit -framework MetalPerformanceShaders"
  68. build
  69. sign ${BUILD_DIR}/bin/ollama_llama_server
  70. compress
  71. fi
  72. ;;
  73. *)
  74. echo "GOARCH must be set"
  75. echo "this script is meant to be run from within go generate"
  76. exit 1
  77. ;;
  78. esac
  79. cleanup
  80. wait_for_compress
  81. echo "go generate completed. LLM runners: $(cd ${BUILD_DIR}/..; echo *)"