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" 2101f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines#include "bcc/Renderscript/RSInfo.h" 22f290793bc65b8483332ac8b568962395c4a63927Zonr Chang#include "bcc/Support/Sha1Util.h" 23ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 2406731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hinesnamespace llvm { 2506731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines class Module; 2606731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines} // end namespace llvm 2706731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 28ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Changnamespace bcc { 29ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 3006731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hinesclass RSScript; 31ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass Source; 32ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 33ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass RSScript : public Script { 34ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 35ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This is one-one mapping with the llvm::CodeGenOpt::Level in 36ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // llvm/Support/CodeGen.h. Therefore, value of this type can safely cast 37ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // to llvm::CodeGenOpt::Level. This makes RSScript LLVM-free. 38ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang enum OptimizationLevel { 39ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl0, // -O0 40ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl1, // -O1 41ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl2, // -O2, -Os 42ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl3 // -O3 43ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang }; 44ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 45ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 46ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang const RSInfo *mInfo; 47ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 48ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang unsigned mCompilerVersion; 49ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 50ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang OptimizationLevel mOptimizationLevel; 51ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 5206731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines RSLinkRuntimeCallback mLinkRuntimeCallback; 5306731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 5486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines bool mEmbedInfo; 5586a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 56ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 57ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This will be invoked when the containing source has been reset. 58ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang virtual bool doReset(); 59ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 60ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 61331310e1f3f86a795f78e42b3f03558a43829f09Stephen Hines static bool LinkRuntime(RSScript &pScript, const char *rt_path = NULL); 622665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 63ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang RSScript(Source &pSource); 64ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 6501f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines virtual ~RSScript() { 6601f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines delete mInfo; 6701f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines } 6801f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines 69ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // Set the associated RSInfo of the script. 7086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setInfo(const RSInfo *pInfo) { 7186a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mInfo = pInfo; 7286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 7386a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 7486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines const RSInfo *getInfo() const { 7586a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mInfo; 7686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 7786a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 7886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setCompilerVersion(unsigned pCompilerVersion) { 7986a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mCompilerVersion = pCompilerVersion; 8086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 81ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 8286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines unsigned getCompilerVersion() const { 8386a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mCompilerVersion; 8486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 85ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 8686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setOptimizationLevel(OptimizationLevel pOptimizationLevel) { 8786a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mOptimizationLevel = pOptimizationLevel; 8886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 89ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 9086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines OptimizationLevel getOptimizationLevel() const { 9186a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mOptimizationLevel; 9286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 93ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 9406731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines void setLinkRuntimeCallback(RSLinkRuntimeCallback fn){ 9506731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines mLinkRuntimeCallback = fn; 9606731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines } 9706731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 9886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setEmbedInfo(bool pEnable) { 9986a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mEmbedInfo = pEnable; 10086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 101ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 10286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines bool getEmbedInfo() const { 10386a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mEmbedInfo; 10486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 105ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang}; 106ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 107ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang} // end namespace bcc 108ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 109c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#endif // BCC_RS_SCRIPT_H 110