# -*- Python -*-

import os

# Setup config name.
config.name = 'XRay' + config.name_suffix

# Setup source root.
config.test_source_root = os.path.dirname(__file__)

# Setup default compiler flags use with -fxray-instrument option.
clang_xray_cflags = (['-fxray-instrument', config.target_cflags])

# If libc++ was used to build XRAY libraries, libc++ is needed. Fix applied
# to Linux only since -rpath may not be portable. This can be extended to
# other platforms.
if config.libcxx_used == "1" and config.host_os == "Linux":
  clang_xray_cflags = clang_xray_cflags + (['-L%s -lc++ -Wl,-rpath=%s'
                                          % (config.llvm_shlib_dir,
                                             config.llvm_shlib_dir)])

clang_xray_cxxflags = config.cxx_mode_flags + clang_xray_cflags

def build_invocation(compile_flags):
  return ' ' + ' '.join([config.clang] + compile_flags) + ' '

# Assume that llvm-xray is in the config.llvm_tools_dir.
llvm_xray = os.path.join(config.llvm_tools_dir, 'llvm-xray')

# Setup substitutions.
if config.host_os == "Linux":
  libdl_flag = "-ldl"
else:
  libdl_flag = ""

config.substitutions.append(
    ('%clang ', build_invocation([config.target_cflags])))
config.substitutions.append(
    ('%clangxx ',
     build_invocation(config.cxx_mode_flags + [config.target_cflags])))
config.substitutions.append(
    ('%clang_xray ', build_invocation(clang_xray_cflags)))
config.substitutions.append(
    ('%clangxx_xray', build_invocation(clang_xray_cxxflags)))
config.substitutions.append(
    ('%llvm_xray', llvm_xray))
config.substitutions.append(
    ('%xraylib',
        ('-lm -lpthread %s -lrt -L%s '
         '-Wl,-whole-archive -lclang_rt.xray%s -Wl,-no-whole-archive')
        % (libdl_flag, config.compiler_rt_libdir, config.target_suffix)))

# Default test suffixes.
config.suffixes = ['.c', '.cpp']

if config.host_os not in ['FreeBSD', 'Linux', 'NetBSD', 'OpenBSD']:
  config.unsupported = True
elif '64' not in config.host_arch:
  if 'arm' in config.host_arch:
    if '-mthumb' in config.target_cflags:
      config.unsupported = True
  else:
    config.unsupported = True
