[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul marked an inline comment as done.
sthibaul added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

MaskRay wrote:
> sthibaul wrote:
> > MaskRay wrote:
> > > I'd be glad if we could use `GCCInstallation.isValid()`.
> > > 
> > > However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` 
> > > is not provided while compile-only  libstdc++ search paths are expected.
> > > 
> > > For now, use `GCCInstallation.isValid() ? 
> > > GCCInstallation.getTriple().str() : ""`
> > Ok, fixed so
> Sorry, I noticed that we can just ignore `!GCCInstallation.isValid()`. The 
> chromium usage should still work.
Ok!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG932e8c324154: hurd: Detect libstdc++ include paths on Debian 
Hurd i386 (authored by sthibaul, committed by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

sthibaul wrote:
> MaskRay wrote:
> > I'd be glad if we could use `GCCInstallation.isValid()`.
> > 
> > However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` is 
> > not provided while compile-only  libstdc++ search paths are expected.
> > 
> > For now, use `GCCInstallation.isValid() ? GCCInstallation.getTriple().str() 
> > : ""`
> Ok, fixed so
Sorry, I noticed that we can just ignore `!GCCInstallation.isValid()`. The 
chromium usage should still work.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay updated this revision to Diff 340960.
MaskRay added a comment.

simplify


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340878.
sthibaul added a comment.

Rebase on newer D101317 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340871.
sthibaul marked 2 inline comments as done.
sthibaul added a comment.

Rather use i686-gnu triplet


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i686-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-27 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340765.
sthibaul added a comment.

Fix clang-tidy warning


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay accepted this revision.
MaskRay added a comment.
This revision is now accepted and ready to land.

LGTM.




Comment at: clang/test/Driver/hurd.cpp:21
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L

Since we now unsupport Windows, `{{/|}}` -> `/`

Consider replacing gcc 4.6.0 with the actual gcc version which may be higher, 
just to reflect the truth.
We may want to unsupport too old GCC versions if nobody uses.

But perhaps these cleanups can be done separately.



Comment at: clang/test/Driver/hurd.cpp:49
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" 
"[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"

Drop `{{(.exe)?}}`

I think `"{{.*}}ld{{(.exe)?}}"` can be cleaned as well. Is it `i686-gnu-ld` if 
you add a fake executable `bin/i686-gnu-ld`?
If it is exactly `ld`, will be good to test the exact form. `linux-ld.c` is a 
big messy and probably not a good reference.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul added inline comments.



Comment at: clang/test/Driver/hurd.cpp:4
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \

MaskRay wrote:
> The target should exactly match the hurd triple. Other aliases are supported 
> but should be considered discouraged.
> 
> Driver testing is difficult. Good to test `-DCLANG_DEFAULT_RTLIB=compiler-rt 
> -DCLANG_DEFAULT_CXX_STDLIB=libc++` as well whether you need to fix some 
> options.
> 
> If `hurd.c` has now duplicated testing for some properties, consider dropping 
> it. We should try making tests orthogonal.
> The target should exactly match the hurd triple. Other aliases are supported 
> but should be considered discouraged.

Well, i386-pc-gnu is the GCC triplet for hurd on x86. i386-pc-hurd-gnu is 
llvm-only. Alright anyway.

> If hurd.c has now duplicated testing for some properties, consider dropping 
> it.

Ok I have moved everything from hurd.c to hurd.cpp.



Comment at: clang/test/Driver/hurd.cpp:20
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"

MaskRay wrote:
> You probably missed that I used `"-L` as the first line value (also note that 
> the thing after `CHECK:` is aligned). The ensures the test can catch the case 
> when a "-L" is added to the start of the list.
I noticed that afterwards indeed, fixed so.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340703.
sthibaul marked 6 inline comments as done.
sthibaul added a comment.

Move all tests to hurd.cpp


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.c
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,98 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem"
+// CHECK-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L
+// CHECK-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu -static \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-STATIC %s
+// CHECK-STATIC: "-cc1"
+// CHECK-STATIC: "-static-define"
+// CHECK-STATIC: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-STATIC-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK-STATIC: "-internal-externc-isystem"
+// CHECK-STATIC-SAME: {{^}} "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-STATIC-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-STATIC: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK-STATIC: "-static"
+// CHECK-STATIC: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbeginT.o"
+// CHECK-STATIC: "-L
+// CHECK-STATIC-SAME: {{^}}[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-STATIC-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-hurd-gnu -shared \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SHARED %s
+// CHECK-SHARED: "-cc1"
+// CHECK-SHARED: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-SHARED-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SHARED-SAME: {{^}} 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added inline comments.



Comment at: clang/test/Driver/hurd.cpp:4
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \

The target should exactly match the hurd triple. Other aliases are supported 
but should be considered discouraged.

Driver testing is difficult. Good to test `-DCLANG_DEFAULT_RTLIB=compiler-rt 
-DCLANG_DEFAULT_CXX_STDLIB=libc++` as well whether you need to fix some options.

If `hurd.c` has now duplicated testing for some properties, consider dropping 
it. We should try making tests orthogonal.



Comment at: clang/test/Driver/hurd.cpp:20
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"

You probably missed that I used `"-L` as the first line value (also note that 
the thing after `CHECK:` is aligned). The ensures the test can catch the case 
when a "-L" is added to the start of the list.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul marked 4 inline comments as done.
sthibaul added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

MaskRay wrote:
> I'd be glad if we could use `GCCInstallation.isValid()`.
> 
> However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` is 
> not provided while compile-only  libstdc++ search paths are expected.
> 
> For now, use `GCCInstallation.isValid() ? GCCInstallation.getTriple().str() : 
> ""`
Ok, fixed so



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3018
+  StringRef TripleStr = GCCInstallation.getTriple().str();
+
+  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args, TripleStr);

MaskRay wrote:
> No need for a blank line
Ok, fixed so



Comment at: clang/test/Driver/hurd.cpp:9
+/// though the installation is i686-gnu.
+// CHECK-SAME: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"

MaskRay wrote:
> Windows may use backslashes in some places.
> It is really difficult to tell where need backslashes, so I just add 
> `UNSUPPORTED: system-windows` to linux-cross.cpp
Ok, added so.



Comment at: clang/test/Driver/hurd.cpp:21
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: "-L[[SYSROOT]]/lib/i386-gnu"

MaskRay wrote:
> `{{^}} ` is important, otherwise a new addition cannot be detected.
Ok, added so.



Comment at: clang/test/Driver/hurd.cpp:5
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK-NOT: warning:
+// CHECK: "-cc1"

MaskRay wrote:
> sthibaul wrote:
> > MaskRay wrote:
> > > The warning negative pattern doesn't really work.
> > You mean because it was misplaced?
> > Indeed, fixed so.
> `-###` cannot detect unused warning options: `clang -Wfoobar '-###' a.cc -c` 
> =>  no warning
> 
> It is probably not the test's task to check it.
Ok, dropped it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340700.
sthibaul marked 3 inline comments as done.
sthibaul added a comment.

Fix GCCInstallation.isValid use in Generic_GCC::addLibStdCxxIncludePaths
Fix test further


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,28 @@
+// UNSUPPORTED: system-windows
+
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/lib"
+// CHECK-SAME: {{^}} "-L[[SYSROOT]]/usr/lib"
Index: clang/lib/Driver/ToolChains/Linux.cpp
===
--- clang/lib/Driver/ToolChains/Linux.cpp
+++ clang/lib/Driver/ToolChains/Linux.cpp
@@ -595,17 +595,24 @@
 
 void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const {
-  // Try generic GCC detection first.
-  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args))
-return;
-
   // We need a detected GCC installation on Linux to provide libstdc++'s
   // headers in odd Linuxish places.
   if (!GCCInstallation.isValid())
 return;
 
