# Build for the minimal undefined behavior sanitizer runtime support library.

set(UBSAN_MINIMAL_SOURCES
  ubsan_minimal_handlers.cc
  )

include_directories(..)

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

set(UBSAN_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})

set(UBSAN_DYNAMIC_LIBS ${SANITIZER_COMMON_LINK_LIBS})

add_compiler_rt_component(ubsan-minimal)

# Common parts of minimal UBSan runtime.
add_compiler_rt_object_libraries(RTUbsan_minimal
  OS ${SANITIZER_COMMON_SUPPORTED_OS}
  ARCHS ${UBSAN_COMMON_SUPPORTED_ARCH}
  SOURCES ${UBSAN_MINIMAL_SOURCES} CFLAGS ${UBSAN_CFLAGS})


if(COMPILER_RT_HAS_UBSAN_MINIMAL)
  # Standalone minimal UBSan runtimes.
  add_compiler_rt_runtime(clang_rt.ubsan_minimal
    STATIC
    OS ${SANITIZER_COMMON_SUPPORTED_OS}
    ARCHS ${UBSAN_SUPPORTED_ARCH}
    OBJECT_LIBS RTUbsan_minimal
    CFLAGS ${UBSAN_CFLAGS}
    PARENT_TARGET ubsan-minimal)

  add_compiler_rt_runtime(clang_rt.ubsan_minimal
    SHARED
    OS ${SANITIZER_COMMON_SUPPORTED_OS}
    ARCHS ${UBSAN_SUPPORTED_ARCH}
    OBJECT_LIBS RTUbsan_minimal
    CFLAGS ${UBSAN_CFLAGS}
    LINK_FLAGS ${UBSAN_LINK_FLAGS}
    LINK_LIBS ${UBSAN_DYNAMIC_LIBS}
    PARENT_TARGET ubsan-minimal)

  if (SANITIZER_USE_SYMBOLS AND NOT APPLE)
    set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH})
    list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686)
    add_sanitizer_rt_symbols(clang_rt.ubsan_minimal
      ARCHS ${ARCHS_FOR_SYMBOLS}
      PARENT_TARGET ubsan-minimal
      EXTRA ubsan.syms.extra)
  endif()
endif()
