# Build for the EfficiencySanitizer runtime support library.

add_custom_target(esan)
set_target_properties(esan PROPERTIES FOLDER "Compiler-RT Misc")

set(ESAN_RTL_CFLAGS ${SANITIZER_COMMON_CFLAGS})
append_rtti_flag(OFF ESAN_RTL_CFLAGS)

include_directories(..)

set(ESAN_SOURCES
  esan.cpp
  esan_flags.cpp
  esan_interface.cpp
  esan_interceptors.cpp
  esan_linux.cpp
  esan_sideline_linux.cpp
  cache_frag.cpp
  working_set.cpp
  working_set_posix.cpp)

foreach (arch ${ESAN_SUPPORTED_ARCH})
  add_compiler_rt_runtime(clang_rt.esan
    STATIC
    ARCHS ${arch}
    SOURCES ${ESAN_SOURCES}
            $<TARGET_OBJECTS:RTInterception.${arch}>
            $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
            $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
    CFLAGS ${ESAN_RTL_CFLAGS})
  add_sanitizer_rt_symbols(clang_rt.esan
    ARCHS ${arch}
    EXTRA esan.syms.extra)
  add_dependencies(esan
    clang_rt.esan-${arch}
    clang_rt.esan-${arch}-symbols)
endforeach()

add_dependencies(compiler-rt esan)

if (COMPILER_RT_INCLUDE_TESTS)
  # TODO(bruening): add tests via add_subdirectory(tests)
endif()
