# CMakeLists.txt file for unit testing Archer runtime library.
include(CheckFunctionExists)
include(CheckLibraryExists)

# When using libgcc, -latomic may be needed for atomics
# (but when using compiler-rt, the atomics will be built-in)
# Note: we can not check for __atomic_load because clang treats it
# as special built-in and that breaks CMake checks
check_function_exists(__atomic_load_1 LIBARCHER_HAVE_BUILTIN_ATOMIC)
if(NOT LIBARCHER_HAVE_BUILTIN_ATOMIC)
  check_library_exists(atomic __atomic_load_1 "" LIBARCHER_HAVE_LIBATOMIC)
else()
  # not needed
  set(LIBARCHER_HAVE_LIBATOMIC 0)
endif()

set(LIBARCHER_TEST_PATH ${CMAKE_CURRENT_SOURCE_DIR})

set(LIBARCHER_TEST_FLAGS "" CACHE STRING
  "Extra compiler flags to send to the test compiler.")

macro(pythonize_bool var)
  if (${var})
    set(${var} True)
  else()
    set(${var} False)
  endif()
endmacro()

pythonize_bool(LIBARCHER_HAVE_LIBATOMIC)
pythonize_bool(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS)

set(ARCHER_TSAN_TEST_DEPENDENCE "")
if(TARGET tsan)
  set(ARCHER_TSAN_TEST_DEPENDENCE tsan)
endif()

add_openmp_testsuite(check-libarcher "Running libarcher tests" ${CMAKE_CURRENT_BINARY_DIR} 
                     DEPENDS archer omp ${ARCHER_TSAN_TEST_DEPENDENCE})

# Configure the lit.site.cfg.in file
set(AUTO_GEN_COMMENT "## Autogenerated by libarcher configuration.\n# Do not edit!")
configure_file(lit.site.cfg.in lit.site.cfg @ONLY)
