#
# Configuration file for running the libunwind tests against a libc++ shared library
# into which the unwinder was merged.
#

lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')

compile_flags = []
link_flags = []

if @LIBUNWIND_ENABLE_CET@:
    compile_flags.append('-fcf-protection=full')

if '@CMAKE_SYSTEM_NAME@' == 'Linux':
    link_flags.append('-Wl,--export-dynamic')

# Stack unwinding tests need unwinding tables and these are not generated by default on all targets.
compile_flags.append('-funwind-tables')

local_sysroot = '@CMAKE_OSX_SYSROOT@' or '@CMAKE_SYSROOT@'
config.substitutions.append(('%{flags}',
    '-isysroot {}'.format(local_sysroot) if local_sysroot else ''
))
config.substitutions.append(('%{compile_flags}',
    '-nostdinc++ -I %{{include}} {}'.format(' '.join(compile_flags))
))
config.substitutions.append(('%{link_flags}',
    '-L %{{lib}} -Wl,-rpath,%{{lib}} -lc++ -ldl {}'.format(' '.join(link_flags))
))
config.substitutions.append(('%{exec}',
    '%{executor} --execdir %T -- '
))

import os, site
site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils'))
import libcxx.test.params, libcxx.test.config
libcxx.test.config.configure(
    libcxx.test.params.DEFAULT_PARAMETERS,
    libcxx.test.features.DEFAULT_FEATURES,
    config,
    lit_config
)
