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 24ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Changnamespace bcc { 25ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 2606731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hinesclass RSScript; 27ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass Source; 28ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 29ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changclass RSScript : public Script { 30ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 31ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This is one-one mapping with the llvm::CodeGenOpt::Level in 32ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // llvm/Support/CodeGen.h. Therefore, value of this type can safely cast 33ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // to llvm::CodeGenOpt::Level. This makes RSScript LLVM-free. 34ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang enum OptimizationLevel { 35ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl0, // -O0 36ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl1, // -O1 37ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl2, // -O2, -Os 38ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang kOptLvl3 // -O3 39ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang }; 40ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 41ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 42ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang const RSInfo *mInfo; 43ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 44ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang unsigned mCompilerVersion; 45ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 46ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang OptimizationLevel mOptimizationLevel; 47ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 4806731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines RSLinkRuntimeCallback mLinkRuntimeCallback; 4906731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 5086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines bool mEmbedInfo; 5186a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 52ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changprivate: 53ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // This will be invoked when the containing source has been reset. 54ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang virtual bool doReset(); 55ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 56ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changpublic: 57331310e1f3f86a795f78e42b3f03558a43829f09Stephen Hines static bool LinkRuntime(RSScript &pScript, const char *rt_path = NULL); 582665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 59ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang RSScript(Source &pSource); 60ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 6101f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines virtual ~RSScript() { 6201f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines delete mInfo; 6301f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines } 6401f05d4b45cbde1e07d4707152908c1d843f1328Stephen Hines 65ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang // Set the associated RSInfo of the script. 6686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setInfo(const RSInfo *pInfo) { 6786a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mInfo = pInfo; 6886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 6986a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 7086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines const RSInfo *getInfo() const { 7186a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mInfo; 7286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 7386a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines 7486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setCompilerVersion(unsigned pCompilerVersion) { 7586a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mCompilerVersion = pCompilerVersion; 7686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 77ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 7886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines unsigned getCompilerVersion() const { 7986a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mCompilerVersion; 8086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 81ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 8286a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setOptimizationLevel(OptimizationLevel pOptimizationLevel) { 8386a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mOptimizationLevel = pOptimizationLevel; 8486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 85ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 8686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines OptimizationLevel getOptimizationLevel() const { 8786a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mOptimizationLevel; 8886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 89ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 9006731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines void setLinkRuntimeCallback(RSLinkRuntimeCallback fn){ 9106731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines mLinkRuntimeCallback = fn; 9206731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines } 9306731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 9486a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines void setEmbedInfo(bool pEnable) { 9586a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines mEmbedInfo = pEnable; 9686a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 97ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 9886a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines bool getEmbedInfo() const { 9986a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines return mEmbedInfo; 10086a0b797c221d4c3373dc10c8229b75b6747f6e7Stephen Hines } 101ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang}; 102ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 103ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang} // end namespace bcc 104ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 105c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#endif // BCC_RS_SCRIPT_H 106