mirror of
https://github.com/ml-explore/mlx.git
synced 2025-06-25 01:41:17 +08:00
fixes for building with swiftpm (#225)
- clbas is part of veclib (compile failure) - add SWIFTPM_BUNDLE #define to allow loading the metallib from a swiftpm resource bundle
This commit is contained in:
parent
137f55bf28
commit
37024d899c
@ -1,6 +1,6 @@
|
|||||||
// Copyright © 2023 Apple Inc.
|
// Copyright © 2023 Apple Inc.
|
||||||
|
|
||||||
#include <cblas.h>
|
#include <VecLib/cblas.h>
|
||||||
|
|
||||||
#include "mlx/array.h"
|
#include "mlx/array.h"
|
||||||
#include "mlx/backend/common/copy.h"
|
#include "mlx/backend/common/copy.h"
|
||||||
|
@ -42,6 +42,25 @@ std::pair<MTL::Library*, NS::Error*> load_library_from_path(
|
|||||||
return std::make_pair(lib, error);
|
return std::make_pair(lib, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SWIFTPM_BUNDLE
|
||||||
|
MTL::Library* try_load_bundle(MTL::Device* device, NS::URL* url) {
|
||||||
|
std::string bundle_path = std::string(url->fileSystemRepresentation()) + "/" +
|
||||||
|
SWIFTPM_BUNDLE + ".bundle";
|
||||||
|
auto bundle = NS::Bundle::alloc()->init(
|
||||||
|
NS::String::string(bundle_path.c_str(), NS::UTF8StringEncoding));
|
||||||
|
if (bundle != nullptr) {
|
||||||
|
std::string resource_path =
|
||||||
|
std::string(bundle->resourceURL()->fileSystemRepresentation()) + "/" +
|
||||||
|
"default.metallib";
|
||||||
|
auto [lib, error] = load_library_from_path(device, resource_path.c_str());
|
||||||
|
if (lib) {
|
||||||
|
return lib;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
MTL::Library* load_library(
|
MTL::Library* load_library(
|
||||||
MTL::Device* device,
|
MTL::Device* device,
|
||||||
const std::string& lib_name = "mlx",
|
const std::string& lib_name = "mlx",
|
||||||
@ -55,6 +74,26 @@ MTL::Library* load_library(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SWIFTPM_BUNDLE
|
||||||
|
// try to load from a swiftpm resource bundle -- scan the available bundles to
|
||||||
|
// find one that contains the named bundle
|
||||||
|
{
|
||||||
|
MTL::Library* library =
|
||||||
|
try_load_bundle(device, NS::Bundle::mainBundle()->bundleURL());
|
||||||
|
if (library != nullptr) {
|
||||||
|
return library;
|
||||||
|
}
|
||||||
|
auto bundles = NS::Bundle::allBundles();
|
||||||
|
for (int i = 0, c = (int)bundles->count(); i < c; i++) {
|
||||||
|
auto bundle = reinterpret_cast<NS::Bundle*>(bundles->object(i));
|
||||||
|
library = try_load_bundle(device, bundle->resourceURL());
|
||||||
|
if (library != nullptr) {
|
||||||
|
return library;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Couldn't find it so let's load it from default_mtllib_path
|
// Couldn't find it so let's load it from default_mtllib_path
|
||||||
{
|
{
|
||||||
auto [lib, error] = load_library_from_path(device, lib_path);
|
auto [lib, error] = load_library_from_path(device, lib_path);
|
||||||
|
Loading…
Reference in New Issue
Block a user