I have used Buck for many projects, and in practice it is not complicated all... in fact I think it might be simpler. The reason why is that you define the includes relative to a single path, and the layout is just a Python (well, Skylark) dictionary in the build system. You never have issues with includes happening from the wrong paths, or the build breaking because files have moved around and someone wasn't including things in the correct way. Proper globs are also amazing from a build maintenance perspective.

You can also wire up Protobuf headers in the map.