depfile stuff

This commit is contained in:
jacob 2024-05-26 14:14:37 -05:00
parent 7e19a1c169
commit ec6d2bc303

69
build.c
View File

@ -74,35 +74,34 @@ void RcIncludeListAppend(Arena *arena, RcIncludeList *l, D_Tag tag, String rc_ty
* TODO: Migrate this to buildit * TODO: Migrate this to buildit
* ========================== */ * ========================== */
void AddDependenciesFromDepFile(Arena *arena, D_Tag file, D_Tag dep_file) void AddDependenciesFromDepFile(D_Tag dep_file)
{ {
TempArena scratch = ScratchBegin(arena); TempArena scratch = ScratchBeginNoConflict();
D_AddDependency(file, dep_file); String dep_file_data = D_ReadAll(scratch.arena, dep_file);
{ StringList patterns = { 0 };
String dep_file_data = D_ReadAll(scratch.arena, dep_file); StringListAppend(scratch.arena, &patterns, Lit("\r\n"));
StringList patterns = { 0 }; StringListAppend(scratch.arena, &patterns, Lit("\n"));
StringListAppend(scratch.arena, &patterns, Lit("\r\n")); StringList lines = StringSplit(scratch.arena, dep_file_data, patterns);
StringListAppend(scratch.arena, &patterns, Lit("\n")); D_Tag file = { 0 };
StringList lines = StringSplit(scratch.arena, dep_file_data, patterns); for (StringListNode *dn = lines.first; dn; dn = dn->next) {
for (StringListNode *dn = lines.first; dn; dn = dn->next) { String line = dn->string;
String line = dn->string; line = StringReplace(scratch.arena, line, Lit("\\ "), Lit(" "));
line = StringReplace(scratch.arena, line, Lit("\\ "), Lit(" ")); if (StringEndsWith(line, Lit(" \\"))) {
if (StringEndsWith(line, Lit(" \\"))) { line.len -= 2;
line.len -= 2; }
} if (StringBeginsWith(line, Lit(" "))) {
if (StringBeginsWith(line, Lit(" "))) { line.len -= 2;
line.len -= 2; line.text += 2;
line.text += 2; }
} if (StringEndsWith(line, Lit(":"))) {
if (!StringEndsWith(line, Lit(":"))) { line.len -= 1;
D_Tag tag = D_FileTagFromPath(scratch.arena, line); }
if (!D_TagEqual(tag, file)) { if (file.full_path.len == 0) {
String line_copy = StringCopy(arena, line); file = D_FileTagFromPath(scratch.arena, line);
D_Tag tag_copy = D_FileTagFromPath(arena, line_copy); } else {
D_AddDependency(file, tag_copy); D_Tag dependency = D_FileTagFromPath(scratch.arena, line);
} D_AddDependency(file, dependency);
}
} }
} }
@ -276,18 +275,12 @@ void OnBuild(StringList cli_args)
StringListAppend(&arena, &compile_args, StringF(&arena, Lit("/Fd\"%F\\\""), FmtStr(out_bin_dir_path))); StringListAppend(&arena, &compile_args, StringF(&arena, Lit("/Fd\"%F\\\""), FmtStr(out_bin_dir_path)));
} else { } else {
/* Clang */ /* Clang */
StringListAppend(&arena, &c_compile_args, Lit("clang -xc -std=c99 -c \"%F\" -o \"%F\"")); StringListAppend(&arena, &c_compile_args, Lit("clang -xc -std=c99 -c \"%F\" -o \"%F\" -MD"));
StringListAppend(&arena, &cpp_compile_args, Lit("clang -xc++ -std=c++20 -c \"%F\" -o \"%F\"")); StringListAppend(&arena, &cpp_compile_args, Lit("clang -xc++ -std=c++20 -c \"%F\" -o \"%F\" -MD"));
StringListAppend(&arena, &pch_c_compile_args, Lit("clang -xc-header -std=c99 -c \"%F\" -o \"%F\"")); StringListAppend(&arena, &pch_c_compile_args, Lit("clang -xc-header -std=c99 -c \"%F\" -o \"%F\" -MD"));
StringListAppend(&arena, &pch_cpp_compile_args, Lit("clang -xc++-header -std=c++20 -c \"%F\" -o \"%F\"")); StringListAppend(&arena, &pch_cpp_compile_args, Lit("clang -xc++-header -std=c++20 -c \"%F\" -o \"%F\" -MD"));
StringListAppend(&arena, &rc_compile_args, Lit("llvm-rc /fo\"%F\" \"%F\"")); StringListAppend(&arena, &rc_compile_args, Lit("llvm-rc /fo\"%F\" \"%F\""));
StringListAppend(&arena, &c_compile_args, StringF(&arena, Lit("-MD -MF \"%F\""), FmtStr(out_dep_dir_path)));
StringListAppend(&arena, &cpp_compile_args, StringF(&arena, Lit("-MD -MF \"%F\""), FmtStr(out_dep_dir_path)));
StringListAppend(&arena, &pch_c_compile_args, StringF(&arena, Lit("-MD -MF \"%F\""), FmtStr(out_dep_dir_path)));
StringListAppend(&arena, &pch_cpp_compile_args, StringF(&arena, Lit("-MD -MF \"%F\""), FmtStr(out_dep_dir_path)));
StringListAppend(&arena, &link_args, Lit("clang %F")); StringListAppend(&arena, &link_args, Lit("clang %F"));
StringListAppend(&arena, &link_args, StringF(&arena, Lit("-o \"%F\""), FmtStr(executable_file.full_path))); StringListAppend(&arena, &link_args, StringF(&arena, Lit("-o \"%F\""), FmtStr(executable_file.full_path)));
@ -519,7 +512,7 @@ void OnBuild(StringList cli_args)
String dep_file_path = StringF(&arena, Lit("%F/%F.%F"), FmtStr(out_obj_dir_path), FmtStr(name_no_extension), FmtStr(dep_file_extension)); String dep_file_path = StringF(&arena, Lit("%F/%F.%F"), FmtStr(out_obj_dir_path), FmtStr(name_no_extension), FmtStr(dep_file_extension));
dep_file = D_FileTagFromPath(&arena, dep_file_path); dep_file = D_FileTagFromPath(&arena, dep_file_path);
} }
AddDependenciesFromDepFile(&arena, file, dep_file); AddDependenciesFromDepFile(dep_file);
} }
} }
} }