Skip to content

Commit

Permalink
gh-104490: consistently define phony make targets
Browse files Browse the repository at this point in the history
By convention make targets that don't refer to a file have a dependency
on the fake `.PHONY` target/file. This ensures that these targets are
always evaluated because there is no rule to create a `.PHONY` file
and that will force make to think the rule is out of date and needs
to be rebuilt.

This commit consistently associates our virtual targets with `.PHONY`
by declaring the `.PHONY` dependency immediately above the make rule.

Before, some `.PHONY` associations were inline (as this patch
establishes). Others were defined in common blocks. Even others were
defined incorrectly, actually assigning a `.PHONY` variable instead
of operating on the make target!

Before, not all virtual targets had `.PHONY` associations. And there
were some defined `.PHONY` associations in common blocks whose targets
had long been deleted.

Hopefully the unified convention will prevent things from getting out
of sync going forward.

Why do this?

First, consistency is good. Now people don't have to know to look for
a separate block of `.PHONY` attribution. Hopefully this prevents
missing `.PHONY` annotations going forward.

Second, there are some cases where virtual make targets are virtual
/ phony when they shouldn't be. These are creating race conditions and
avoidable rebuilds across multiple `make` invocations. e.g. a `make all`
+ `make install` invocation will perform PGO+BOLT if BOLT is enabled
because `profile-opt` and `bolt-opt` are phony and always invoked. I
plan follow-ups to this cleanup to fix some bugs I've run into.
  • Loading branch information
indygreg committed May 15, 2023
1 parent 2cd1c87 commit 7c7a306
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 20 deletions.
Loading

0 comments on commit 7c7a306

Please sign in to comment.