-  StringRef LibDir = GCCInstallation.getParentLibPath();
+  // Detect Debian g++-multiarch-incdir.diff.
   StringRef TripleStr = GCCInstallation.getTriple().str();
+  StringRef DebianMultiarch =
+  GCCInstallation.getTriple().getArch() == llvm::Triple::x86
+  ? "i386-linux-gnu"
+  : TripleStr;
+
+  // Try generic GCC detection first.
+  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args,
+   DebianMultiarch))
+return;
+
+  StringRef LibDir = GCCInstallation.getParentLibPath();
   const Multilib  = GCCInstallation.getMultilib();
   const GCCVersion  = GCCInstallation.getVersion();
 
Index: clang/lib/Driver/ToolChains/Hurd.h
===
--- clang/lib/Driver/ToolChains/Hurd.h
+++ clang/lib/Driver/ToolChains/Hurd.h
@@ -26,6 +26,9 @@
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
+  void
+  addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const override;
 
   std::string getDynamicLinker(const llvm::opt::ArgList ) const override;
 
Index: clang/lib/Driver/ToolChains/Hurd.cpp
===
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -186,6 +186,21 @@
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
 }
 
+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const {
+  // We need a detected GCC installation on Linux to provide libstdc++'s
+  // headers in odd Linuxish places.
+  if 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a subscriber: thakis.
MaskRay added inline comments.



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3014
   llvm::opt::ArgStringList ) const 
{
-  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args);
+  if (!GCCInstallation.isValid())
+return;

I'd be glad if we could use `GCCInstallation.isValid()`.

However, @thakis has a chromium usage where `lib/gcc/$triple/crtbegin.o` is not 
provided while compile-only  libstdc++ search paths are expected.

