Skip to content

Commit

Permalink
[libc++] NFC: Simplify substitutions by using lit recursive substitut…
Browse files Browse the repository at this point in the history
…ions

Since lit supports expanding substitutions recursively, we can define
substitutions in terms of other substitutions. This allows us to simplify
how libc++ substitutions are defined.

This doesn't change the substitutions at all, it only makes them simpler
to define.
  • Loading branch information
ldionne committed Mar 27, 2020
1 parent f4f4a8b commit cd7f975
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 26 deletions.
2 changes: 2 additions & 0 deletions libcxx/test/lit.cfg
Expand Up @@ -53,3 +53,5 @@ configuration = config_module.Configuration(lit_config, config)
configuration.configure()
configuration.print_config_info()
config.test_format = configuration.get_test_format()

lit_config.recursiveExpansionLimit = 10
39 changes: 14 additions & 25 deletions libcxx/utils/libcxx/test/config.py
Expand Up @@ -1039,35 +1039,26 @@ def configure_substitutions(self):
if self.target_info.is_darwin():
# Do not pass DYLD_LIBRARY_PATH to the compiler, linker, etc. as
# these tools are not meant to exercise the just-built libraries.
tool_env += 'env DYLD_LIBRARY_PATH="" '
tool_env += 'env DYLD_LIBRARY_PATH=""'

sub = self.config.substitutions
cxx_path = tool_env + pipes.quote(self.cxx.path)
# Configure compiler substitutions
sub.append(('%{cxx}', cxx_path))
sub.append(('%{cxx}', '{} {}'.format(tool_env, pipes.quote(self.cxx.path))))
sub.append(('%{libcxx_src_root}', self.libcxx_src_root))
# Configure flags substitutions
flags_str = ' '.join([pipes.quote(f) for f in self.cxx.flags])
compile_flags_str = ' '.join([pipes.quote(f) for f in self.cxx.compile_flags])
link_flags_str = ' '.join([pipes.quote(f) for f in self.cxx.link_flags])
all_flags = '%s %s %s' % (flags_str, compile_flags_str, link_flags_str)
sub.append(('%{flags}', flags_str))
sub.append(('%{compile_flags}', compile_flags_str))
sub.append(('%{link_flags}', link_flags_str))
sub.append(('%{flags}', ' '.join(map(pipes.quote, self.cxx.flags))))
sub.append(('%{compile_flags}', ' '.join(map(pipes.quote, self.cxx.compile_flags))))
sub.append(('%{link_flags}', ' '.join(map(pipes.quote, self.cxx.link_flags))))
if self.cxx.isVerifySupported():
verify_str = ' ' + ' '.join(self.cxx.verify_flags) + ' '
sub.append(('%{verify}', verify_str))
# Add compile and link shortcuts
compile_str = (cxx_path + ' -o %t.o %s -c ' + flags_str
+ ' ' + compile_flags_str)
build_str = cxx_path + ' -o %t.exe %s ' + all_flags
sub.append(('%{verify}', ' '.join(self.cxx.verify_flags)))
# Add compile and build shortcuts
sub.append(('%{compile}', '%{cxx} -o %t.o %s -c %{flags} %{compile_flags}'))
sub.append(('%{build}', '%{cxx} -o %t.exe %s %{flags} %{compile_flags} %{link_flags}'))
if self.cxx.use_modules:
sub.append(('%{build_module}', build_str))
sub.append(('%{build_module}', '%{build}'))
elif self.cxx.modules_flags is not None:
modules_str = ' '.join(self.cxx.modules_flags) + ' '
sub.append(('%{build_module}', build_str + ' ' + modules_str))
sub.append(('%{compile}', compile_str))
sub.append(('%{build}', build_str))
sub.append(('%{build_module}', '%{{build}} {}'.format(' '.join(self.cxx.modules_flags))))

# Configure exec prefix substitutions.
# Configure run env substitution.
codesign_ident = self.get_lit_conf('llvm_codesign_identity', '')
Expand All @@ -1077,13 +1068,11 @@ def configure_substitutions(self):
'--dependencies %%file_dependencies --env %s -- ' % \
(pipes.quote(sys.executable), pipes.quote(run_py),
codesign_ident, env_vars)
run_str = exec_str + '%t.exe'
sub.append(('%{exec}', exec_str))
sub.append(('%{run}', run_str))
sub.append(('%{run}', '%{exec} %t.exe'))
# Configure not program substitutions
not_py = os.path.join(self.libcxx_src_root, 'utils', 'not.py')
not_str = '%s %s ' % (pipes.quote(sys.executable), pipes.quote(not_py))
sub.append(('%{not} ', not_str))
sub.append(('%{not}', '{} {}'.format(pipes.quote(sys.executable), pipes.quote(not_py))))
if self.get_lit_conf('libcxx_gdb'):
sub.append(('%{libcxx_gdb}', self.get_lit_conf('libcxx_gdb')))

Expand Down
3 changes: 2 additions & 1 deletion libcxx/utils/libcxx/test/format.py
Expand Up @@ -124,7 +124,8 @@ def _execute(self, test, lit_config):
substitutions = lit.TestRunner.getDefaultSubstitutions(test, tmpDir,
tmpBase)
substitutions.append(('%file_dependencies', ' '.join(data_files)))
script = lit.TestRunner.applySubstitutions(script, substitutions)
script = lit.TestRunner.applySubstitutions(script, substitutions,
recursion_limit=lit_config.recursiveExpansionLimit)

test_cxx = copy.deepcopy(self.cxx)
if is_fail_test:
Expand Down

0 comments on commit cd7f975

Please sign in to comment.