| 887 | } |
| 888 | |
| 889 | std::string fs_get_cache_directory() { |
| 890 | std::string cache_directory = ""; |
| 891 | auto ensure_trailing_slash = [](std::string p) { |
| 892 | // Make sure to add trailing slash |
| 893 | if (p.back() != DIRECTORY_SEPARATOR) { |
| 894 | p += DIRECTORY_SEPARATOR; |
| 895 | } |
| 896 | return p; |
| 897 | }; |
| 898 | if (getenv("LLAMA_CACHE")) { |
| 899 | cache_directory = std::getenv("LLAMA_CACHE"); |
| 900 | } else { |
| 901 | #if defined(__linux__) || defined(__FreeBSD__) || defined(_AIX) || defined(__OpenBSD__) |
| 902 | if (std::getenv("XDG_CACHE_HOME")) { |
| 903 | cache_directory = std::getenv("XDG_CACHE_HOME"); |
| 904 | } else if (std::getenv("HOME")) { |
| 905 | cache_directory = std::getenv("HOME") + std::string("/.cache/"); |
| 906 | } else { |
| 907 | #if defined(__linux__) |
| 908 | /* no $HOME is defined, fallback to getpwuid */ |
| 909 | struct passwd *pw = getpwuid(getuid()); |
| 910 | if ((!pw) || (!pw->pw_dir)) { |
| 911 | throw std::runtime_error("Failed to find $HOME directory"); |
| 912 | } |
| 913 | |
| 914 | cache_directory = std::string(pw->pw_dir) + std::string("/.cache/"); |
| 915 | #else /* defined(__linux__) */ |
| 916 | throw std::runtime_error("Failed to find $HOME directory"); |
| 917 | #endif /* defined(__linux__) */ |
| 918 | } |
| 919 | #elif defined(__APPLE__) |
| 920 | cache_directory = std::getenv("HOME") + std::string("/Library/Caches/"); |
| 921 | #elif defined(_WIN32) |
| 922 | cache_directory = std::getenv("LOCALAPPDATA"); |
| 923 | #elif defined(__EMSCRIPTEN__) |
| 924 | GGML_ABORT("not implemented on this platform"); |
| 925 | #else |
| 926 | # error Unknown architecture |
| 927 | #endif |
| 928 | cache_directory = ensure_trailing_slash(cache_directory); |
| 929 | cache_directory += "llama.cpp"; |
| 930 | } |
| 931 | return ensure_trailing_slash(cache_directory); |
| 932 | } |
| 933 | |
| 934 | std::string fs_get_cache_file(const std::string & filename) { |
| 935 | GGML_ASSERT(filename.find(DIRECTORY_SEPARATOR) == std::string::npos); |
no test coverage detected