For now, use `GCCInstallation.isValid() ? GCCInstallation.getTriple().str() : 
""`



Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:3018
+  StringRef TripleStr = GCCInstallation.getTriple().str();
+
+  addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args, TripleStr);

No need for a blank line



Comment at: clang/test/Driver/hurd.cpp:9
+/// though the installation is i686-gnu.
+// CHECK-SAME: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"

Windows may use backslashes in some places.
It is really difficult to tell where need backslashes, so I just add 
`UNSUPPORTED: system-windows` to linux-cross.cpp



Comment at: clang/test/Driver/hurd.cpp:21
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: "-L[[SYSROOT]]/lib/i386-gnu"

`{{^}} ` is important, otherwise a new addition cannot be detected.



Comment at: clang/test/Driver/hurd.cpp:5
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK-NOT: warning:
+// CHECK: "-cc1"

sthibaul wrote:
> MaskRay wrote:
> > The warning negative pattern doesn't really work.
> You mean because it was misplaced?
> Indeed, fixed so.
`-###` cannot detect unused warning options: `clang -Wfoobar '-###' a.cc -c` => 
 no warning

It is probably not the test's task to check it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul marked 2 inline comments as done.
sthibaul added inline comments.



Comment at: clang/test/Driver/hurd.cpp:1
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \

MaskRay wrote:
> I think we need -NEXT patterns to prevent unintentional new paths.
> 
> IMO `linux-cross.cpp` uses a good style and can serve as a reference.
Ok, fixed so.



Comment at: clang/test/Driver/hurd.cpp:5
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK-NOT: warning:
+// CHECK: "-cc1"

MaskRay wrote:
> The warning negative pattern doesn't really work.
You mean because it was misplaced?
Indeed, fixed so.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul updated this revision to Diff 340689.
sthibaul added a comment.

Fix test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,27 @@
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK-SAME: "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK-SAME: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK-NOT: warning:
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../lib32"
+// CHECK-SAME: "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK-SAME: "-L[[SYSROOT]]/lib/../lib32"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK-SAME: "-L[[SYSROOT]]/lib"
+// CHECK-SAME: "-L[[SYSROOT]]/usr/lib"
Index: clang/lib/Driver/ToolChains/Linux.cpp
===
--- clang/lib/Driver/ToolChains/Linux.cpp
+++ clang/lib/Driver/ToolChains/Linux.cpp
@@ -595,17 +595,24 @@
 
 void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const {
-  // Try generic GCC detection first.
-  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args))
-return;
-
   // We need a detected GCC installation on Linux to provide libstdc++'s
   // headers in odd Linuxish places.
   if (!GCCInstallation.isValid())
 return;
 
-  StringRef LibDir = GCCInstallation.getParentLibPath();
+  // Detect Debian g++-multiarch-incdir.diff.
   StringRef TripleStr = GCCInstallation.getTriple().str();
+  StringRef DebianMultiarch =
+  GCCInstallation.getTriple().getArch() == llvm::Triple::x86
+  ? "i386-linux-gnu"
+  : TripleStr;
+
+  // Try generic GCC detection first.
+  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args,
+   DebianMultiarch))
+return;
+
+  StringRef LibDir = GCCInstallation.getParentLibPath();
   const Multilib  = GCCInstallation.getMultilib();
   const GCCVersion  = GCCInstallation.getVersion();
 
Index: clang/lib/Driver/ToolChains/Hurd.h
===
--- clang/lib/Driver/ToolChains/Hurd.h
+++ clang/lib/Driver/ToolChains/Hurd.h
@@ -26,6 +26,9 @@
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
+  void
+  addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const override;
 
   std::string getDynamicLinker(const llvm::opt::ArgList ) const override;
 
Index: clang/lib/Driver/ToolChains/Hurd.cpp
===
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -186,6 +186,21 @@
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
 }
 
