diff options
Diffstat (limited to 'lld/test/lit.cfg')
-rw-r--r-- | lld/test/lit.cfg | 104 |
1 files changed, 88 insertions, 16 deletions
diff --git a/lld/test/lit.cfg b/lld/test/lit.cfg index e27d0903d46..2a6cdd6341e 100644 --- a/lld/test/lit.cfg +++ b/lld/test/lit.cfg @@ -55,23 +55,95 @@ config.excludes = ['Inputs'] # test_source_root: The root path where tests are located. config.test_source_root = os.path.dirname(__file__) -config.test_exec_root = os.path.join(config.lld_obj_root, 'test') +# test_exec_root: The root path where tests should be run. +lld_obj_root = getattr(config, 'lld_obj_root', None) +if lld_obj_root is not None: + config.test_exec_root = os.path.join(lld_obj_root, 'test') +# Set llvm_{src,obj}_root for use by others. +config.llvm_src_root = getattr(config, 'llvm_src_root', None) +config.llvm_obj_root = getattr(config, 'llvm_obj_root', None) # Tweak the PATH to include the tools dir and the scripts dir. -path = os.path.pathsep.join((config.lld_tools_dir, config.llvm_tools_dir, config.environment['PATH'])) - -config.environment['PATH'] = path - -path = os.path.pathsep.join((config.lld_libs_dir, config.llvm_libs_dir, - config.environment.get('LD_LIBRARY_PATH',''))) -config.environment['LD_LIBRARY_PATH'] = path - -# Propagate LLVM_SRC_ROOT into the environment. -config.environment['LLVM_SRC_ROOT'] = config.llvm_src_root +if lld_obj_root is not None: + lld_tools_dir = getattr(config, 'lld_tools_dir', None) + if not lld_tools_dir: + lit_config.fatal('No LLD tools dir set!') + llvm_tools_dir = getattr(config, 'llvm_tools_dir', None) + if not llvm_tools_dir: + lit_config.fatal('No LLVM tools dir set!') + path = os.path.pathsep.join((lld_tools_dir, llvm_tools_dir, config.environment['PATH'])) + path = os.path.pathsep.join((os.path.join(getattr(config, 'llvm_src_root', None),'test','Scripts'),path)) + + config.environment['PATH'] = path + + lld_libs_dir = getattr(config, 'lld_libs_dir', None) + if not lld_libs_dir: + lit_config.fatal('No LLD libs dir set!') + llvm_libs_dir = getattr(config, 'llvm_libs_dir', None) + if not llvm_libs_dir: + lit_config.fatal('No LLVM libs dir set!') + path = os.path.pathsep.join((lld_libs_dir, llvm_libs_dir, + config.environment.get('LD_LIBRARY_PATH',''))) + config.environment['LD_LIBRARY_PATH'] = path + + # Propagate LLVM_SRC_ROOT into the environment. + config.environment['LLVM_SRC_ROOT'] = getattr(config, 'llvm_src_root', '') + + # Propagate PYTHON_EXECUTABLE into the environment + config.environment['PYTHON_EXECUTABLE'] = getattr(config, 'python_executable', + '') +### -# Propagate PYTHON_EXECUTABLE into the environment -config.environment['PYTHON_EXECUTABLE'] = sys.executable +# Check that the object root is known. +if config.test_exec_root is None: + # Otherwise, we haven't loaded the site specific configuration (the user is + # probably trying to run on a test file directly, and either the site + # configuration hasn't been created by the build system, or we are in an + # out-of-tree build situation). + + # Check for 'lld_site_config' user parameter, and use that if available. + site_cfg = lit_config.params.get('lld_site_config', None) + if site_cfg and os.path.exists(site_cfg): + lit_config.load_config(config, site_cfg) + raise SystemExit + + # Try to detect the situation where we are using an out-of-tree build by + # looking for 'llvm-config'. + # + # FIXME: I debated (i.e., wrote and threw away) adding logic to + # automagically generate the lit.site.cfg if we are in some kind of fresh + # build situation. This means knowing how to invoke the build system though, + # and I decided it was too much magic. We should solve this by just having + # the .cfg files generated during the configuration step. + + llvm_config = lit.util.which('llvm-config', config.environment['PATH']) + if not llvm_config: + lit_config.fatal('No site specific configuration available!') + + # Get the source and object roots. + llvm_src_root = subprocess.check_output(['llvm-config', '--src-root']).strip() + llvm_obj_root = subprocess.check_output(['llvm-config', '--obj-root']).strip() + lld_src_root = os.path.join(llvm_src_root, "tools", "lld") + lld_obj_root = os.path.join(llvm_obj_root, "tools", "lld") + + # Validate that we got a tree which points to here, using the standard + # tools/lld layout. + this_src_root = os.path.dirname(config.test_source_root) + if os.path.realpath(lld_src_root) != os.path.realpath(this_src_root): + lit_config.fatal('No site specific configuration available!') + + # Check that the site specific configuration exists. + site_cfg = os.path.join(lld_obj_root, 'test', 'lit.site.cfg') + if not os.path.exists(site_cfg): + lit_config.fatal( + 'No site specific configuration available! You may need to ' + 'run "make test" in your lld build directory.') + + # Okay, that worked. Notify the user of the automagic, and reconfigure. + lit_config.note('using out-of-tree build at %r' % lld_obj_root) + lit_config.load_config(config, site_cfg) + raise SystemExit # For each occurrence of a lld tool name as its own word, replace it # with the full path to the build directory holding that tool. This @@ -113,7 +185,7 @@ for pattern in tool_patterns: if not tool_path: # Warn, but still provide a substitution. lit_config.note('Did not find ' + tool_name + ' in ' + path) - tool_path = config.llvm_tools_dir + '/' + tool_name + tool_path = llvm_tools_dir + '/' + tool_name config.substitutions.append((pattern, tool_pipe + tool_path)) # Add site-specific substitutions. @@ -155,11 +227,11 @@ if platform.system() not in ['Windows']: import subprocess try: llvm_config_cmd = \ - subprocess.Popen([os.path.join(config.llvm_tools_dir, 'llvm-config'), + subprocess.Popen([os.path.join(llvm_tools_dir, 'llvm-config'), '--build-mode', '--assertion-mode', '--targets-built'], stdout = subprocess.PIPE) except OSError as why: - print("Could not find llvm-config in " + config.llvm_tools_dir) + print("Could not find llvm-config in " + llvm_tools_dir) exit(42) llvm_config_output = llvm_config_cmd.stdout.read().decode('utf_8') |