We've long needed to do this and it really helps out of tree projects since it eliminates the need to set up include paths when taking a source dep on LLVM or MLIR libraries (every external project I work on has some ~dozen lines of include path hackery to make it work, and this eliminates it).
In the future, as the project structures evolve, we could bootstrap the public include paths off of directory properties if that helps (I've seen repo restructuring proposals that may need this flexibility). In any case, we should not require clients of libraries to know those details.
This will let me roll back some hacks from out of tree projects, which will leave a couple of things (likely tablegen related), which we can also look to fix.
This patch has no effect on installed deps (that is what the $<BUILD_INTERFACE:> expression does -- scopes it to source deps in the build system). We may also want to use the $<INSTALL_INTERFACE:> expression to make installed builds automatic.
With this, the interface include directories (usage-requirements) of the object libraries are mirrored. I would have assumed that mirroring the private include directories (build-requirements) might be sufficient, but seems I am wrong.