blob: 47e50f8516a7fb6286cfc8b279abe8027ccde1ba [file] [log] [blame]
// Copyright 2022 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
#ifndef IREE_PJRT_PLUGIN_PJRT_PLATFORM_H_
#define IREE_PJRT_PLUGIN_PJRT_PLATFORM_H_
#include <functional>
#include <optional>
#include <string>
#include <string_view>
#include <unordered_map>
#include "iree/base/api.h"
#include "iree_pjrt/common/compiler.h"
#include "iree_pjrt/common/debugging.h"
namespace iree::pjrt {
//===----------------------------------------------------------------------===//
// ConfigVars
// Placeholder for API-level configuration (i.e. from environment, files, etc).
//===----------------------------------------------------------------------===//
struct ConfigVars {
public:
ConfigVars() = default;
// Configures this instance to fallback to the system environment if a config
// var is not found by prefixing |env_fallback_prefix| to the variable name.
void EnableEnvFallback(std::string env_fallback_prefix);
// Looks up a variable value by name. On success, the resulting string_view
// is valid at least until the next mutation.
std::optional<std::string> Lookup(const std::string& key);
// Sets a variable.
void Set(const std::string& key, std::string value);
private:
std::unordered_map<std::string, std::string> kv_entries_;
std::optional<std::string> env_fallback_prefix_;
};
//===----------------------------------------------------------------------===//
// Platform
// Encapsulates aspects of the platform which may differ under different
// usage and/or environments.
//===----------------------------------------------------------------------===//
class Platform {
public:
virtual ~Platform();
iree_status_t Initialize();
ConfigVars& config_vars() { return config_vars_; }
Logger& logger() { return *logger_; }
AbstractCompiler& compiler() { return *compiler_; }
// The partitioner is optional.
AbstractCompiler* partitioner() { return partitioner_.get(); }
ArtifactDumper& artifact_dumper() { return *artifact_dumper_; }
protected:
virtual iree_status_t SubclassInitialize() = 0;
ConfigVars config_vars_;
std::unique_ptr<Logger> logger_;
std::unique_ptr<AbstractCompiler> compiler_;
std::unique_ptr<AbstractCompiler> partitioner_;
std::unique_ptr<ArtifactDumper> artifact_dumper_;
};
} // namespace iree::pjrt
#endif // IREE_PJRT_PLUGIN_PJRT_PLATFORM_H_