depfile stuff
This commit is contained in:
parent
7e19a1c169
commit
ec6d2bc303
37
build.c
37
build.c
@ -74,17 +74,16 @@ 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);
|
String dep_file_data = D_ReadAll(scratch.arena, dep_file);
|
||||||
StringList patterns = { 0 };
|
StringList patterns = { 0 };
|
||||||
StringListAppend(scratch.arena, &patterns, Lit("\r\n"));
|
StringListAppend(scratch.arena, &patterns, Lit("\r\n"));
|
||||||
StringListAppend(scratch.arena, &patterns, Lit("\n"));
|
StringListAppend(scratch.arena, &patterns, Lit("\n"));
|
||||||
StringList lines = StringSplit(scratch.arena, dep_file_data, patterns);
|
StringList lines = StringSplit(scratch.arena, dep_file_data, patterns);
|
||||||
|
D_Tag file = { 0 };
|
||||||
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(" "));
|
||||||
@ -95,14 +94,14 @@ void AddDependenciesFromDepFile(Arena *arena, D_Tag file, D_Tag dep_file)
|
|||||||
line.len -= 2;
|
line.len -= 2;
|
||||||
line.text += 2;
|
line.text += 2;
|
||||||
}
|
}
|
||||||
if (!StringEndsWith(line, Lit(":"))) {
|
if (StringEndsWith(line, Lit(":"))) {
|
||||||
D_Tag tag = D_FileTagFromPath(scratch.arena, line);
|
line.len -= 1;
|
||||||
if (!D_TagEqual(tag, file)) {
|
|
||||||
String line_copy = StringCopy(arena, line);
|
|
||||||
D_Tag tag_copy = D_FileTagFromPath(arena, line_copy);
|
|
||||||
D_AddDependency(file, tag_copy);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (file.full_path.len == 0) {
|
||||||
|
file = D_FileTagFromPath(scratch.arena, line);
|
||||||
|
} else {
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user