@AUTO_GEN_COMMENT@

import os
import site

config.cxx_under_test           = "@CMAKE_CXX_COMPILER@"
config.project_obj_root         = "@CMAKE_BINARY_DIR@"
config.libcxxabi_hdr_root       = "@LIBCXXABI_HEADER_DIR@"
config.libcxxabi_src_root       = "@LIBCXXABI_SOURCE_DIR@"
config.libcxxabi_obj_root       = "@LIBCXXABI_BINARY_DIR@"
config.abi_library_root         = "@LIBCXXABI_LIBRARY_DIR@"
config.libcxx_src_root          = "@LIBCXXABI_LIBCXX_PATH@"
config.cxx_headers              = "@LIBCXXABI_LIBCXX_INCLUDES@"
config.libunwind_headers        = "@LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL@"
config.cxx_library_root         = "@LIBCXXABI_LIBCXX_LIBRARY_PATH@"
config.llvm_unwinder            = @LIBCXXABI_USE_LLVM_UNWINDER@
config.builtins_library         = "@LIBCXXABI_BUILTINS_LIBRARY@"
config.enable_threads           = @LIBCXXABI_ENABLE_THREADS@
config.use_sanitizer            = "@LLVM_USE_SANITIZER@"
config.sanitizer_library        = "@LIBCXXABI_SANITIZER_LIBRARY@"
config.enable_32bit             = @LIBCXXABI_BUILD_32_BITS@
config.target_info              = "@LIBCXXABI_TARGET_INFO@"
config.executor                 = "@LIBCXXABI_EXECUTOR@"
config.libcxxabi_shared         = @LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI@
config.enable_shared            = @LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX@
config.enable_exceptions        = @LIBCXXABI_ENABLE_EXCEPTIONS@
config.host_triple              = "@LLVM_HOST_TRIPLE@"
if "@TARGET_TRIPLE@":
    config.target_triple        = "@TARGET_TRIPLE@"
config.sysroot                  = "@LIBCXXABI_SYSROOT@"
config.gcc_toolchain            = "@LIBCXXABI_GCC_TOOLCHAIN@"
config.cxx_ext_threads          = @LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY@
config.enable_experimental      = False

config.pstl_src_root            = "@ParallelSTL_SOURCE_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None
config.pstl_obj_root            = "@ParallelSTL_BINARY_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None

# Code signing
config.llvm_codesign_identity   = "@LLVM_CODESIGNING_IDENTITY@"

site.addsitedir(os.path.join(config.libcxxabi_src_root, 'test'))
site.addsitedir(os.path.join(config.libcxx_src_root, 'utils'))

# name: The name of this test suite.
config.name = 'libc++abi'

# suffixes: A list of file extensions to treat as test files.
config.suffixes = ['.cpp', '.s']

# test_source_root: The root path where tests are located.
config.test_source_root = os.path.join(config.libcxxabi_src_root, 'test')

# Allow expanding substitutions that are based on other substitutions
config.recursiveExpansionLimit = 10

# Infer the test_exec_root from the build directory.
config.test_exec_root = os.path.join(config.libcxxabi_obj_root, 'test')

import libcxx.test.format
config.test_format = libcxx.test.format.CxxStandardLibraryTest()

lit_config.note('Using configuration variant: libcxxabi')
import libcxxabi.test.config
configuration = libcxxabi.test.config.Configuration(lit_config, config)
configuration.configure()
configuration.print_config_info()
