@AUTO_GEN_COMMENT@

@SERIALIZED_LIT_PARAMS@

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.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.host_triple              = "@LLVM_HOST_TRIPLE@"
config.sysroot                  = "@LIBCXXABI_SYSROOT@"
config.gcc_toolchain            = "@LIBCXXABI_GCC_TOOLCHAIN@"
config.cxx_ext_threads          = @LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY@

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()
