| // 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_ |