1ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang/* 2ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Copyright 2012, The Android Open Source Project 3ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 4ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * you may not use this file except in compliance with the License. 6ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * You may obtain a copy of the License at 7ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 8ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 10ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Unless required by applicable law or agreed to in writing, software 11ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * See the License for the specific language governing permissions and 14ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * limitations under the License. 15ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang */ 16ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 17c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#ifndef BCC_RS_SCRIPT_H 18c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#define BCC_RS_SCRIPT_H 19ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 20c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#include "bcc/Script.h" 21f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#include "bcc/Support/Sha1Util.h" 22ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 23ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Changnamespace bcc { 24ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 25ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass RSInfo; 26ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass Source; 27ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 28ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass RSScript : public Script { 29ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 30ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This is one-one mapping with the llvm::CodeGenOpt::Level in 31ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // llvm/Support/CodeGen.h. Therefore, value of this type can safely cast 32ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // to llvm::CodeGenOpt::Level. This makes RSScript LLVM-free. 33ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang enum OptimizationLevel { 34ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl0, // -O0 35ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl1, // -O1 36ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl2, // -O2, -Os 37ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl3 // -O3 38ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang }; 39ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 40ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 41ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang const RSInfo *mInfo; 42ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 43ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang unsigned mCompilerVersion; 44ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 45ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang OptimizationLevel mOptimizationLevel; 46ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 47ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 48ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This will be invoked when the containing source has been reset. 49ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang virtual bool doReset(); 50ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 51ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 522665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao static bool LinkRuntime(RSScript &pScript); 532665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 54ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang RSScript(Source &pSource); 55ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 56ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // Set the associated RSInfo of the script. 57ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang void setInfo(const RSInfo *pInfo) 58ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { mInfo = pInfo; } 59ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 60ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang const RSInfo *getInfo() const 61ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { return mInfo; } 62ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 63ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang void setCompilerVersion(unsigned pCompilerVersion) 64ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { mCompilerVersion = pCompilerVersion; } 65ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 66ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang unsigned getCompilerVersion() const 67ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { return mCompilerVersion; } 68ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 69ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang void setOptimizationLevel(OptimizationLevel pOptimizationLevel) 70ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { mOptimizationLevel = pOptimizationLevel; } 71ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 72ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang OptimizationLevel getOptimizationLevel() const 73ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang { return mOptimizationLevel; } 74ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang}; 75ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 76ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang} // end namespace bcc 77ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 78c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#endif // BCC_RS_SCRIPT_H 79