Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix deleting files with dependency files #2045

Merged
merged 1 commit into from
Oct 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -315,10 +315,9 @@ else
@echo -e ".text\n\t.align\t2, 0\n" >> $3.s
$$(AS) $$(ASFLAGS) -o $$@ $3.s
endif
ifneq ($(NODEP),1)
$1.d: $2
$(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $2
ifneq ($(NODEP),1)
$1.o: $1.d
-include $1.d
endif
endef
Expand Down Expand Up @@ -346,7 +345,6 @@ endef

define ASM_SCANINC
ifneq ($(NODEP),1)
$1.o: $1.d
$1.d: $2
$(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2
-include $1.d
Expand Down
18 changes: 14 additions & 4 deletions tools/scaninc/scaninc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,19 +157,29 @@ int main(int argc, char **argv)
// Print a make rule for the object file
size_t ext_pos = make_outfile.find_last_of(".");
auto object_file = make_outfile.substr(0, ext_pos + 1) + "o";
output << object_file.c_str() << ": ";
output << object_file.c_str() << ":";
for (const std::string &path : dependencies)
{
output << path << " ";
output << " " << path;
}
output << '\n';

// Dependency list rule.
// Although these rules are identical, they need to be separate, else make will trigger the rule again after the file is created for the first time.
output << "\n" << make_outfile.c_str() << ": ";
output << make_outfile.c_str() << ":";
for (const std::string &path : dependencies_includes)
{
output << path << " ";
output << " " << path;
}
output << '\n';

// Dummy rules
// If a dependency is deleted, make will try to make it, instead of rescanning the dependencies before trying to do that.
for (const std::string &path : dependencies)
{
output << path << ":\n";
}

output.flush();
output.close();
}
Expand Down