Clover Git
OpenCL 1.1 software implementation

compiler.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2011, Denis Steckelmacher <steckdenis@yahoo.fr>
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *     * Redistributions of source code must retain the above copyright
00008  *       notice, this list of conditions and the following disclaimer.
00009  *     * Redistributions in binary form must reproduce the above copyright
00010  *       notice, this list of conditions and the following disclaimer in the
00011  *       documentation and/or other materials provided with the distribution.
00012  *     * Neither the name of the copyright holder nor the
00013  *       names of its contributors may be used to endorse or promote products
00014  *       derived from this software without specific prior written permission.
00015  *
00016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019  * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
00020  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026  */
00027 
00033 #ifndef __COMPILER_H__
00034 #define __COMPILER_H__
00035 
00036 #include <string>
00037 
00038 #include <clang/Frontend/CompilerInstance.h>
00039 #include <llvm/Support/raw_ostream.h>
00040 
00041 namespace llvm
00042 {
00043     class MemoryBuffer;
00044     class Module;
00045 }
00046 
00047 namespace clang
00048 {
00049     class TextDiagnosticPrinter;
00050 }
00051 
00052 namespace Coal
00053 {
00054 
00055 class DeviceInterface;
00056 
00063 class Compiler
00064 {
00065     public:
00070         Compiler(DeviceInterface *device);
00071         ~Compiler();
00072 
00081         bool compile(const std::string &options, llvm::MemoryBuffer *source);
00082 
00090         const std::string &log() const;
00091 
00096         const std::string &options() const;
00097 
00102         bool optimize() const;
00103 
00108         llvm::Module *module() const;
00109 
00118         void appendLog(const std::string &log);
00119 
00120     private:
00121         DeviceInterface *p_device;
00122         clang::CompilerInstance p_compiler;
00123         llvm::Module *p_module;
00124         bool p_optimize;
00125 
00126         std::string p_log, p_options;
00127         llvm::raw_string_ostream p_log_stream;
00128         clang::TextDiagnosticPrinter *p_log_printer;
00129 };
00130 
00131 }
00132 
00133 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines