summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc/0009-cpp-honor-sysroot.patch
blob: 1c0f3818597d0ad06722ca84961b41e2ce4e0ab0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Subject: [PATCH 5/5] gcc: Pass sysroot options to cpp for preprocessed source

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>
Signed-off-by: Bernhard Rosenkränzer <bernhard.rosenkraenzer.ext@huawei.com> [ported to gcc 12]

[YOCTO #2074]

Upstream-Status: Submitted [https://gcc.gnu.org/pipermail/gcc-patches/2021-October/582725.html]
---
 gcc/cp/lang-specs.h | 2 +-
 gcc/gcc.cc          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Index: gcc-11.2.0/gcc/cp/lang-specs.h
===================================================================
--- gcc-11.2.0.orig/gcc/cp/lang-specs.h
+++ gcc-11.2.0/gcc/cp/lang-specs.h
@@ -116,7 +116,7 @@ along with GCC; see the file COPYING3.
   {".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)}}}"
Index: gcc-11.2.0/gcc/gcc.cc
===================================================================
--- gcc-11.2.0.orig/gcc/gcc.cc
+++ gcc-11.2.0/gcc/gcc.cc
@@ -1470,7 +1470,7 @@ static const struct compiler default_com
 					   %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},