Skip to content

Commit 44ad3fe

Browse files
committed
replace output filepath in generated dep-files to match output in CMakeLists
1 parent 66a4760 commit 44ad3fe

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ std::stringstream make_generic_stringstream() {
239239
return ss;
240240
}
241241

242-
std::vector<unsigned char> read_binary_file(const std::string& path, bool may_not_exist = false) {
242+
std::string read_binary_file(const std::string& path, bool may_not_exist = false) {
243243
FILE* f = fopen(path.c_str(), "rb");
244244
if (!f) {
245245
if (!may_not_exist) {
@@ -252,7 +252,7 @@ std::vector<unsigned char> read_binary_file(const std::string& path, bool may_no
252252
size_t size = ftell(f);
253253
fseek(f, 0, SEEK_SET);
254254

255-
std::vector<unsigned char> data(size);
255+
std::string data(size, '\0');
256256
size_t read_size = fread(data.data(), 1, size, f);
257257
fclose(f);
258258
if (read_size != size) {
@@ -279,8 +279,8 @@ void write_binary_file(const std::string& path, const std::string& content) {
279279
}
280280

281281
void write_file_if_changed(const std::string& path, const std::string& content) {
282-
std::vector<unsigned char> existing = read_binary_file(path, true);
283-
if (existing.size() != content.size() || memcmp(existing.data(), content.data(), content.size()) != 0) {
282+
std::string existing = read_binary_file(path, true);
283+
if (existing != content) {
284284
write_binary_file(path, content);
285285
}
286286
}
@@ -359,6 +359,18 @@ void string_to_spv_func(std::string name, std::string in_path, std::string out_p
359359
return;
360360
}
361361

362+
if (dep_file) {
363+
// replace .spv output path with the embed .cpp path which is used as output in CMakeLists.txt
364+
std::string dep = read_binary_file(target_cpp + ".d", true);
365+
if (!dep.empty()) {
366+
size_t pos = dep.find(out_path);
367+
if (pos != std::string::npos) {
368+
dep.replace(pos, out_path.length(), target_cpp);
369+
}
370+
write_binary_file(target_cpp + ".d", dep);
371+
}
372+
}
373+
362374
std::lock_guard<std::mutex> guard(lock);
363375
shader_fnames.push_back(std::make_pair(name, out_path));
364376
} catch (const std::exception& e) {
@@ -934,15 +946,16 @@ void write_output_files() {
934946
hdr << "extern const unsigned char " << name << "_data[];\n\n";
935947

936948
if (input_filepath != "") {
937-
std::vector<unsigned char> data = read_binary_file(path);
949+
std::string data = read_binary_file(path);
938950
if (data.empty()) {
939951
continue;
940952
}
941953

942954
src << "const uint64_t " << name << "_len = " << data.size() << ";\n";
943955
src << "const unsigned char " << name << "_data[" << data.size() << "] = {\n" << std::hex;
956+
auto bytes = reinterpret_cast<const uint8_t*>(data.data());
944957
for (size_t i = 0; i < data.size(); ++i) {
945-
src << "0x" << static_cast<int>(data[i]) << ",";
958+
src << "0x" << static_cast<int>(bytes[i]) << ",";
946959
if ((i + 1) % 12 == 0) src << "\n";
947960
}
948961
src << std::dec << "\n};\n\n";

0 commit comments

Comments
 (0)