Message ID | 20211027200505.3340725-6-richard.purdie@linuxfoundation.org |
---|---|
State | New |
Headers | show |
Series | OpenEmbedded/Yocto Project gcc patches | expand |
On 10/27/2021 2:05 PM, Richard Purdie via Gcc-patches wrote: > OpenEmbedded/Yocto Project extensively uses the --sysroot support within gcc. > We discovered that when compiling preprocessed source (.i or .ii files), the > compiler will try and access the builtin sysroot location rather than the > --sysroot option specified on the commandline. If access to that directory is > permission denied (unreadable), gcc will error. This is particularly problematic > when ccache is involved. > > This patch adds %I to the cpp-output spec macro so the default substitutions for > -iprefix, -isystem, -isysroot happen and the correct sysroot is used. > > 2021-10-27 Richard Purdie <richard.purdie@linuxfoundation.org> > > gcc/cp/ChangeLog: > > * lang-specs.h: Pass sysroot options to cpp for preprocessed source > > gcc/ChangeLog: > > * gcc.c: Pass sysroot options to cpp for preprocessed source So generally OK, though I think this is incomplete. If I understand the underlying bits correctly a similar change is needed in: {lto,objc,fortran,ada/gcc-interface,objcp}/lang-specs.h. I think d/lang-specs.h is OK, though it'd probably be useful to double check that. jeff
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h index 8902ae1d2ed..e99e2fcd6ad 100644 --- a/gcc/cp/lang-specs.h +++ b/gcc/cp/lang-specs.h @@ -116,7 +116,7 @@ along with GCC; see the file COPYING3. If not see {".ii", "@c++-cpp-output", 0, 0, 0}, {"@c++-cpp-output", "%{!E:%{!M:%{!MM:" - " cc1plus -fpreprocessed %i %(cc1_options) %2" + " cc1plus -fpreprocessed %i %I %(cc1_options) %2" " %{!fsyntax-only:" " %{fmodule-only:%{!S:-o %g.s%V}}" " %{!fmodule-only:%{!fmodule-header*:%(invoke_as)}}}" diff --git a/gcc/gcc.c b/gcc/gcc.c index abb900a4247..51176becb86 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -1472,7 +1472,7 @@ static const struct compiler default_compilers[] = %W{o*:--output-pch=%*}}%V}}}}}}}", 0, 0, 0}, {".i", "@cpp-output", 0, 0, 0}, {"@cpp-output", - "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, + "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %I %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0}, {".s", "@assembler", 0, 0, 0}, {"@assembler", "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
OpenEmbedded/Yocto Project extensively uses the --sysroot support within gcc. We discovered that when compiling preprocessed source (.i or .ii files), the compiler will try and access the builtin sysroot location rather than the --sysroot option specified on the commandline. If access to that directory is permission denied (unreadable), gcc will error. This is particularly problematic when ccache is involved. This patch adds %I to the cpp-output spec macro so the default substitutions for -iprefix, -isystem, -isysroot happen and the correct sysroot is used. 2021-10-27 Richard Purdie <richard.purdie@linuxfoundation.org> gcc/cp/ChangeLog: * lang-specs.h: Pass sysroot options to cpp for preprocessed source gcc/ChangeLog: * gcc.c: Pass sysroot options to cpp for preprocessed source Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- gcc/cp/lang-specs.h | 2 +- gcc/gcc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)