@@ -449,11 +449,17 @@ static std::string backend_filename_suffix() {
449449#endif
450450}
451451
452- static ggml_backend_reg_t ggml_backend_load_best (const char * name, bool silent) {
452+ static ggml_backend_reg_t ggml_backend_load_best (const char * name, bool silent, const char * user_search_path ) {
453453 // enumerate all the files that match [lib]ggml-name-*.[so|dll] in the search paths
454454 // TODO: search system paths
455- std::vector<std::string> search_paths = { " ./" , get_executable_path () };
456455 std::string file_prefix = backend_filename_prefix () + name + " -" ;
456+ std::vector<std::string> search_paths;
457+ if (user_search_path == NULL ) {
458+ search_paths.push_back (" ./" );
459+ search_paths.push_back (get_executable_path ());
460+ } else {
461+ search_paths.push_back (std::string (user_search_path) + " /" );
462+ }
457463
458464 int best_score = 0 ;
459465 std::string best_path;
@@ -509,21 +515,25 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent)
509515}
510516
511517void ggml_backend_load_all () {
518+ ggml_backend_load_all_in_search_path (NULL );
519+ }
520+
521+ void ggml_backend_load_all_in_search_path (const char * search_path) {
512522#ifdef NDEBUG
513523 bool silent = true ;
514524#else
515525 bool silent = false ;
516526#endif
517527
518- ggml_backend_load_best (" blas" , silent);
519- ggml_backend_load_best (" cann" , silent);
520- ggml_backend_load_best (" cuda" , silent);
521- ggml_backend_load_best (" hip" , silent);
522- ggml_backend_load_best (" kompute" , silent);
523- ggml_backend_load_best (" metal" , silent);
524- ggml_backend_load_best (" rpc" , silent);
525- ggml_backend_load_best (" sycl" , silent);
526- ggml_backend_load_best (" vulkan" , silent);
527- ggml_backend_load_best (" musa" , silent);
528- ggml_backend_load_best (" cpu" , silent);
528+ ggml_backend_load_best (" blas" , silent, search_path );
529+ ggml_backend_load_best (" cann" , silent, search_path );
530+ ggml_backend_load_best (" cuda" , silent, search_path );
531+ ggml_backend_load_best (" hip" , silent, search_path );
532+ ggml_backend_load_best (" kompute" , silent, search_path );
533+ ggml_backend_load_best (" metal" , silent, search_path );
534+ ggml_backend_load_best (" rpc" , silent, search_path );
535+ ggml_backend_load_best (" sycl" , silent, search_path );
536+ ggml_backend_load_best (" vulkan" , silent, search_path );
537+ ggml_backend_load_best (" musa" , silent, search_path );
538+ ggml_backend_load_best (" cpu" , silent, search_path );
529539}
0 commit comments