Author: mgrang Date: Mon Jul 30 12:44:13 2018 New Revision: 338294 URL: http://llvm.org/viewvc/llvm-project?rev=338294&view=rev Log: [OpenEmbedded] Fix lib paths for OpenEmbedded targets
Summary: The lib paths are not correctly picked up for OpenEmbedded sysroots (like arm-oe-linux-gnueabi) for 2 reasons: 1. OpenEmbedded sysroots are of the form <sysroot>/usr/lib/<triple>/x.y.z. This form is handled in clang but only for Freescale vendor. 2. 64-bit OpenEmbedded sysroots may not have a /usr/lib dir. So they cannot find /usr/lib64 as it is referenced as /usr/lib/../lib64 in clang. This is a follow-up to the llvm patch: D48861 Reviewers: dlj, rengolin, fedor.sergeev, javed.absar, hfinkel, rsmith Reviewed By: rsmith Subscribers: rsmith, kristof.beyls, cfe-commits Differential Revision: https://reviews.llvm.org/D48862 Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c++/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c++/6.3.0/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c++/6.3.0/backward/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c++/6.3.0/backward/.keep cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/ cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtbegin.o cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtend.o cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crt1.o cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crti.o cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crtn.o cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c++/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c++/6.3.0/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c++/6.3.0/backward/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c++/6.3.0/backward/.keep cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/ cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtbegin.o cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtend.o cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crt1.o cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crti.o cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crtn.o Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp cfe/trunk/lib/Driver/ToolChains/Linux.cpp cfe/trunk/test/Driver/linux-header-search.cpp cfe/trunk/test/Driver/linux-ld.c Modified: cfe/trunk/lib/Driver/ToolChains/Gnu.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Gnu.cpp?rev=338294&r1=338293&r2=338294&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Gnu.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Gnu.cpp Mon Jul 30 12:44:13 2018 @@ -2188,7 +2188,8 @@ void Generic_GCC::GCCInstallationDetecto // this on Freescale triples, though, since some systems put a *lot* of // files in that location, not just GCC installation data. {CandidateTriple.str(), "..", - TargetTriple.getVendor() == llvm::Triple::Freescale}, + TargetTriple.getVendor() == llvm::Triple::Freescale || + TargetTriple.getVendor() == llvm::Triple::OpenEmbedded}, // Natively multiarch systems sometimes put the GCC triple-specific // directory within their multiarch lib directory, resulting in the Modified: cfe/trunk/lib/Driver/ToolChains/Linux.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Linux.cpp?rev=338294&r1=338293&r2=338294&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Linux.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Linux.cpp Mon Jul 30 12:44:13 2018 @@ -376,7 +376,14 @@ Linux::Linux(const Driver &D, const llvm } addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths); - addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); + // 64-bit OpenEmbedded sysroots may not have a /usr/lib dir. So they cannot + // find /usr/lib64 as it is referenced as /usr/lib/../lib64. So we handle + // this here. + if (Triple.getVendor() == llvm::Triple::OpenEmbedded && + Triple.isArch64Bit()) + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir, Paths); + else + addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); if (IsRISCV) { StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple); addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths); Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c++/6.3.0/backward/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/include/c%2B%2B/6.3.0/backward/.keep?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtbegin.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtbegin.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtend.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/aarch64-oe-linux/6.3.0/crtend.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crt1.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crt1.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crti.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crti.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crtn.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_aarch64_linux_tree/usr/lib64/crtn.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c++/6.3.0/backward/.keep URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/include/c%2B%2B/6.3.0/backward/.keep?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtbegin.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtbegin.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtend.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/arm-oe-linux-gnueabi/6.3.0/crtend.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crt1.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crt1.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crti.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crti.o?rev=338294&view=auto ============================================================================== (empty) Added: cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crtn.o URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/openembedded_arm_linux_tree/usr/lib/crtn.o?rev=338294&view=auto ============================================================================== (empty) Modified: cfe/trunk/test/Driver/linux-header-search.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-header-search.cpp?rev=338294&r1=338293&r2=338294&view=diff ============================================================================== --- cfe/trunk/test/Driver/linux-header-search.cpp (original) +++ cfe/trunk/test/Driver/linux-header-search.cpp Mon Jul 30 12:44:13 2018 @@ -493,3 +493,25 @@ // CHECK-DEBIAN-SPARC64: "-internal-externc-isystem" "[[SYSROOT]]/usr/include/sparc64-linux-gnu" // CHECK-DEBIAN-SPARC64: "-internal-externc-isystem" "[[SYSROOT]]/include" // CHECK-DEBIAN-SPARC64: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" + +// Check header search on OpenEmbedded ARM. +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target arm-oe-linux-gnueabi \ +// RUN: --sysroot=%S/Inputs/openembedded_arm_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-OE-ARM %s + +// CHECK-OE-ARM: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-OE-ARM: "-isysroot" "[[SYSROOT:[^"]+]]" +// CHECK-OE-ARM: "-internal-isystem" "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0/../../../include/c++/6.3.0" +// CHECK-OE-ARM: "-internal-isystem" "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0/../../../include/c++/6.3.0/backward" + +// Check header search on OpenEmbedded AArch64. +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target aarch64-oe-linux \ +// RUN: --sysroot=%S/Inputs/openembedded_aarch64_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-OE-AARCH64 %s + +// CHECK-OE-AARCH64: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-OE-AARCH64: "-isysroot" "[[SYSROOT:[^"]+]]" +// CHECK-OE-AARCH64: "-internal-isystem" "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0/../../../include/c++/6.3.0" +// CHECK-OE-AARCH64: "-internal-isystem" "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0/../../../include/c++/6.3.0/backward" Modified: cfe/trunk/test/Driver/linux-ld.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=338294&r1=338293&r2=338294&view=diff ============================================================================== --- cfe/trunk/test/Driver/linux-ld.c (original) +++ cfe/trunk/test/Driver/linux-ld.c Mon Jul 30 12:44:13 2018 @@ -1813,4 +1813,40 @@ // CHECK-LD-AMI: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" // CHECK-LD-AMI: "-lc" // CHECK-LD-AMI: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" -// + +// Check whether the OpenEmbedded ARM libs are added correctly. +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=arm-oe-linux-gnueabi \ +// RUN: --sysroot=%S/Inputs/openembedded_arm_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-OE-ARM %s + +// CHECK-OE-ARM: "-cc1" "-triple" "armv4t-oe-linux-gnueabi" +// CHECK-OE-ARM: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-OE-ARM: "-m" "armelf_linux_eabi" "-dynamic-linker" +// CHECK-OE-ARM: "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0/../../../lib{{/|\\\\}}crt1.o" +// CHECK-OE-ARM: "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0/../../../lib{{/|\\\\}}crti.o" +// CHECK-OE-ARM: "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0{{/|\\\\}}crtbegin.o" +// CHECK-OE-ARM: "-L[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0" +// CHECK-OE-ARM: "-L[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi" +// CHECK-OE-ARM: "-L[[SYSROOT]]/usr/lib" +// CHECK-OE-ARM: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" +// CHECK-OE-ARM: "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0{{/|\\\\}}crtend.o" +// CHECK-OE-ARM: "[[SYSROOT]]/usr/lib/arm-oe-linux-gnueabi/6.3.0/../../../lib{{/|\\\\}}crtn.o" + +// Check whether the OpenEmbedded AArch64 libs are added correctly. +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: --target=aarch64-oe-linux \ +// RUN: --sysroot=%S/Inputs/openembedded_aarch64_linux_tree \ +// RUN: | FileCheck --check-prefix=CHECK-OE-AARCH64 %s + +// CHECK-OE-AARCH64: "-cc1" "-triple" "aarch64-oe-linux" +// CHECK-OE-AARCH64: ld{{.*}}" "--sysroot=[[SYSROOT:[^"]+]]" +// CHECK-OE-AARCH64: "-m" "aarch64linux" "-dynamic-linker" +// CHECK-OE-AARCH64: "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0/../../../lib64{{/|\\\\}}crt1.o" +// CHECK-OE-AARCH64: "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0/../../../lib64{{/|\\\\}}crti.o" +// CHECK-OE-AARCH64: "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0{{/|\\\\}}crtbegin.o" +// CHECK-OE-AARCH64: "-L[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0" +// CHECK-OE-AARCH64: "-L[[SYSROOT]]/usr/lib64" +// CHECK-OE-AARCH64: "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" +// CHECK-OE-AARCH64: "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0{{/|\\\\}}crtend.o" +// CHECK-OE-AARCH64: "[[SYSROOT]]/usr/lib64/aarch64-oe-linux/6.3.0/../../../lib64{{/|\\\\}}crtn.o" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits