blob: e341232dc131dfaf162739e0f0baa95321de3c10 [file]
// Copyright 2024 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#include "iree/compiler/Dialect/HAL/Target/TargetOptions.h"
#include "llvm/Support/CommandLine.h"
IREE_DEFINE_COMPILER_OPTION_FLAGS(
mlir::iree_compiler::IREE::HAL::TargetOptions);
namespace mlir::iree_compiler::IREE::HAL {
void TargetOptions::bindOptions(OptionsBinder &binder) {
static llvm::cl::OptionCategory halTargetOptionsCategory(
"IREE HAL executable target options");
// This function is called as part of registering the pass
// TranslateAllExecutablesPass. Pass registry is also staticly
// initialized, so targetBackendsFlags needs to be here to be initialized
// first.
binder.list<std::string>(
"iree-hal-target-backends", legacyTargetBackends,
llvm::cl::desc("Target backends for executable compilation."),
llvm::cl::ZeroOrMore, llvm::cl::cat(halTargetOptionsCategory));
binder.list<std::string>("iree-hal-target-device", targetDevices,
llvm::cl::desc("Target device specifications."),
llvm::cl::ZeroOrMore,
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-default-device", defaultDevice,
llvm::cl::desc("Which device is considered the default when no device "
"affinity is specified. Either the device name when names "
"are specified or the numeric ordinal of the device."),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<int>(
"iree-hal-executable-debug-level", debugLevel,
llvm::cl::desc("Debug level for executable translation (0-3)"),
llvm::cl::init(2), llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-dump-executable-files-to", executableFilesPath,
llvm::cl::desc(
"Meta flag for all iree-hal-dump-executable-* options. Path to write "
"executable files (sources, benchmarks, intermediates, binaries) "
"to."),
llvm::cl::callback([&](const std::string &path) {
if (executableSourcesPath.empty())
executableSourcesPath = path;
if (executableConfigurationsPath.empty())
executableConfigurationsPath = path;
if (executableBenchmarksPath.empty())
executableBenchmarksPath = path;
if (executableIntermediatesPath.empty())
executableIntermediatesPath = path;
if (executableBinariesPath.empty())
executableBinariesPath = path;
}),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-dump-executable-sources-to", executableSourcesPath,
llvm::cl::desc("Path to write individual hal.executable input "
"source listings into (- for stdout)."),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-dump-executable-configurations-to",
executableConfigurationsPath,
llvm::cl::desc("Path to write individual hal.executable input source "
"listings into, after translation strategy selection and "
"before starting translation (- for stdout)."),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-dump-executable-benchmarks-to", executableBenchmarksPath,
llvm::cl::desc("Path to write standalone hal.executable benchmarks into "
"(- for stdout)."),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>("iree-hal-dump-executable-intermediates-to",
executableIntermediatesPath,
llvm::cl::desc("Path to write translated executable "
"intermediates (.bc, .o, etc) into."),
llvm::cl::cat(halTargetOptionsCategory));
binder.opt<std::string>(
"iree-hal-dump-executable-binaries-to", executableBinariesPath,
llvm::cl::desc(
"Path to write translated and serialized executable binaries into."),
llvm::cl::cat(halTargetOptionsCategory));
}
} // namespace mlir::iree_compiler::IREE::HAL