# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#######################################
# block_bloom_filter_proto
#######################################

PROTOBUF_GENERATE_CPP(
  BLOCK_BLOOM_FILTER_PROTO_SRCS BLOCK_BLOOM_FILTER_PROTO_HDRS BLOCK_BLOOM_FILTER_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES block_bloom_filter.proto)
ADD_EXPORTABLE_LIBRARY(block_bloom_filter_proto
  SRCS ${BLOCK_BLOOM_FILTER_PROTO_SRCS}
  DEPS hash_proto pb_util_proto protobuf
  NONLINK_DEPS ${BLOCK_BLOOM_FILTER_PROTO_TGTS})

#######################################
# util_compression_proto
#######################################

PROTOBUF_GENERATE_CPP(
  UTIL_COMPRESSION_PROTO_SRCS UTIL_COMPRESSION_PROTO_HDRS UTIL_COMPRESSION_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES compression/compression.proto)
ADD_EXPORTABLE_LIBRARY(util_compression_proto
  SRCS ${UTIL_COMPRESSION_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${UTIL_COMPRESSION_PROTO_TGTS})

#######################################
# hash_proto
#######################################

PROTOBUF_GENERATE_CPP(
  HASH_PROTO_SRCS HASH_PROTO_HDRS HASH_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES hash.proto)
ADD_EXPORTABLE_LIBRARY(hash_proto
  SRCS ${HASH_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${HASH_PROTO_TGTS})

#######################################
# histogram_proto
#######################################

PROTOBUF_GENERATE_CPP(
  HISTOGRAM_PROTO_SRCS HISTOGRAM_PROTO_HDRS HISTOGRAM_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES histogram.proto)
ADD_EXPORTABLE_LIBRARY(histogram_proto
  SRCS ${HISTOGRAM_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${HISTOGRAM_PROTO_TGTS})

#######################################
# maintenance_manager_proto
#######################################

PROTOBUF_GENERATE_CPP(
  MAINTENANCE_MANAGER_PROTO_SRCS MAINTENANCE_MANAGER_PROTO_HDRS MAINTENANCE_MANAGER_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES maintenance_manager.proto)
ADD_EXPORTABLE_LIBRARY(maintenance_manager_proto
  SRCS ${MAINTENANCE_MANAGER_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${MAINTENANCE_MANAGER_PROTO_TGTS})

#######################################
# mem_tracker_proto
#######################################

PROTOBUF_GENERATE_CPP(
  MEM_TRACKER_PROTO_SRCS MEM_TRACKER_PROTO_HDRS MEM_TRACKER_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES mem_tracker.proto)
ADD_EXPORTABLE_LIBRARY(mem_tracker_proto
  SRCS ${MEM_TRACKER_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${MEM_TRACKER_PROTO_TGTS})

#######################################
# pb_util_proto
#######################################

PROTOBUF_GENERATE_CPP(
  PB_UTIL_PROTO_SRCS PB_UTIL_PROTO_HDRS PB_UTIL_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES pb_util.proto)
ADD_EXPORTABLE_LIBRARY(pb_util_proto
  SRCS ${PB_UTIL_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${PB_UTIL_PROTO_TGTS})

#######################################
# version_info_proto
#######################################

PROTOBUF_GENERATE_CPP(
  VERSION_INFO_PROTO_SRCS VERSION_INFO_PROTO_HDRS VERSION_INFO_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES version_info.proto)
ADD_EXPORTABLE_LIBRARY(version_info_proto
  SRCS ${VERSION_INFO_PROTO_SRCS}
  DEPS protobuf
  NONLINK_DEPS ${VERSION_INFO_PROTO_TGTS})

############################################################
# Version stamp
############################################################

# Unlike CMAKE_CURRENT_BINARY_DIR, CMAKE_BINARY_DIR is always the root of
# the build directory.
set(VERSION_STAMP_FILE ${CMAKE_BINARY_DIR}/src/kudu/generated/version_defines.h)

list(APPEND GEN_VERSION_INFO_COMMAND "${BUILD_SUPPORT_DIR}/gen_version_info.py")
list(APPEND GEN_VERSION_INFO_COMMAND "--version=${KUDU_VERSION_NUMBER}")
list(APPEND GEN_VERSION_INFO_COMMAND "--build-type=${CMAKE_BUILD_TYPE}")
if(KUDU_GIT_HASH)
  message(STATUS "Provided git hash: ${KUDU_GIT_HASH}")
  list(APPEND GEN_VERSION_INFO_COMMAND "--git-hash=${KUDU_GIT_HASH}")
endif()
list(APPEND GEN_VERSION_INFO_COMMAND "${VERSION_STAMP_FILE}")
add_custom_target(gen_version_info
    COMMAND ${GEN_VERSION_INFO_COMMAND}
    BYPRODUCTS "${VERSION_STAMP_FILE}")

#######################################
# kudu_util
#######################################

if (APPLE)
  set(SEMAPHORE_CC "semaphore_macosx.cc")
else ()
  set(SEMAPHORE_CC "semaphore.cc")
endif()

set(UTIL_SRCS
  async_logger.cc
  atomic.cc
  bitmap.cc
  block_cache_metrics.cc
  block_bloom_filter.cc
  bloom_filter.cc
  cache.cc
  char_util.cc
  coding.cc
  condition_variable.cc
  cow_object.cc
  crc.cc
  debug-util.cc
  decimal_util.cc
  debug/trace_event_impl.cc
  debug/trace_event_impl_constants.cc
  debug/trace_event_synthetic_delay.cc
  debug/unwind_safeness.cc
  easy_json.cc
  env.cc env_posix.cc env_util.cc
  errno.cc
  faststring.cc
  fault_injection.cc
  file_cache.cc
  file_cache_metrics.cc
  flags.cc
  flag_tags.cc
  flag_validators.cc
  group_varint.cc
  pstack_watcher.cc
  hdr_histogram.cc
  hexdump.cc
  init.cc
  jsonreader.cc
  jsonwriter.cc
  kernel_stack_watchdog.cc
  locks.cc
  logging.cc
  maintenance_manager.cc
  maintenance_manager_metrics.cc
  malloc.cc
  memcmpable_varint.cc
  memory/arena.cc
  memory/memory.cc
  memory/overwrite.cc
  mem_tracker.cc
  metrics.cc
  minidump.cc
  monotime.cc
  mutex.cc
  net/dns_resolver.cc
  net/net_util.cc
  net/sockaddr.cc
  net/socket.cc
  nvm_cache.cc
  oid_generator.cc
  once.cc
  openssl_util.cc
  os-util.cc
  path_util.cc
  pb_util.cc
  pb_util-internal.cc
  process_memory.cc
  prometheus_writer.cc
  random_util.cc
  rolling_log.cc
  rw_mutex.cc
  rwc_lock.cc
  ${SEMAPHORE_CC}
  signal.cc
  slice.cc
  spinlock_profiling.cc
  status.cc
  status_callback.cc
  string_case.cc
  striped64.cc
  subprocess.cc
  test_graph.cc
  test_util_prod.cc
  thread.cc
  threadlocal.cc
  threadpool.cc
  thread_restrictions.cc
  throttler.cc
  trace.cc
  trace_metrics.cc
  user.cc
  url-coding.cc
  version_info.cc
  version_util.cc
  web_callback_registry.cc
  website_util.cc
  yamlreader.cc
  zlib.cc
)

# overwrite.cc contains a single function which would be a hot spot in
# debug builds. It's separated into a separate file so it can be
# optimized regardless of the default optimization options.
set_source_files_properties(memory/overwrite.cc PROPERTIES COMPILE_FLAGS "-O3")

# Detect AVX2 support
set(AVX2_CMD "echo | ${CMAKE_CXX_COMPILER} -mavx2 -dM -E - | awk '$2 == \"__AVX2__\" { print $3 }'")
execute_process(
  COMMAND bash -c ${AVX2_CMD}
  OUTPUT_VARIABLE AVX2_SUPPORT
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

# block_bloom_filter_avx2.cc uses AVX2 operations.
if (AVX2_SUPPORT)
  list(APPEND UTIL_SRCS block_bloom_filter_avx2.cc)
  set_source_files_properties(block_bloom_filter_avx2.cc PROPERTIES COMPILE_FLAGS "-mavx2")
  # block_bloom_filter.cc is not compiled explicitly with AVX2 instructions(-mavx2) but it needs
  # to know at compile time whether AVX2 support is available, hence the custom definition
  # instead of relying on __AVX2__ defined by compiler with -mavx2.
  set_source_files_properties(block_bloom_filter_avx2.cc block_bloom_filter.cc
                              PROPERTIES COMPILE_DEFINITIONS "USE_AVX2=1")
  message("Compiler supports AVX2")
else()
  message("Compiler does not support AVX2")
endif()

set(UTIL_LIBS
  block_bloom_filter_proto
  crcutil
  gflags
  glog
  gutil
  hash_proto
  histogram_proto
  libev
  maintenance_manager_proto
  mem_tracker_proto
  pb_util_proto
  protobuf
  openssl_crypto
  openssl_ssl
  version_info_proto
  yaml
  zlib)

if(NOT APPLE)
  set(UTIL_LIBS
    ${UTIL_LIBS}
    breakpad_client
    dl
    rt)
endif()

# We use MallocExtension, but not in the exported version of the library.
set(EXPORTED_UTIL_LIBS ${UTIL_LIBS})
if(${KUDU_TCMALLOC_AVAILABLE})
  list(APPEND UTIL_LIBS tcmalloc)
endif()

ADD_EXPORTABLE_LIBRARY(kudu_util
  SRCS ${UTIL_SRCS}
  DEPS ${UTIL_LIBS}
  NONLINK_DEPS gen_version_info
  EXPORTED_DEPS ${EXPORTED_UTIL_LIBS})

#######################################
# kudu_util_compression
#######################################
set(UTIL_COMPRESSION_SRCS
  compression/compression_codec.cc)
set(UTIL_COMPRESSION_LIBS
  kudu_util
  util_compression_proto
  glog
  gutil
  lz4
  snappy
  zlib)

ADD_EXPORTABLE_LIBRARY(kudu_util_compression
  SRCS ${UTIL_COMPRESSION_SRCS}
  DEPS ${UTIL_COMPRESSION_LIBS})
# Define LZ4_DISABLE_DEPRECATE_WARNINGS to mute warnings like:
# "'int LZ4_compress(const char*, char*, int)' is deprecated".
target_compile_definitions(kudu_util_compression PUBLIC LZ4_DISABLE_DEPRECATE_WARNINGS)
target_compile_definitions(kudu_util_compression_exported PUBLIC LZ4_DISABLE_DEPRECATE_WARNINGS)

#######################################
# kudu_curl_util
#######################################
add_library(kudu_curl_util
  curl_util.cc)
target_link_libraries(kudu_curl_util
  security
  curl
  glog
  gutil)

#######################################
# kudu_jwt_util
#######################################
add_library(kudu_jwt_util
  jwt-util.cc)
target_link_libraries(kudu_jwt_util
  gutil
  security
  kudu_curl_util
  kudu_util)

#######################################
# kudu_cloud_util
#######################################
add_library(kudu_cloud_util
  cloud/instance_detector.cc
  cloud/instance_metadata.cc)
target_link_libraries(kudu_cloud_util
  kudu_curl_util)

# See the comment in sanitizer_options.cc for details on this library's usage.
# The top-level CMakeLists sets a ${SANITIZER_OPTIONS_OVERRIDE} variable which
# should be linked first into all Kudu binaries.

#######################################
# sanitizer_options
#######################################
add_library(sanitizer_options STATIC sanitizer_options.cc)
target_link_libraries(sanitizer_options gutil)
if ("${KUDU_USE_ASAN}" OR "${KUDU_USE_TSAN}" OR "${KUDU_USE_UBSAN}")
  # By default the sanitizers use addr2line utility to symbolize reports.
  # llvm-symbolizer is faster, consumes less memory and produces much better reports.
  # We set KUDU_EXTERNAL_SYMBOLIZER_PATH which is used in sanitizer_options.cc
  # to set the default external_symbolizer_path.
  SET(KUDU_LLVM_SYMBOLIZER_PATH ${THIRDPARTY_INSTALL_UNINSTRUMENTED_DIR}/bin/llvm-symbolizer)
  if (EXISTS ${KUDU_LLVM_SYMBOLIZER_PATH})
    target_compile_definitions(sanitizer_options PRIVATE KUDU_EXTERNAL_SYMBOLIZER_PATH=${KUDU_LLVM_SYMBOLIZER_PATH})
  else()
    message(SEND_ERROR
      "Could not find llvm-symbolizer required for sanitizer builds at ${KUDU_LLVM_SYMBOLIZER_PATH}")
  endif()
endif()

#######################################
# kudu_test_util
#######################################

# Used by mini-cluster, so must be built even when NO_TESTS=0.
add_library(kudu_test_util
  test_util.cc)
target_link_libraries(kudu_test_util
  gflags
  glog
  gmock
  gtest
  kudu_util)

#######################################
# kudu_test_main
#######################################
if(NOT NO_TESTS)
  add_library(kudu_test_main
    test_main.cc)
  target_link_libraries(kudu_test_main
    ${KRB5_REALM_OVERRIDE}
    gflags
    glog
    gmock
    gtest
    kudu_util
    kudu_test_util)

  if(NOT APPLE)
    target_link_libraries(kudu_test_main
      dl
      rt)
  endif()
endif()

#######################################
# protoc-gen-insertions
#######################################

add_executable(protoc-gen-insertions protoc-gen-insertions.cc)
target_link_libraries(protoc-gen-insertions gutil protobuf protoc ${KUDU_BASE_LIBS})

#######################################
# Unit tests
#######################################

SET_KUDU_TEST_LINK_LIBS(kudu_util gutil)
ADD_KUDU_TEST(async_util-test)
ADD_KUDU_TEST(atomic-test)
ADD_KUDU_TEST(bit-util-test)
ADD_KUDU_TEST(bitmap-test)
ADD_KUDU_TEST(bitset-test)
ADD_KUDU_TEST(blocking_queue-test)
ADD_KUDU_TEST(block_bloom_filter-test)
ADD_KUDU_TEST(bloom_filter-test)
ADD_KUDU_TEST(cache-bench RUN_SERIAL true)
ADD_KUDU_TEST(cache-test)
ADD_KUDU_TEST(char_util-test
  DATA_FILES testdata/char_truncate_utf8.txt testdata/char_truncate_ascii.txt)
ADD_KUDU_TEST(countdown_latch-test)
ADD_KUDU_TEST(crc-test RUN_SERIAL true) # has a benchmark
ADD_KUDU_TEST(debug-util-test)
ADD_KUDU_TEST(decimal_util-test)
ADD_KUDU_TEST(easy_json-test)
ADD_KUDU_TEST(env-test LABELS no_tsan)
ADD_KUDU_TEST(env_util-test)
ADD_KUDU_TEST(errno-test)

# There's a move in faststring-test.cc that looks like this:
#
#   f1 = std::move(f1);
#
# Self-moves are generally undesirable, and Clang warns about them via the
# -Wself-move flag. In this particular case, we're explicitly testing self-move
# behavior, so we don't want any warnings.
#
# Unfortunately, if we disable -Wself-move via clang diagnostic pragmas, we'll
# wind up triggering gcc's -Wunknown-pragmas warning. And due to a long-standing
# bug[1], we can't disable -Wunknown-pragmas via GCC diagnostic pragmas. So we
# must disable the warning for the entirety of the compilation unit.
#
# 1. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431
if("${COMPILER_FAMILY}" STREQUAL "clang")
  set_source_files_properties(faststring-test.cc PROPERTIES COMPILE_FLAGS
    "-Wno-self-move")
endif()
ADD_KUDU_TEST(faststring-test)

ADD_KUDU_TEST(file_cache-test)
ADD_KUDU_TEST(file_cache-stress-test RUN_SERIAL true)
ADD_KUDU_TEST(flag_tags-test)
ADD_KUDU_TEST(flag_validators-test)
ADD_KUDU_TEST(flags-test)
ADD_KUDU_TEST(group_varint-test)
ADD_KUDU_TEST(hash_util-test)
ADD_KUDU_TEST(hdr_histogram-test)
ADD_KUDU_TEST(int128-test)
ADD_KUDU_TEST(inline_slice-test)
ADD_KUDU_TEST(interval_tree-test)
ADD_KUDU_TEST(jsonreader-test)
ADD_KUDU_TEST(knapsack_solver-test)
ADD_KUDU_TEST(logging-test)
ADD_KUDU_TEST(maintenance_manager-test)
ADD_KUDU_TEST(map-util-test)
ADD_KUDU_TEST(mem_tracker-test)
ADD_KUDU_TEST(memcmpable_varint-test LABELS no_tsan)
ADD_KUDU_TEST(memory/arena-test)
ADD_KUDU_TEST(metrics-test)
ADD_KUDU_TEST(monotime-test)
ADD_KUDU_TEST(mt-hdr_histogram-test RUN_SERIAL true)
ADD_KUDU_TEST(mt-metrics-test RUN_SERIAL true)
ADD_KUDU_TEST(mt-threadlocal-test RUN_SERIAL true)
ADD_KUDU_TEST(net/dns_resolver-test)
ADD_KUDU_TEST(net/net_util-test)
ADD_KUDU_TEST(net/socket-test)
ADD_KUDU_TEST(object_pool-test)
ADD_KUDU_TEST(oid_generator-test)
ADD_KUDU_TEST(once-test)
ADD_KUDU_TEST(os-util-test)
ADD_KUDU_TEST(path_util-test)
ADD_KUDU_TEST(process_memory-test RUN_SERIAL true)
ADD_KUDU_TEST(pstack_watcher-test)
ADD_KUDU_TEST(random-test)
ADD_KUDU_TEST(random_util-test)
ADD_KUDU_TEST(rle-test)
ADD_KUDU_TEST(rolling_log-test)
ADD_KUDU_TEST(rw_mutex-test RUN_SERIAL true)
ADD_KUDU_TEST(rw_semaphore-test)
ADD_KUDU_TEST(rwc_lock-test RUN_SERIAL true)
ADD_KUDU_TEST(safe_math-test)
ADD_KUDU_TEST(scoped_cleanup-test)
ADD_KUDU_TEST(slice-test)
ADD_KUDU_TEST(sorted_disjoint_interval_list-test)
ADD_KUDU_TEST(spinlock_profiling-test)
ADD_KUDU_TEST(stack_watchdog-test PROCESSORS 2)
ADD_KUDU_TEST(status-test)
ADD_KUDU_TEST(string_case-test)
ADD_KUDU_TEST(striped64-test RUN_SERIAL true)
ADD_KUDU_TEST(subprocess-test)
ADD_KUDU_TEST(thread-test)
ADD_KUDU_TEST(threadpool-test)
ADD_KUDU_TEST(throttler-test)
ADD_KUDU_TEST(trace-test PROCESSORS 4)
ADD_KUDU_TEST(ttl_cache-test)
ADD_KUDU_TEST(url-coding-test)
ADD_KUDU_TEST(user-test)
ADD_KUDU_TEST(version_util-test)
ADD_KUDU_TEST(yamlreader-test)

if (NOT APPLE)
  ADD_KUDU_TEST(minidump-test)
endif()

#######################################
# jsonwriter_test_proto
#######################################

PROTOBUF_GENERATE_CPP(
  JSONWRITER_TEST_PROTO_SRCS JSONWRITER_TEST_PROTO_HDRS JSONWRITER_TEST_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES jsonwriter_test.proto)
add_library(jsonwriter_test_proto ${JSONWRITER_TEST_PROTO_SRCS} ${JSONWRITER_TEST_PROTO_HDRS})
target_link_libraries(jsonwriter_test_proto
  pb_util_proto
  protobuf)

#######################################
# jsonwriter-test
#######################################

ADD_KUDU_TEST(jsonwriter-test)
if(NOT NO_TESTS)
  target_link_libraries(jsonwriter-test
    jsonwriter_test_proto)
endif()

#######################################
# pb_util_test_proto
#######################################

PROTOBUF_GENERATE_CPP(
  PROTO_CONTAINER_TEST_PROTO_SRCS PROTO_CONTAINER_TEST_PROTO_HDRS PROTO_CONTAINER_TEST_PROTO_TGTS
  SOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..
  BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/../..
  PROTO_FILES
    proto_container_test.proto
    proto_container_test2.proto
    proto_container_test3.proto
    pb_util_test.proto)
add_library(pb_util_test_proto
  ${PROTO_CONTAINER_TEST_PROTO_SRCS}
  ${PROTO_CONTAINER_TEST_PROTO_HDRS})
target_link_libraries(pb_util_test_proto
  pb_util_proto
  protobuf)

#######################################
# pb_util-test
#######################################

ADD_KUDU_TEST(pb_util-test)
if(NOT NO_TESTS)
  target_link_libraries(pb_util-test
    pb_util_test_proto)
endif()

#######################################
# util/compression tests
#######################################
ADD_KUDU_TEST(compression/compression-test)
if(NOT NO_TESTS)
  target_link_libraries(compression-test
    cfile
    kudu_util_compression)
endif()

#######################################
# curl_util-test
#######################################
ADD_KUDU_TEST(curl_util-test)
if(NOT NO_TESTS)
  target_link_libraries(curl_util-test
    kudu_curl_util)
endif()

#######################################
# jwt-util-test
#######################################
ADD_KUDU_TEST(jwt-util-test)
if(NOT NO_TESTS)
  target_link_libraries(jwt-util-test
    kudu_jwt_util)
endif()

#######################################
# instance_detector-test
#######################################
ADD_KUDU_TEST(cloud/instance_detector-test)
if(NOT NO_TESTS)
  target_link_libraries(instance_detector-test
    kudu_cloud_util)
endif()
