# -*- Python -*-

import os

def get_required_attr(config, attr_name):
  attr_value = getattr(config, attr_name, None)
  if not attr_value:
    lit.fatal("No attribute %r in test configuration! You may need to run "
              "tests from your build directory or add this attribute "
              "to lit.site.cfg " % attr_name)
  return attr_value

# Setup attributes common for all compiler-rt projects.
compiler_rt_src_root = get_required_attr(config, 'compiler_rt_src_root')
compiler_rt_lit_unit_cfg = os.path.join(compiler_rt_src_root, "lib",
                                        "lit.common.unit.cfg")
lit.load_config(config, compiler_rt_lit_unit_cfg)

# Setup config name.
config.name = 'AddressSanitizer-Unit'

# Setup test source and exec root. For unit tests, we define
# it as build directory with ASan unit tests.
asan_binary_dir = get_required_attr(config, "asan_binary_dir")
config.test_exec_root = os.path.join(asan_binary_dir, "tests")
config.test_source_root = config.test_exec_root
