slang_rs.h revision cf6af6abc1de499920571308b14a27e19cf57097
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 2c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Copyright 2010, The Android Open Source Project 3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License. 6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at 7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software 11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and 14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License. 15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */ 16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang 173a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang#ifndef _SLANG_COMPILER_SLANG_RS_HPP 183a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang#define _SLANG_COMPILER_SLANG_RS_HPP 193a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 203a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang#include "slang.h" 213a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 22cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang#include <list> 23cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang#include <vector> 24cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang#include <string> 25cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang 26cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang#include "slang_rs_reflect_utils.h" 27cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang 283a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Changnamespace slang { 293a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang class RSContext; 303a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 313a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Changclass SlangRS : public Slang { 323a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang private: 333a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang // Context for RenderScript 343a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang RSContext *mRSContext; 353a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 363a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang bool mAllowRSPrefix; 373a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 38cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // The package name that's really applied will be filled in RealPackageName. 39cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang bool reflectToJava(const std::string &OutputPathBase, 40cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::string &OutputPackageName, 41cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang std::string *RealPackageName); 42cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang 43cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang bool generateBitcodeAccessor(const std::string &OutputPathBase, 44cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::string &PackageName); 45cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang 463a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang protected: 473a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang virtual void initDiagnostic(); 483a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang virtual void initPreprocessor(); 493a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang virtual void initASTContext(); 503a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 513a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang virtual clang::ASTConsumer 523a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang *createBackend(const clang::CodeGenOptions& CodeGenOpts, 533a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang llvm::raw_ostream *OS, 543a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang Slang::OutputType OT); 553a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 563a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 573a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang public: 58592a954aae4cb946970b557e94afd5ee453fd57eZonr Chang static bool IsRSHeaderFile(const char *File); 59592a954aae4cb946970b557e94afd5ee453fd57eZonr Chang 60b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao SlangRS(const std::string &Triple, const std::string &CPU, 61b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao const std::vector<std::string> &Features); 623a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 63cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // Compile bunch of RS files given in the llvm-rs-cc arguments. Return true if 64cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // all given input files are successfully compiled without errors. 65cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 66cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @IOFiles - List of pairs of <input file path, output file path>. 67cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 68cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @DepFiles - List of pairs of <output dep. file path, dependent bitcode 69cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // target>. If @OutputDep is true, this parameter must be given 70cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // with the same number of pairs given in @IOFiles. 71cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 72cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @IncludePaths - User-defined include path. 73cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 74cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @AdditionalDepTargets - User-defined files added to the dependencies. 75cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 76cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @OutputType - See Slang::OutputType. 77cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 78cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @BitcodeStorage - See BitCodeStorageType in slang_rs_reflect_util.cpp. 79cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 80cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @AllowRSPrefix - true to allow user-defined function prefixed with 'rs'. 81cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 82cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @OutputDep - true if output dependecies file. 83cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 84cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @JavaReflectionPathBase - The path base for storing reflection files. 85cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 86cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // @JavaReflectionPackageName - The package name given by user in command 87cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // line. This may override the package name 88cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // specified in the .rs using #pragma. 89cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang // 90cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang bool compile(const std::list<std::pair<const char*, const char*> > &IOFiles, 91cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::list<std::pair<const char*, const char*> > &DepFiles, 92cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::vector<std::string> &IncludePaths, 93cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::vector<std::string> &AdditionalDepTargets, 94cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang Slang::OutputType OutputType, BitCodeStorageType BitcodeStorage, 95cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang bool AllowRSPrefix, bool OutputDep, 96cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::string &JavaReflectionPathBase, 97cf6af6abc1de499920571308b14a27e19cf57097Zonr Chang const std::string &JavaReflectionPackageName); 983a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 993a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang virtual ~SlangRS(); 1003a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang}; 1013a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang} 1023a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang 1033a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang#endif // _SLANG_COMPILER_SLANG_RS_HPP 104