1932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines/* 2932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * Copyright 2011, The Android Open Source Project 3932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * 4932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * you may not use this file except in compliance with the License. 6932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * You may obtain a copy of the License at 7932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * 8932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * 10932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * Unless required by applicable law or agreed to in writing, software 11932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * See the License for the specific language governing permissions and 14932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * limitations under the License. 15932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines */ 16932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 17932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines#ifndef __ANDROID_BCINFO_BITCODETRANSLATOR_H__ 18932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines#define __ANDROID_BCINFO_BITCODETRANSLATOR_H__ 19932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 20932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines#include <cstddef> 21932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 22932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hinesnamespace bcinfo { 23932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 24932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hinesclass BitcodeTranslator { 25932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines private: 26932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines const char *mBitcode; 27932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines size_t mBitcodeSize; 28932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines const char *mTranslatedBitcode; 29932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines size_t mTranslatedBitcodeSize; 30932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines unsigned int mVersion; 31932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 32932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines public: 33932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines /** 34932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * Translates \p bitcode of a particular \p version to the latest version. 35932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * 36932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \param bitcode - input bitcode string. 37932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \param bitcodeSize - length of \p bitcode string (in bytes). 38932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \param version - corresponding target SDK version of \p bitcode. 39932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines */ 40932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines BitcodeTranslator(const char *bitcode, size_t bitcodeSize, 41932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines unsigned int version); 42932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 43932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines ~BitcodeTranslator(); 44932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 45932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines /** 46932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * Translate the supplied bitcode to the latest supported version. 47932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * 48932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \return true if the bitcode was translated successfully and false if an 49932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * error occurred. 50932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines */ 51932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines bool translate(); 52932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 53932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines /** 54932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \return translated bitcode. 55932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines */ 56932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines const char *getTranslatedBitcode() const { 57932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines return mTranslatedBitcode; 58932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines } 59932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 60932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines /** 61932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines * \return size of the translated bitcode (in bytes). 62932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines */ 63932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines size_t getTranslatedBitcodeSize() const { 64932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines return mTranslatedBitcodeSize; 65932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines } 66932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines}; 67932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 68932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines} // namespace bcinfo 69932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines 70932bc6e35bcef7adff05d890a9dcc7212426fb6aStephen Hines#endif // __ANDROID_BCINFO_BITCODETRANSLATOR_H__ 71