build_darwin.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/sh
  2. set -e
  3. status() { echo >&2 ">>> $@"; }
  4. usage() {
  5. echo "usage: $(basename $0) [build [sign]]"
  6. exit 1
  7. }
  8. export VERSION=${VERSION:-$(git describe --tags --dirty)}
  9. export GOFLAGS="'-ldflags=-w -s \"-X=github.com/ollama/ollama/version.Version=${VERSION#v}\" \"-X=github.com/ollama/ollama/server.mode=release\"'"
  10. export CGO_CPPFLAGS='-mmacosx-version-min=11.3'
  11. ARCHS="arm64 amd64"
  12. while getopts "a:h" OPTION; do
  13. case $OPTION in
  14. a) ARCHS=$OPTARG ;;
  15. h) usage ;;
  16. esac
  17. done
  18. shift $(( $OPTIND - 1 ))
  19. _build_darwin() {
  20. for ARCH in $ARCHS; do
  21. status "Building darwin $ARCH"
  22. INSTALL_PREFIX=dist/darwin-$ARCH/
  23. GOOS=darwin GOARCH=$ARCH CGO_ENABLED=1 go build -o $INSTALL_PREFIX .
  24. if [ "$ARCH" = "amd64" ]; then
  25. status "Building darwin $ARCH dynamic backends"
  26. cmake -B build/darwin-$ARCH \
  27. -DCMAKE_OSX_ARCHITECTURES=x86_64 \
  28. -DCMAKE_OSX_DEPLOYMENT_TARGET=11.3
  29. cmake --build build/darwin-$ARCH --target ggml-cpu -j
  30. install build/darwin-$ARCH/lib/ollama/*.{dylib,so} $INSTALL_PREFIX
  31. fi
  32. done
  33. }
  34. _sign_darwin() {
  35. status "Creating universal binary..."
  36. lipo -create -output dist/darwin/ollama dist/darwin/*/ollama
  37. if [ -z "$APPLE_IDENTITY" ]; then
  38. status "No APPLE_IDENTITY set, skipping code signing"
  39. return
  40. fi
  41. for F in dist/darwin/ollama dist/darwin/amd64/lib*; do
  42. codesign -f --timestamp -s "$APPLE_IDENTITY" --identifier ai.ollama.ollama --options=runtime $F
  43. done
  44. # create a temporary zip for notarization
  45. TEMP=$(mktemp -u).zip
  46. ditto -c -k --keepParent dist/darwin/ollama "$TEMP"
  47. xcrun notarytool submit dist/darwin/temp.zip --wait --timeout 10m --apple-id $APPLE_ID --password $APPLE_PASSWORD --team-id $APPLE_TEAM_ID
  48. rm -f "$TEMP"
  49. # create a universal tarball
  50. tar -cf dist/ollama-darwin.tar --strip-components 2 dist/darwin/ollama
  51. tar -rf dist/ollama-darwin.tar --strip-components 3 dist/darwin/amd64/lib*
  52. gzip -9vc <dist/ollama-darwin.tar >dist/ollama-darwin.tgz
  53. }
  54. _build_macapp() {
  55. # build and optionally sign the mac app
  56. npm install --prefix macapp
  57. if [ -n "$APPLE_IDENTITY" ]; then
  58. npm run --prefix macapp make:sign
  59. else
  60. npm run --prefix macapp make
  61. fi
  62. mv ./macapp/out/make/zip/darwin/universal/Ollama-darwin-universal-$VERSION.zip dist/Ollama-darwin.zip
  63. }
  64. if [ "$#" -eq 0 ]; then
  65. _build_darwin
  66. _sign_darwin
  67. _build_macapp
  68. exit 0
  69. fi
  70. for CMD in "$@"; do
  71. case $CMD in
  72. build) _build_darwin ;;
  73. sign) _sign_darwin ;;
  74. macapp) _build_macapp ;;
  75. *) usage ;;
  76. esac
  77. done