object-introspection/oi/OIGenerator.h
Jake Hillion 217f675e30 oilgen: accept multiple config files (#379)
Summary:

Extend the multiple config files system to OILGen, the piece it was originally designed for. This allows for specifying additional configs which say which keys of maps to capture.

Reviewed By: ajor

Differential Revision: D50105138
2023-10-11 16:25:13 -07:00

70 lines
2.0 KiB
C++

/*
* 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.
*/
#pragma once
#include <filesystem>
#include <vector>
#include "oi/DrgnUtils.h"
#include "oi/OICodeGen.h"
#include "oi/OICompiler.h"
namespace oi::detail {
class OIGenerator {
public:
int generate(fs::path& primaryObject, SymbolService& symbols);
void setOutputPath(fs::path _outputPath) {
outputPath = std::move(_outputPath);
}
void setConfigFilePaths(std::vector<fs::path> _configFilePaths) {
configFilePaths = std::move(_configFilePaths);
}
void setSourceFileDumpPath(fs::path _sourceFileDumpPath) {
sourceFileDumpPath = std::move(_sourceFileDumpPath);
}
void setFailIfNothingGenerated(bool fail) {
failIfNothingGenerated = fail;
}
void setUsePIC(bool pic_) {
pic = pic_;
}
private:
std::filesystem::path outputPath;
std::vector<std::filesystem::path> configFilePaths;
std::filesystem::path sourceFileDumpPath;
bool failIfNothingGenerated = false;
bool pic = false;
std::unordered_map<std::string, std::string> oilStrongToWeakSymbolsMap(
drgnplusplus::program& prog);
std::unordered_map<std::string, drgn_qualified_type> findOilTypesAndNames(
drgnplusplus::program& prog);
std::filesystem::path generateForType(
const OICodeGen::Config& generatorConfig,
const OICompiler::Config& compilerConfig,
const drgn_qualified_type& type,
const std::string& linkageName,
SymbolService& symbols);
};
} // namespace oi::detail