set(LLVM_LINK_COMPONENTS
  AsmParser
  Core
  SandboxIR
  Support)

add_benchmark(DummyYAML DummyYAML.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(xxhash xxhash.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(GetIntrinsicForClangBuiltin GetIntrinsicForClangBuiltin.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(FormatVariadicBM FormatVariadicBM.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(GetIntrinsicInfoTableEntriesBM GetIntrinsicInfoTableEntriesBM.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(SandboxIRBench SandboxIRBench.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(MustacheBench Mustache.cpp PARTIAL_SOURCES_INTENDED)

add_benchmark(RuntimeLibcallsBench RuntimeLibcalls.cpp PARTIAL_SOURCES_INTENDED)

if(NOT LLVM_TOOL_LLVM_DRIVER_BUILD)
  # TODO: Check if the tools are in LLVM_DISTRIBUTION_COMPONENTS with
  # the driver build. Also support the driver build by invoking the
  # tools through llvm-driver
  get_host_tool_path(llvm-nm LLVM_NM llvm_nm_exe llvm_nm_target)
  get_host_tool_path(llc LLC llc_exe llc_target)

  if(${llc_exe} AND ${llvm_nm_exe})
    # Extract the list of symbols in a random utility as sample data.
    set(SYMBOL_TEST_DATA_FILE "sample_symbol_list.txt")
    set(SYMBOL_TEST_DATA_SOURCE_BINARY ${llc_exe})

    add_custom_command(OUTPUT ${SYMBOL_TEST_DATA_FILE}
      COMMAND ${llvm_nm_exe} --no-demangle --no-sort
      --format=just-symbols
      ${SYMBOL_TEST_DATA_SOURCE_BINARY} > ${SYMBOL_TEST_DATA_FILE}
     DEPENDS ${llvm_nm_target} ${llc_target})

    add_custom_target(generate-runtime-libcalls-sample-symbol-list
                      DEPENDS ${SYMBOL_TEST_DATA_FILE})

    add_dependencies(RuntimeLibcallsBench
                     generate-runtime-libcalls-sample-symbol-list)
    target_compile_definitions(RuntimeLibcallsBench PRIVATE
      -DSYMBOL_TEST_DATA_FILE="${CMAKE_CURRENT_BINARY_DIR}/${SYMBOL_TEST_DATA_FILE}")
  endif()
endif()
