llvm-project/llvm/utils
Zachary Turner 58db03a116 Fix some issues with LLDB's lit configuration files.
Recently I tried to port LLDB's lit configuration files over to use a
on the surface, but broke some cases that weren't broken before and also
exposed some additional problems with the old approach that we were just
getting lucky with.

When we set up a lit environment, the goal is to make it as hermetic as
possible. We should not be relying on PATH and enabling the use of
arbitrary shell commands. Instead, only whitelisted commands should be
allowed. These are, generally speaking, the lit builtins such as echo,
cd, etc, as well as anything for which substitutions have been
explicitly set up for. These substitutions should map to the build
output directory, but in some cases it's useful to be able to override
this (for example to point to an installed tools directory).

This is, of course, how it's supposed to work. What was actually
happening is that we were bringing in PATH and LD_LIBRARY_PATH and then
just running the given run line as a shell command. This led to problems
such as finding the wrong version of clang-cl on PATH since it wasn't
even a substitution, and flakiness / non-determinism since the
environment the tests were running in would change per-machine. On the
other hand, it also made other things possible. For example, we had some
tests that were explicitly running cl.exe and link.exe instead of
clang-cl and lld-link and the only reason it worked at all is because it
was finding them on PATH. Unfortunately we can't entirely get rid of
these tests, because they support a few things in debug info that
clang-cl and lld-link don't (notably, the LF_UDT_MOD_SRC_LINE record
which makes some of the tests fail.

The high level changes introduced in this patch are:

1. Removal of functionality - The lit test suite no longer respects
   LLDB_TEST_C_COMPILER and LLDB_TEST_CXX_COMPILER. This means there is no
   more support for gcc, but nobody was using this anyway (note: The
   functionality is still there for the dotest suite, just not the lit test
   suite). There is no longer a single substitution %cxx and %cc which maps
   to <arbitrary-compiler>, you now explicitly specify the compiler with a
   substitution like %clang or %clangxx or %clang_cl. We can revisit this
   in the future when someone needs gcc.

2. Introduction of the LLDB_LIT_TOOLS_DIR directory. This does in spirit
   what LLDB_TEST_C_COMPILER and LLDB_TEST_CXX_COMPILER used to do, but now
   more friendly. If this is not specified, all tools are expected to be
   the just-built tools. If it is specified, the tools which are not
   themselves being tested but are being used to construct and run checks
   (e.g. clang, FileCheck, llvm-mc, etc) will be searched for in this
   directory first, then the build output directory.

3. Changes to core llvm lit files. The use_lld() and use_clang()
   functions were introduced long ago in anticipation of using them in
   lldb, but since they were never actually used anywhere but their
   respective problems, there were some issues to be resolved regarding
   generality and ability to use them outside their project.

4. Changes to .test files - These are all just replacing things like
   clang-cl with %clang_cl and %cxx with %clangxx, etc.

5. Changes to lit.cfg.py - Previously we would load up some system
   environment variables and then add some new things to them. Then do a
   bunch of work building out our own substitutions. First, we delete the
   system environment variable code, making the environment hermetic. Then,
   we refactor the substitution logic into two separate helper functions,
   one which sets up substitutions for the tools we want to test (which
   must come from the build output directory), and another which sets up
   substitutions for support tools (like compilers, etc).

6. New substitutions for MSVC -- Previously we relied on location of
   MSVC by bringing in the entire parent's PATH and letting
   subprocess.Popen just run the command line. Now we set up real
   substitutions that should have the same effect. We use PATH to find
   them, and then look for INCLUDE and LIB to construct a substitution
   command line with appropriate /I and /LIBPATH: arguments. The nice thing
   about this is that it opens the door to having separate %msvc-cl32 and
   %msvc-cl64 substitutions, rather than only requiring the user to run
   vcvars first. Because we can deduce the path to 32-bit libraries from
   64-bit library directories, and vice versa. Without these substitutions
   this would have been impossible.

Differential Revision: https://reviews.llvm.org/D54567