+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const {
+  // We need a detected GCC installation on Linux to provide libstdc++'s
+  // headers in odd Linuxish places.
+  if (!GCCInstallation.isValid())
+return;
+
+  StringRef TripleStr = GCCInstallation.getTriple().str();
+  StringRef DebianMultiarch =
+  GCCInstallation.getTriple().getArch() == llvm::Triple::x86 ? "i386-gnu"
+ 

[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added inline comments.



Comment at: clang/test/Driver/hurd.cpp:1
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \

I think we need -NEXT patterns to prevent unintentional new paths.

IMO `linux-cross.cpp` uses a good style and can serve as a reference.



Comment at: clang/test/Driver/hurd.cpp:5
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK-NOT: warning:
+// CHECK: "-cc1"

The warning negative pattern doesn't really work.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101331/new/

https://reviews.llvm.org/D101331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D101331: hurd: Detect libstdc++ include paths on Debian Hurd i386

2021-04-26 Thread Samuel Thibault via Phabricator via cfe-commits
sthibaul created this revision.
sthibaul requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This is a follow-up of e92d2b80c6c9 
 
("[Driver] Detect libstdc++ include
paths for native gcc (-m32 and -m64) on Debian i386") for the Debian Hurd
case, which has the same multiarch name reduction from i686 to i386.
i386-linux-gnu is actually Linux-only, so this moves the code of that commit
to Linux.cpp, and adds the same to Hurd.cpp


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D101331

Files:
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Hurd.cpp
  clang/lib/Driver/ToolChains/Hurd.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/c++/4.6.0/.keep
  clang/test/Driver/Inputs/basic_hurd_tree/usr/include/i386-gnu/c++/4.6.0/.keep
  clang/test/Driver/hurd.cpp

Index: clang/test/Driver/hurd.cpp
===
--- /dev/null
+++ clang/test/Driver/hurd.cpp
@@ -0,0 +1,25 @@
+// RUN: %clang -no-canonical-prefixes %s -### 2>&1 \
+// RUN: --target=i386-pc-gnu \
+// RUN: --sysroot=%S/Inputs/basic_hurd_tree \
+// RUN:   | FileCheck --check-prefix=CHECK %s
+// CHECK-NOT: warning:
+// CHECK: "-cc1"
+// CHECK: "-isysroot" "[[SYSROOT:[^"]+]]"
+/// Debian specific - the path component after 'include' is i386-gnu even
+/// though the installation is i686-gnu.
+// CHECK: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0"
+// CHECK: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/i386-gnu/c++/4.6.0"
+// CHECK: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-gnu/4.6.0/../../../../include/c++/4.6.0/backward"
+// CHECK: "-internal-isystem" "[[SYSROOT]]/usr/local/include"
+// CHECK: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/i386-gnu"
+// CHECK: "-internal-externc-isystem" "[[SYSROOT]]/include"
+// CHECK: "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
+// CHECK: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
+// CHECK: "-dynamic-linker" "/lib/ld.so"
+// CHECK: "{{.*}}/usr/lib/gcc/i686-gnu/4.6.0{{/|}}crtbegin.o"
+// CHECK: "-L[[SYSROOT]]/lib/i386-gnu"
+// CHECK: "-L[[SYSROOT]]/lib/../lib32"
+// CHECK: "-L[[SYSROOT]]/usr/lib/i386-gnu"
+// CHECK: "-L[[SYSROOT]]/usr/lib/../lib32"
+// CHECK: "-L[[SYSROOT]]/lib"
+// CHECK: "-L[[SYSROOT]]/usr/lib"
Index: clang/lib/Driver/ToolChains/Linux.cpp
===
--- clang/lib/Driver/ToolChains/Linux.cpp
+++ clang/lib/Driver/ToolChains/Linux.cpp
@@ -595,17 +595,24 @@
 
 void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ) const {
-  // Try generic GCC detection first.
-  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args))
-return;
-
   // We need a detected GCC installation on Linux to provide libstdc++'s
   // headers in odd Linuxish places.
   if (!GCCInstallation.isValid())
 return;
 
-  StringRef LibDir = GCCInstallation.getParentLibPath();
+  // Detect Debian g++-multiarch-incdir.diff.
   StringRef TripleStr = GCCInstallation.getTriple().str();
+  StringRef DebianMultiarch =
+  GCCInstallation.getTriple().getArch() == llvm::Triple::x86
+  ? "i386-linux-gnu"
+  : TripleStr;
+
+  // Try generic GCC detection first.
+  if (Generic_GCC::addGCCLibStdCxxIncludePaths(DriverArgs, CC1Args,
+   DebianMultiarch))
+return;
+
+  StringRef LibDir = GCCInstallation.getParentLibPath();
   const Multilib  = GCCInstallation.getMultilib();
   const GCCVersion  = GCCInstallation.getVersion();
 
Index: clang/lib/Driver/ToolChains/Hurd.h
===
--- clang/lib/Driver/ToolChains/Hurd.h
+++ clang/lib/Driver/ToolChains/Hurd.h
@@ -26,6 +26,9 @@
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
+  void
+  addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const override;
 
   std::string getDynamicLinker(const llvm::opt::ArgList ) const override;
 
Index: clang/lib/Driver/ToolChains/Hurd.cpp
===
--- clang/lib/Driver/ToolChains/Hurd.cpp
+++ clang/lib/Driver/ToolChains/Hurd.cpp
@@ -186,6 +186,21 @@
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
 }
 
+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const {
+  // We need a detected GCC installation on Linux to provide libstdc++'s
+  // headers in odd Linuxish places.
+  if