build_darwin.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. mkdir -p dist/darwin
  37. lipo -create -output dist/darwin/ollama dist/darwin-*/ollama
  38. if [ -n "$APPLE_IDENTITY" ]; then
  39. for F in dist/darwin/ollama dist/darwin-amd64/lib/ollama/*; do
  40. codesign -f --timestamp -s "$APPLE_IDENTITY" --identifier ai.ollama.ollama --options=runtime $F
  41. done
  42. # create a temporary zip for notarization
  43. TEMP=$(mktemp -u).zip
  44. ditto -c -k --keepParent dist/darwin/ollama "$TEMP"
  45. xcrun notarytool submit dist/darwin/temp.zip --wait --timeout 10m --apple-id $APPLE_ID --password $APPLE_PASSWORD --team-id $APPLE_TEAM_ID
  46. rm -f "$TEMP"
  47. fi
  48. status "Creating universal tarball..."
  49. tar -cf dist/ollama-darwin.tar --strip-components 2 dist/darwin/ollama
  50. tar -rf dist/ollama-darwin.tar --strip-components 4 dist/darwin-amd64/lib/
  51. gzip -9vc <dist/ollama-darwin.tar >dist/ollama-darwin.tgz
  52. }
  53. _build_macapp() {
  54. # build and optionally sign the mac app
  55. npm install --prefix macapp
  56. if [ -n "$APPLE_IDENTITY" ]; then
  57. npm run --prefix macapp make:sign
  58. else
  59. npm run --prefix macapp make
  60. fi
  61. mv ./macapp/out/make/zip/darwin/universal/Ollama-darwin-universal-$VERSION.zip dist/Ollama-darwin.zip
  62. }
  63. if [ "$#" -eq 0 ]; then
  64. _build_darwin
  65. _sign_darwin
  66. _build_macapp
  67. exit 0
  68. fi
  69. for CMD in "$@"; do
  70. case $CMD in
  71. build) _build_darwin ;;
  72. sign) _sign_darwin ;;
  73. macapp) _build_macapp ;;
  74. *) usage ;;
  75. esac
  76. done