/* * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/offline_compiler/source/decoder/helper.h" #include "hw_cmds.h" #include #include #include #include #include #include #pragma once static constexpr auto *oclocStdoutLogName = "stdout.log"; struct Source { const uint8_t *data; const size_t length; const char *name; Source(const uint8_t *data, const size_t length, const char *name) : data(data), length(length), name(name){}; void toVectorOfStrings(std::vector &lines, bool replaceTabs = false); inline std::vector toBinaryVector() { return std::vector(data, data + length); }; }; struct Output { std::string name; uint8_t *data; const size_t size; Output(const std::string &name, const void *data, const size_t &size); }; struct DeviceProduct { unsigned short deviceId; std::string product; }; class OclocArgHelper { protected: std::vector inputs, headers; std::vector outputs; uint32_t *numOutputs = nullptr; char ***nameOutputs = nullptr; uint8_t ***dataOutputs = nullptr; uint64_t **lenOutputs = nullptr; bool hasOutput = false; const std::vector deviceProductTable; std::map genIGFXMap; void moveOutputs(); MessagePrinter messagePrinter; Source *findSourceFile(const std::string &filename); bool sourceFileExists(const std::string &filename) const; inline void addOutput(const std::string &filename, const void *data, const size_t &size) { outputs.push_back(new Output(filename, data, size)); } public: OclocArgHelper(); OclocArgHelper(const uint32_t numSources, const uint8_t **dataSources, const uint64_t *lenSources, const char **nameSources, const uint32_t numInputHeaders, const uint8_t **dataInputHeaders, const uint64_t *lenInputHeaders, const char **nameInputHeaders, uint32_t *numOutputs, uint8_t ***dataOutputs, uint64_t **lenOutputs, char ***nameOutputs); virtual ~OclocArgHelper(); MOCKABLE_VIRTUAL bool fileExists(const std::string &filename) const; std::vector headersToVectorOfStrings(); void readFileToVectorOfStrings(const std::string &filename, std::vector &lines); MOCKABLE_VIRTUAL std::vector readBinaryFile(const std::string &filename); std::unique_ptr loadDataFromFile(const std::string &filename, size_t &retSize); bool outputEnabled() const { return hasOutput; } bool hasHeaders() const { return headers.size() > 0; } const std::vector &getHeaders() const { return headers; } void saveOutput(const std::string &filename, const void *pData, const size_t &dataSize); void saveOutput(const std::string &filename, const std::ostream &stream); MessagePrinter &getPrinterRef() { return messagePrinter; } void printf(const char *message) { messagePrinter.printf(message); } template void printf(const char *format, Args... args) { messagePrinter.printf(format, std::forward(args)...); } std::string returnProductNameForDevice(unsigned short deviceId); bool isGen(const std::string &device); unsigned int returnIGFXforGen(const std::string &device); };