llvm-svn: 347216
2018-11-19 15:12:34 +00:00
..
FileCheck [FileCheck] Parse command-line options from FILECHECK_OPTS 2018-11-06 22:07:03 +00:00
KillTheDoctor Remove @brief commands from doxygen comments, too. 2018-05-01 16:10:38 +00:00
LLVMVisualizers Fix typo in the MSVC Visualizer for SmallVector class 2018-08-06 16:47:24 +00:00
Misc
PerfectShuffle
Reviewing Make email options of find_interesting_reviews more flexible. 2018-06-29 07:16:27 +00:00
TableGen Mark @llvm.trap cold 2018-11-14 19:53:41 +00:00
Target/ARM
UpdateTestChecks [NFC] Fix the regular expression for BE PPC in update_llc_test_checks.py 2018-10-26 03:30:28 +00:00
benchmark [benchmark] Disable exceptions in Microsoft STL 2018-11-06 15:57:59 +00:00
bugpoint
count
crosstool
docker [docker] Fix LLVM_EXTERNAL_PROJECTS cmake variable value 2018-07-24 18:34:13 +00:00
emacs Add fneg instruction to syntax highlighting lists 2018-11-13 19:50:38 +00:00
fpcmp
gdb-scripts [gdb] Fix SmallVector pretty printer after r337514 2018-07-23 21:33:51 +00:00
git
git-svn Make git-llvm python3 compatible again. Hopefully. :) 2018-11-16 23:59:23 +00:00
gn Add initial scaffolding for the GN build. 2018-11-17 02:21:53 +00:00
jedit
kate Add fneg instruction to syntax highlighting lists 2018-11-13 19:50:38 +00:00
lint
lit Fix some issues with LLDB's lit configuration files. 2018-11-19 15:12:34 +00:00
llvm-build Remove llvm-build's --configure-target-def-file. 2018-04-20 17:21:10 +00:00
llvm-lit
not [not] Improve error reporting consistency. 2018-11-09 01:17:22 +00:00
release Revert "Exclude wasm target from Windows packaging due to PR39448" 2018-11-09 22:05:51 +00:00
sanitizers Revert "UBSan blacklist workaround for bot timeouts" 2018-10-26 16:07:50 +00:00
testgen
textmate
unittest [unittests] Do not use llvm::sort in googlemock 2018-09-20 04:27:32 +00:00
valgrind
vim Add fneg instruction to syntax highlighting lists 2018-11-13 19:50:38 +00:00
vscode
yaml-bench Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
DSAclean.py
DSAextract.py
GenLibDeps.pl
GetRepositoryPath
GetSourceVersion
LLVMBuild.txt
UpdateCMakeLists.pl
abtest.py utils/abtest: Refactor and add bisection method 2018-09-07 17:08:44 +00:00
bisect
bisect-skip-count Document bisect-skip-count 2018-10-22 14:04:13 +00:00
bugpoint_gisel_reducer.py Add a utility to reduce GlobalISel tests 2018-01-23 19:47:10 +00:00
check-each-file
clang-parse-diagnostics-file
codegen-diff
collect_and_build_with_pgo.py [utils] collect_and_build_with_pgo.py: revert part already fixed in rL345461 2018-10-27 23:10:09 +00:00
countloc.sh
create_ladder_graph.py
demangle_tree.py Add a utility script to stress test the demangler. 2018-08-30 20:53:48 +00:00
extract_symbols.py Fix some user facing typos 2018-03-17 17:30:08 +00:00
extract_vplan.py [VPlan] Script to extract VPlan digraphs from log 2018-10-16 09:37:52 +00:00
findmisopt
findoptdiff
findsym.pl
getsrcs.sh
indirect_calls.py Remove a stale comment cut and pasted from another file. 2018-04-03 17:07:05 +00:00
lldbDataFormatters.py [utils] Update SmallVector lldb formatter for r337514 2018-11-06 18:52:30 +00:00
llvm-compilers-check
llvm-gisel-cov.py
llvm-native-gxx
llvm.grm
llvmdo
llvmgrep
prepare-code-coverage-artifact.py [Coverage] Apply filtered paths to summary 2018-10-11 04:00:51 +00:00
schedcover.py [MachineScheduler] Add itinerary to schedcover.py. Make default work in the command line filter 2018-03-27 04:26:39 +00:00
shuffle_fuzz.py
shuffle_select_fuzz_tester.py
sort_includes.py
unicode-case-fold.py Resubmit r325107 (case folding DJB hash) 2018-02-21 22:36:31 +00:00
update_analyze_test_checks.py [NFC] chmod +x utils/update_analyze_test_checks.py 2018-06-15 12:41:50 +00:00
update_cc_test_checks.py Fix LLVM IR check lines in utils/update_cc_test_checks.py 2018-03-14 17:47:07 +00:00
update_llc_test_checks.py Re-land r335297 "[X86] Implement more of x86-64 large and medium PIC code models" 2018-07-23 21:14:35 +00:00
update_mca_test_checks.py [llvm-mca][UpdateTestChecks] Don't try to align blocks that have already been subject to alignment in update_mca_test_checks.py 2018-10-29 13:24:20 +00:00
update_mir_test_checks.py update_mir_test_checks: Fix handling of IR input after r326284 2018-03-12 18:06:58 +00:00
update_test_checks.py [UpdateTestChecks] Remove unnecessary return from add_ir_checks 2018-04-05 09:30:42 +00:00
wciia.py