diff --git a/llvm/utils/lit/lit/llvm/config.py b/llvm/utils/lit/lit/llvm/config.py --- a/llvm/utils/lit/lit/llvm/config.py +++ b/llvm/utils/lit/lit/llvm/config.py @@ -402,7 +402,7 @@ self.add_err_msg_substitutions() def use_llvm_tool(self, name, search_env=None, required=False, quiet=False, - use_installed=False): + search_paths=None, use_installed=False): """Find the executable program 'name', optionally using the specified environment variable as an override before searching the build directory and then optionally the configuration's PATH.""" @@ -413,8 +413,11 @@ tool = self.config.environment.get(search_env) if not tool: - # Use the build directory version. - tool = lit.util.which(name, self.config.llvm_tools_dir) + if search_paths is None: + search_paths = [self.config.llvm_tools_dir] + # Use the specified search paths. + path = os.pathsep.join(search_paths) + tool = lit.util.which(name, path) if not tool and use_installed: # Otherwise look in the path, if enabled. @@ -488,10 +491,10 @@ 'llvm_shlib_dir', 'llvm_libs_dir', ] - paths = [getattr(self.config, pp) for pp in lib_dir_props - if getattr(self.config, pp, None)] + lib_paths = [getattr(self.config, pp) for pp in lib_dir_props + if getattr(self.config, pp, None)] - self.with_environment('LD_LIBRARY_PATH', paths, append_path=True) + self.with_environment('LD_LIBRARY_PATH', lib_paths, append_path=True) shl = getattr(self.config, 'llvm_shlib_dir', None) pext = getattr(self.config, 'llvm_plugin_ext', None) @@ -503,7 +506,7 @@ # Discover the 'clang' and 'clangcc' to use. self.config.clang = self.use_llvm_tool( 'clang', search_env='CLANG', required=required, - use_installed=use_installed) + search_paths=paths, use_installed=use_installed) if self.config.clang: self.config.available_features.add('clang') builtin_include_dir = self.get_clang_builtin_include_dir( @@ -595,20 +598,24 @@ lib_dir_props = [self.config.name.lower() + '_libs_dir', 'lld_libs_dir', 'llvm_libs_dir'] - paths = [getattr(self.config, pp) for pp in lib_dir_props - if getattr(self.config, pp, None)] + lib_paths = [getattr(self.config, pp) for pp in lib_dir_props + if getattr(self.config, pp, None)] - self.with_environment('LD_LIBRARY_PATH', paths, append_path=True) + self.with_environment('LD_LIBRARY_PATH', lib_paths, append_path=True) # Discover the LLD executables to use. ld_lld = self.use_llvm_tool('ld.lld', required=required, + search_paths=paths, use_installed=use_installed) lld_link = self.use_llvm_tool('lld-link', required=required, + search_paths=paths, use_installed=use_installed) ld64_lld = self.use_llvm_tool('ld64.lld', required=required, + search_paths=paths, use_installed=use_installed) wasm_ld = self.use_llvm_tool('wasm-ld', required=required, + search_paths=paths, use_installed=use_installed) was_found = ld_lld and lld_link and ld64_lld and wasm_ld diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case10 b/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case10 new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case10.exe b/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case10.exe new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case9 b/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case9 new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case9.exe b/llvm/utils/lit/tests/Inputs/use-llvm-tool/build/case9.exe new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/lit.cfg b/llvm/utils/lit/tests/Inputs/use-llvm-tool/lit.cfg --- a/llvm/utils/lit/tests/Inputs/use-llvm-tool/lit.cfg +++ b/llvm/utils/lit/tests/Inputs/use-llvm-tool/lit.cfg @@ -20,3 +20,6 @@ lit.llvm.llvm_config.use_llvm_tool('case6', search_env='CASE6', use_installed=True) lit.llvm.llvm_config.use_llvm_tool('case7', use_installed=True) lit.llvm.llvm_config.use_llvm_tool('case8', use_installed=True) +paths = [os.path.join(this_dir, 'search1'), os.path.join(this_dir, 'search2'), os.path.join(this_dir, 'search3')] +lit.llvm.llvm_config.use_llvm_tool('case9', search_paths=paths) +lit.llvm.llvm_config.use_llvm_tool('case10', search_paths=paths, use_installed=True) diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/path/case10 b/llvm/utils/lit/tests/Inputs/use-llvm-tool/path/case10 new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/path/case10.exe b/llvm/utils/lit/tests/Inputs/use-llvm-tool/path/case10.exe new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/search1/empty b/llvm/utils/lit/tests/Inputs/use-llvm-tool/search1/empty new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/search2/case9 b/llvm/utils/lit/tests/Inputs/use-llvm-tool/search2/case9 new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/search2/case9.exe b/llvm/utils/lit/tests/Inputs/use-llvm-tool/search2/case9.exe new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/search3/case9 b/llvm/utils/lit/tests/Inputs/use-llvm-tool/search3/case9 new file mode 100644 diff --git a/llvm/utils/lit/tests/Inputs/use-llvm-tool/search3/case9.exe b/llvm/utils/lit/tests/Inputs/use-llvm-tool/search3/case9.exe new file mode 100644 diff --git a/llvm/utils/lit/tests/use-llvm-tool.py b/llvm/utils/lit/tests/use-llvm-tool.py --- a/llvm/utils/lit/tests/use-llvm-tool.py +++ b/llvm/utils/lit/tests/use-llvm-tool.py @@ -17,6 +17,8 @@ ## 6 | / | / | / | <- Env is preferred over build, PATH ## 7 | N/S | / | / | <- Build dir is preferred over PATH ## 8 | X | X | X | <- Say nothing if cannot be found if not required +## 9 | N/S | override | N/S | <- Use specified search directory, instead of default directory +## 10 | N/S | override | / | <- Use PATH if not in search directory ## Check the exact path reported for the first case, but don't bother for the ## others. @@ -28,6 +30,8 @@ # CHECK-NEXT: note: using case6: {{.*}}env-case6 # CHECK-NEXT: note: using case7: {{.*}}build{{[\\/]}}case7 # CHECK-NOT: case8 +# CHECK-NEXT: note: using case9: {{.*}}search2{{[\\/]}}case9 +# CHECK-NEXT: note: using case10: {{.*}}path{{[\\/]}}case10 ## Test that if required is True, lit errors if the tool is not found. # RUN: not %{lit} %{inputs}/use-llvm-tool-required 2>&1 | \