/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed 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. */ #ifndef INCLUDED_OI_OI_JIT_H #define INCLUDED_OI_OI_JIT_H 1 #include #include #include #include #include #include #include #include "oi/exporters/inst.h" #include "oi/oi.h" namespace oi::detail { class OILibraryImpl; } namespace oi { struct GeneratorOptions { std::vector configFilePaths; std::filesystem::path sourceFileDumpPath; int debugLevel = 0; }; class OILibrary { public: OILibrary(void* atomicHome, std::unordered_set, GeneratorOptions opts); ~OILibrary(); std::pair init(); private: std::unique_ptr pimpl_; }; /* * setupAndIntrospect * * Execute JIT compilation then introspect the given object. Throws on error. * Returns std::nullopt rather than duplicating initialisation if its ongoing. */ template std::optional setupAndIntrospect( const T& objectAddr, const GeneratorOptions& opts); template class CodegenHandler { public: static bool init(const GeneratorOptions& opts); static IntrospectionResult introspect(const T& objectAddr); private: using func_type = void (*)(const T&, std::vector&); static std::atomic& getIsCritical(); static std::atomic& getIntrospectionFunc(); static std::atomic& getTreeBuilderInstructions(); }; } // namespace oi #include "oi-jit-inl.h" #endif