Currently, if the gcc toolchain is relocated and installed from shared state
cache, then you try and compile
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 happens when ccache is in use due to the fact it uses preprocessed source
files.
The fix below adds %I to the cpp-output spec macro so the default substitutions
for -iprefix,
-isystem, -isysroot happen and the correct sysroot is used.
---
gcc/cp/lang-specs.h | 2 +-
gcc/gcc.cc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
Signed-off-by: Khem Raj
Signed-off-by: Yash Shinde >
---
gcc/cp/lang-specs.h | 2 +-
gcc/gcc.cc | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index c591d155cc1..61927869fe1 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.cc b/gcc/gcc.cc
index becc56051a8..3bc98b67b50 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -1463,7 +1463,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},
--
2.39.0