Author: pirama Date: Tue Mar 14 11:58:07 2017 New Revision: 297751 URL: http://llvm.org/viewvc/llvm-project?rev=297751&view=rev Log: [Driver] Add flag to request arch-specific-subdir in -rpath
Summary: This patch adds -f[no-]rtlib-add-rpath, which if enabled, embeds the arch-specific subdirectory in resource directory using -rpath (instead of doing so only during native compilation). This patch also re-enables test arch-specific-libdir.c which was silently unsupported because of the REQUIRES tag 'linux'. Reviewers: bkramer, rnk, mgorny Subscribers: srhines, cfe-commits Differential Revision: https://reviews.llvm.org/D30700 Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/test/Driver/arch-specific-libdir-rpath.c cfe/trunk/test/Driver/arch-specific-libdir.c cfe/trunk/test/lit.cfg Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=297751&r1=297750&r2=297751&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Mar 14 11:58:07 2017 @@ -2098,6 +2098,10 @@ def resource_dir_EQ : Joined<["-"], "res def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>; def rtlib_EQ : Joined<["-", "--"], "rtlib=">, HelpText<"Compiler runtime library to use">; +def frtlib_add_rpath: Flag<["-"], "frtlib-add-rpath">, Flags<[NoArgumentUnused]>, + HelpText<"Add -rpath with architecture-specific resource directory to the linker flags">; +def fno_rtlib_add_rpath: Flag<["-"], "fno-rtlib-add-rpath">, Flags<[NoArgumentUnused]>, + HelpText<"Do not add -rpath with architecture-specific resource directory to the linker flags">; def r : Flag<["-"], "r">, Flags<[LinkerInput,NoArgumentUnused]>, Group<Link_Group>; def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[DriverOption]>, Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=297751&r1=297750&r2=297751&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp Tue Mar 14 11:58:07 2017 @@ -419,10 +419,6 @@ void tools::AddGoldPlugin(const ToolChai void tools::addArchSpecificRPath(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) { - // In the cross-compilation case, arch-specific library path is likely - // unavailable at runtime. - if (TC.isCrossCompiling()) return; - std::string CandidateRPath = TC.getArchSpecificLibPath(); if (TC.getVFS().exists(CandidateRPath)) { CmdArgs.push_back("-rpath"); Modified: cfe/trunk/test/Driver/arch-specific-libdir-rpath.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arch-specific-libdir-rpath.c?rev=297751&r1=297750&r2=297751&view=diff ============================================================================== --- cfe/trunk/test/Driver/arch-specific-libdir-rpath.c (original) +++ cfe/trunk/test/Driver/arch-specific-libdir-rpath.c Tue Mar 14 11:58:07 2017 @@ -1,50 +1,85 @@ // Test that the driver adds an arch-specific subdirectory in -// {RESOURCE_DIR}/lib/linux to the linker search path and to '-rpath' for native -// compilations. +// {RESOURCE_DIR}/lib/linux to the linker search path and to '-rpath' // -// -rpath only gets added during native compilation. To keep the test simple, -// just test for x86_64-linux native compilation. -// REQUIRES: x86_64-linux +// Test the default behavior when neither -frtlib-add-rpath nor +// -fno-rtlib-add-rpath is specified, which is to skip -rpath +// RUN: %clang %s -### 2>&1 -target x86_64-linux \ +// RUN: -fsanitize=address -shared-libasan \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH-X86_64 %s +// +// Test that -rpath is not added under -fno-rtlib-add-rpath even if other +// conditions are met. +// RUN: %clang %s -### 2>&1 -target x86_64-linux \ +// RUN: -fsanitize=address -shared-libasan \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH-X86_64 %s +// +// Test that -rpath is added only under the right circumstance even if +// -frtlib-add-rpath is specified. // // Add LIBPATH but no RPATH for -fsanitizer=address w/o -shared-libasan -// RUN: %clang %s -### 2>&1 -fsanitize=undefined \ +// RUN: %clang %s -### 2>&1 -target x86_64-linux -fsanitize=undefined \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH %s +// +// Add LIBPATH but no RPATH for -fsanitizer=address w/o -shared-libasan +// RUN: %clang %s -### 2>&1 -target x86_64-linux -fsanitize=undefined \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,NO-RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH %s // // Add LIBPATH, RPATH for -fsanitize=address -shared-libasan // RUN: %clang %s -### 2>&1 -target x86_64-linux \ // RUN: -fsanitize=address -shared-libasan \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,RPATH-X86_64 %s +// +// Add LIBPATH, RPATH for -fsanitize=address -shared-libasan on aarch64 +// RUN: %clang %s -### 2>&1 -target aarch64-linux \ +// RUN: -fsanitize=address -shared-libasan \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-AArch64,RPATH-AArch64 %s // // Add LIBPATH, RPATH with -fsanitize=address for Android // RUN: %clang %s -### 2>&1 -target x86_64-linux-android -fsanitize=address \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,RPATH-X86_64 %s // // Add LIBPATH, RPATH for OpenMP -// RUN: %clang %s -### 2>&1 -fopenmp \ +// RUN: %clang %s -### 2>&1 -target x86_64-linux -fopenmp \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,RPATH-X86_64 %s // // Add LIBPATH but no RPATH for ubsan (or any other sanitizer) // RUN: %clang %s -### 2>&1 -fsanitize=undefined \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,NO-RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH %s // // Add LIBPATH but no RPATH if no sanitizer or runtime is specified // RUN: %clang %s -### 2>&1 \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,LIBPATH,NO-RPATH %s +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,LIBPATH-X86_64,NO-RPATH %s // // Do not add LIBPATH or RPATH if arch-specific subdir doesn't exist // RUN: %clang %s -### 2>&1 \ // RUN: -resource-dir=%S/Inputs/resource_dir \ -// RUN: | FileCheck --check-prefixes=FILEPATH,NO-LIBPATH,NO-RPATH %s -// +// RUN: -frtlib-add-rpath \ +// RUN: | FileCheck --check-prefixes=RESDIR,NO-LIBPATH,NO-RPATH %s // -// FILEPATH: "-x" "c" "[[FILE_PATH:.*]]/{{.*}}.c" -// LIBPATH: -L[[FILE_PATH]]/Inputs/resource_dir_with_arch_subdir/lib/linux/x86_64 -// RPATH: "-rpath" "[[FILE_PATH]]/Inputs/resource_dir_with_arch_subdir/lib/linux/x86_64" -// NO-LIBPATH-NOT: -L{{.*}}Inputs/resource_dir -// NO-RPATH-NOT: "-rpath" {{.*}}/Inputs/resource_dir +// RESDIR: "-resource-dir" "[[RESDIR:[^ ]*]]" +// LIBPATH-X86_64: -L[[RESDIR]]/lib/linux/x86_64 +// RPATH-X86_64: "-rpath" "[[RESDIR]]/lib/linux/x86_64" +// LIBPATH-AArch64: -L[[RESDIR]]/lib/linux/aarch64 +// RPATH-AArch64: "-rpath" "[[RESDIR]]/lib/linux/aarch64" +// NO-LIBPATH-NOT: -L{{.*}}Inputs/resource_dir +// NO-RPATH-NOT: "-rpath" {{.*}}/Inputs/resource_dir Modified: cfe/trunk/test/Driver/arch-specific-libdir.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arch-specific-libdir.c?rev=297751&r1=297750&r2=297751&view=diff ============================================================================== --- cfe/trunk/test/Driver/arch-specific-libdir.c (original) +++ cfe/trunk/test/Driver/arch-specific-libdir.c Tue Mar 14 11:58:07 2017 @@ -1,8 +1,6 @@ // Test that the driver adds an arch-specific subdirectory in // {RESOURCE_DIR}/lib/linux to the search path. // -// REQUIRES: linux -// // RUN: %clang %s -### 2>&1 -target i386-unknown-linux \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ // RUN: | FileCheck --check-prefixes=FILEPATH,ARCHDIR-i386 %s Modified: cfe/trunk/test/lit.cfg URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/lit.cfg?rev=297751&r1=297750&r2=297751&view=diff ============================================================================== --- cfe/trunk/test/lit.cfg (original) +++ cfe/trunk/test/lit.cfg Tue Mar 14 11:58:07 2017 @@ -397,10 +397,6 @@ if platform.system() not in ['Darwin', ' if config.host_triple == config.target_triple: config.available_features.add("native") -# Test Driver/arch-specific-libdir-rpath.c is restricted to x86_64-linux -if re.match(r'^x86_64.*-linux', config.target_triple): - config.available_features.add("x86_64-linux") - # Case-insensitive file system def is_filesystem_case_insensitive(): handle, path = tempfile.mkstemp(prefix='case-test', dir=config.test_exec_root) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits