From c75cafdb58632b21b8208715623d2e601c897cbc Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Fri, 28 Jul 2023 12:18:11 -0400 Subject: [PATCH] build for `universal` architecture on macos --- app/README.md | 4 +++- app/forge.config.ts | 5 ++++- app/package-lock.json | 7 ++++--- app/package.json | 9 +++++---- scripts/build.sh | 7 +++++++ scripts/publish.sh | 4 +--- 6 files changed, 24 insertions(+), 12 deletions(-) create mode 100755 scripts/build.sh diff --git a/app/README.md b/app/README.md index 502c9d40b..cc34d745b 100644 --- a/app/README.md +++ b/app/README.md @@ -7,12 +7,14 @@ This app builds upon Ollama to provide a desktop experience for running models. First, build the `ollama` binary: ``` -make -C .. +cd .. +go build . ``` Then run the desktop app with `npm start`: ``` +cd app npm install npm start ``` diff --git a/app/forge.config.ts b/app/forge.config.ts index c60831c26..b470b73d8 100644 --- a/app/forge.config.ts +++ b/app/forge.config.ts @@ -18,7 +18,7 @@ const config: ForgeConfig = { asar: true, icon: './assets/icon.icns', extraResource: [ - '../ollama', + '../dist/ollama', path.join(__dirname, './assets/iconTemplate.png'), path.join(__dirname, './assets/iconTemplate@2x.png'), path.join(__dirname, './assets/iconUpdateTemplate.png'), @@ -42,6 +42,9 @@ const config: ForgeConfig = { }, } : {}), + osxUniversal: { + x64ArchFiles: '**/ollama', + }, }, rebuildConfig: {}, makers: [new MakerSquirrel({}), new MakerZIP({}, ['darwin'])], diff --git a/app/package-lock.json b/app/package-lock.json index e04600cf1..0cd9b4599 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -32,6 +32,7 @@ "@electron-forge/plugin-auto-unpack-natives": "^6.2.1", "@electron-forge/plugin-webpack": "^6.2.1", "@electron-forge/publisher-github": "^6.2.1", + "@electron/universal": "^1.4.1", "@svgr/webpack": "^8.0.1", "@types/chmodr": "^1.0.0", "@types/node": "^20.4.0", @@ -3328,9 +3329,9 @@ } }, "node_modules/@electron/universal": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.3.4.tgz", - "integrity": "sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.4.1.tgz", + "integrity": "sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==", "dev": true, "dependencies": { "@electron/asar": "^3.2.1", diff --git a/app/package.json b/app/package.json index 0c35a3ebf..a28a95959 100644 --- a/app/package.json +++ b/app/package.json @@ -6,10 +6,10 @@ "main": ".webpack/main", "scripts": { "start": "electron-forge start", - "package": "electron-forge package", - "package:sign": "SIGN=1 electron-forge package", - "make": "electron-forge make", - "make:sign": "SIGN=1 electron-forge make", + "package": "electron-forge package --arch universal", + "package:sign": "SIGN=1 electron-forge package --arch universal", + "make": "electron-forge make --arch universal", + "make:sign": "SIGN=1 electron-forge make --arch universal", "publish": "SIGN=1 electron-forge publish", "lint": "eslint --ext .ts,.tsx .", "format": "prettier --check . --ignore-path .gitignore", @@ -32,6 +32,7 @@ "@electron-forge/plugin-auto-unpack-natives": "^6.2.1", "@electron-forge/plugin-webpack": "^6.2.1", "@electron-forge/publisher-github": "^6.2.1", + "@electron/universal": "^1.4.1", "@svgr/webpack": "^8.0.1", "@types/chmodr": "^1.0.0", "@types/node": "^20.4.0", diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 000000000..4c19da956 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +mkdir -p dist +CGO_ENABLED=1 GOARCH=arm64 go build -o dist/ollama_arm64 +CGO_ENABLED=1 GOARCH=amd64 go build -o dist/ollama_amd64 +lipo -create -output dist/ollama dist/ollama_arm64 dist/ollama_amd64 +npm run --prefix app make:sign diff --git a/scripts/publish.sh b/scripts/publish.sh index 60b4256b5..84eb27309 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -10,9 +10,7 @@ fi OS=$(go env GOOS) ARCH=$(go env GOARCH) -go build . - -npm --prefix app run make:sign +./script/build.sh # Create a new tag if it doesn't exist. if ! git rev-parse v$VERSION >/dev/null 2>&1; then