diff --git a/mlx/backend/common/compiled_cpu.cpp b/mlx/backend/common/compiled_cpu.cpp index 853617f5a..eb08d070d 100644 --- a/mlx/backend/common/compiled_cpu.cpp +++ b/mlx/backend/common/compiled_cpu.cpp @@ -68,15 +68,20 @@ void* compile( std::string source_code = source_builder(); std::string kernel_file_name; - // Deal with long kernel names. Maximum length for files on macOS is 255 - // characters. Clip file name with a little extra room and append a 16 - // character hash. + // Deal with long kernel names. Maximum length for filename on macOS is 255 + // characters, and on Windows the maximum length for whole path is 260. Clip + // file name with a little extra room and append a 16 character hash. +#ifdef _WIN32 + constexpr int max_file_name_length = 140; +#else constexpr int max_file_name_length = 245; +#endif if (kernel_name.size() > max_file_name_length) { std::ostringstream file_name; file_name << std::string_view(kernel_name).substr(0, max_file_name_length - 16); - auto file_id = std::hash{}(kernel_name); + auto file_id = + std::hash{}(kernel_name.substr(max_file_name_length - 16)); file_name << "_" << std::hex << std::setw(16) << file_id << std::dec; kernel_file_name = file_name.str(); } else {