Use std::filesystem::directory_iterator instead of std::filesystem::recursive_directory_iterator to avoid an ABI breakage we met (#131)

This commit is contained in:
Ray Wang
2025-07-21 10:44:20 +08:00
committed by GitHub
parent c1db17e2e3
commit 436a56314c

View File

@@ -19,16 +19,29 @@ class Compiler {
std::string library_version;
std::filesystem::path library_root_path;
std::string get_library_version() const {
// Recursively walk through all subdirectories and update hash
std::stringstream ss;
for (const auto& entry: std::filesystem::recursive_directory_iterator(library_include_path / "deep_gemm")) {
if (entry.is_regular_file() and entry.path().extension() == ".cuh") {
std::ifstream file(entry.path(), std::ios::binary);
std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator<char>());
ss << content;
static void collect_files(const std::filesystem::path& dir,
std::vector<std::filesystem::path>& out) {
// We met ABI breakage using std::filesystem::recursive_directory_iterator
// Use std::filesystem::directory_iterator instead
for (const auto& entry : std::filesystem::directory_iterator(dir)) {
if (entry.is_directory()) {
collect_files(entry.path(), out);
} else if (entry.is_regular_file() && entry.path().extension()==".cuh") {
out.emplace_back(entry.path());
}
}
}
std::string get_library_version() const {
std::vector<std::filesystem::path> files;
collect_files(library_include_path / "deep_gemm", files);
std::sort(files.begin(), files.end());
std::stringstream ss;
for (const auto& f : files) {
std::ifstream in(f, std::ios::binary);
ss << in.rdbuf();
}
return get_hex_digest(ss.str());
}