/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree.
 */

#pragma once

#include <executorch/runtime/core/exec_aten/exec_aten.h>

#ifdef EXECUTORCH_SELECTIVE_BUILD_DTYPE
// include header generated by
// executorch/codegen/tools/gen_selected_op_variants.py
#include <executorch/kernels/portable/cpu/selected_op_variants.h>
#else
// dummy implementation
inline constexpr bool should_include_kernel_dtype(
    const char* /*operator_name*/,
    exec_aten::ScalarType /*scalar_type*/
) {
  return true;
}
#endif

namespace torch {
namespace executor {
#define ET_INTERNAL_CHECK_SELECTIVE_BUILD(enum_type)               \
  do {                                                             \
    if (!should_include_kernel_dtype(et_switch_name, enum_type)) { \
      ET_LOG(                                                      \
          Error,                                                   \
          "dtype '%" PRId8 "' not selected for operator %s",       \
          static_cast<int8_t>(enum_type),                          \
          et_switch_name);                                         \
      torch::executor::runtime_abort();                            \
    }                                                              \
  } while (0)

} // namespace executor
} // namespace torch

#include <executorch/runtime/core/exec_aten/util/scalar_type_util.h>
