I just landed 338408 which changes the GN .o/.obj file naming scheme for the Chrome GN build.
I recommend GN users run "gn clean out/foo" for your build directories when you sync next. This will free up some disk space. Otherwise, your object files will be duplicated. Either way you'll get a full rebuild. This is not correctness-related so we opted to avoid the disruption of a landmine for GYP users.
No layout in GYP changes, but the unique naming requirements for source files has changed slightly. If you're curious, read on:
--
TMI:
Previously GN matched GYP where object files were generated in a directory corresponding to their source directory, prefixed with the name of the target. Since GYP target names are globally unique, this ensures unique object file names.
Target names are not unique in GN (there are 84 targets named "test_support"). This means the naming scheme doesn't work very well to make unique names. Precompiled header support (where lots of targets compile build/precompile.cc) necessitated this change.
We could have a naming scheme that incorporates both the target path and the source file path, but this would be ridiculously long. Instead, the new naming scheme puts all object files for a target in a target-specific directory corresponding to the target path and name. So content browser files go into "out/Default/obj/content/browser/browser"
This means that now you can't have source files with the same name in the same target. This comes up from time-to-time (where multiple directories might have a "service.cc" file in them, for example) and then the same target compiles all those sources. Obviously you can make more unique names (GDB users will probably thank you when setting breakpoints). The more GN-y solution would be to make more small targets, so each directory (which map to logical components... right?) would have its own BUILD file with a source_set in it.
Brett