From 68365e2291392697a1c3686c752749ec29d5a161 Mon Sep 17 00:00:00 2001 From: Marc Date: Sun, 6 Aug 2023 18:20:59 +0200 Subject: [PATCH] one can now specify where ggml-metal.metal file is with en variable GGML_METAL_PATH --- ggml-metal.m | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/ggml-metal.m b/ggml-metal.m index 74a6bff40..b043d7424 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -130,9 +130,30 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { NSError * error = nil; //NSString * path = [[NSBundle mainBundle] pathForResource:@"../../examples/metal/metal" ofType:@"metal"]; - NSBundle * bundle = [NSBundle bundleForClass:[GGMLMetalClass class]]; - NSString * path = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; - fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + const char* v = getenv("GGML_METAL_PATH"); + NSString * path; + if (v) { + path = [NSString stringWithCString: v encoding: NSUTF8StringEncoding]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + if ([fileManager fileExistsAtPath:path]) { + fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + } else { + path = [path stringByAppendingString: @"/ggml-metal.metal"]; + if ([fileManager fileExistsAtPath:path]) { + fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + } else { + // Use original code + NSBundle * bundle = [NSBundle bundleForClass:[GGMLMetalClass class]]; + path = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; + fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + } + } + + } else { + NSBundle * bundle = [NSBundle bundleForClass:[GGMLMetalClass class]]; + path = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; + fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + } NSString * src = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (error) {