fix: made the macos app smaller

This commit is contained in:
2026-07-18 10:20:54 +02:00
parent c77450d497
commit 593f1646a1
8 changed files with 166 additions and 32 deletions

View File

@@ -38,29 +38,45 @@ defmodule BDS.Embeddings.Backends.NeuralTest do
end
describe "accelerator selection (NativeAcceleratedExecution)" do
# select_accelerator(configured, emlx_available?, exla_available?, apple_silicon?)
test "auto prefers Apple GPU (EMLX) when available on Apple Silicon" do
assert Neural.select_accelerator(:auto, true, true) == :emlx
assert Neural.select_accelerator(:auto, true, true, true) == :emlx
end
test "auto falls back to EXLA-CPU off Apple Silicon" do
assert Neural.select_accelerator(:auto, true, false) == :exla
assert Neural.select_accelerator(:auto, true, true, false) == :exla
end
test "auto falls back to EXLA-CPU when EMLX is unavailable" do
assert Neural.select_accelerator(:auto, false, true) == :exla
assert Neural.select_accelerator(:auto, false, true, true) == :exla
end
test "auto uses EMLX when EXLA is not shipped (pruned macOS bundle)" do
assert Neural.select_accelerator(:auto, true, false, true) == :emlx
assert Neural.select_accelerator(:auto, true, false, false) == :emlx
end
test "explicit :exla is honoured even on Apple Silicon with EMLX present" do
assert Neural.select_accelerator(:exla, true, true) == :exla
assert Neural.select_accelerator(:exla, true, true, true) == :exla
end
test "explicit :exla degrades to EMLX when EXLA is unavailable" do
assert Neural.select_accelerator(:exla, true, false, true) == :emlx
end
test "explicit :emlx is honoured when available" do
assert Neural.select_accelerator(:emlx, true, true) == :emlx
assert Neural.select_accelerator(:emlx, true, false) == :emlx
assert Neural.select_accelerator(:emlx, true, true, true) == :emlx
assert Neural.select_accelerator(:emlx, true, true, false) == :emlx
end
test "explicit :emlx degrades to EXLA when EMLX is unavailable" do
assert Neural.select_accelerator(:emlx, false, true) == :exla
assert Neural.select_accelerator(:emlx, false, true, true) == :exla
end
test "no accelerator available selects :none" do
assert Neural.select_accelerator(:auto, false, false, true) == :none
assert Neural.select_accelerator(:exla, false, false, false) == :none
assert Neural.select_accelerator(:emlx, false, false, false) == :none
end
test "defn options map each accelerator to its native compiler" do

View File

@@ -436,6 +436,8 @@ defmodule BDS.MacBundleTest do
File.write!(Path.join(release, "bin/bds"), "#!/bin/sh\necho fake release\n")
File.mkdir_p!(Path.join(release, "lib/wx-2.4/priv"))
File.write!(Path.join(release, "lib/wx-2.4/priv/wxe_driver.so"), "fake-nif")
File.mkdir_p!(Path.join(release, "releases/0.1.0"))
File.write!(Path.join(release, "releases/0.1.0/env.sh"), "# env")
icns = Path.join(tmp, "AppIcon.icns")
File.write!(icns, "fake-icns")
@@ -489,5 +491,28 @@ defmodule BDS.MacBundleTest do
assert File.exists?(Path.join(app, "Contents/Resources/rel/bin/bds"))
assert File.exists?(Path.join(app, "Contents/Resources/AppIcon.icns"))
end
test "refuses a half-assembled release and keeps the previous bundle", %{app: app} do
# A failed `mix release` leaves lib/ but no releases/<version>/env.sh.
tmp = Path.join(System.tmp_dir!(), "bds-macbundle-broken-#{System.unique_integer([:positive])}")
broken = Path.join(tmp, "rel")
File.mkdir_p!(Path.join(broken, "bin"))
File.mkdir_p!(Path.join(broken, "lib/wx-2.4/priv"))
on_exit(fn -> File.rm_rf!(tmp) end)
assert {:error, {:incomplete_release, message}} =
MacBundle.assemble(
release_dir: broken,
output_dir: Path.dirname(app),
icns_path: Path.join(tmp, "missing.icns"),
version: "0.1.0",
skip_dylibs: true,
skip_codesign: true
)
assert message =~ "mix release"
# the refused build must not have wiped the existing bundle
assert File.exists?(Path.join(app, "Contents/Resources/rel/bin/bds"))
end
end
end

View File

@@ -15,6 +15,8 @@ defmodule BDS.ReleasePackagingTest do
File.mkdir_p!(Path.join(mcp_release, "mcp/bin"))
File.write!(Path.join(app_release, "bin/bds"), "app-release")
File.write!(Path.join(mcp_release, "mcp/bin/bds-mcp"), "mcp-release")
File.mkdir_p!(Path.join(app_release, "releases/0.1.0"))
File.write!(Path.join(app_release, "releases/0.1.0/env.sh"), "# env")
on_exit(fn -> File.rm_rf(base_dir) end)
@@ -66,6 +68,23 @@ defmodule BDS.ReleasePackagingTest do
}
end
test "package refuses a half-assembled release (no releases/*/env.sh)", context do
# A failed `mix release` can leave lib/ copied but no releases/<version>/;
# packaging that produces an app that dies on launch.
File.rm_rf!(Path.join(context.app_release, "releases"))
assert {:error, {:incomplete_release, message}} =
ReleasePackaging.package(
platform: :macos,
version: "0.1.0",
output_dir: context.output_dir,
app_release_source: context.app_release,
mcp_release_source: context.mcp_release
)
assert message =~ "mix release"
end
test "package creates a platform archive for redistribution", context do
assert {:ok, metadata} =
ReleasePackaging.package(