ABCCompilerDriver.h revision 31b7c5664f33fcc335c29d8533537ad3c50fe467
152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao/* 252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * Copyright 2012, The Android Open Source Project 352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * 452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * you may not use this file except in compliance with the License. 652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * You may obtain a copy of the License at 752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * 852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * 1052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * Unless required by applicable law or agreed to in writing, software 1152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 1252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * See the License for the specific language governing permissions and 1452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao * limitations under the License. 1552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao */ 1652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 1752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#ifndef BCC_ABC_COMPILER_DRIVER_H 1852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#define BCC_ABC_COMPILER_DRIVER_H 1952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/BCCContext.h" 2152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/Compiler.h" 2252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/Linker.h" 2352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include <string> 2552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaonamespace bcc { 2752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass CompilerConfig; 2952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass LinkerConfig; 3052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 3152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass ABCCompilerDriver { 3252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 3352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao BCCContext mContext; 3452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao Compiler mCompiler; 3552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao Linker mLinker; 3652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 3752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao CompilerConfig *mCompilerConfig; 3852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao LinkerConfig *mLinkerConfig; 3952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao std::string mTriple; 4152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao std::string mAndroidSysroot; 4252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 4452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool configCompiler(); 4552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool configLinker(); 4652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 4852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao Script *prepareScript(int pInputFd); 4952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool compile(Script &pScript, llvm::raw_ostream &pOutput); 5052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool link(const Script &pScript, const std::string &input_relocatable, 5152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao int pOutputFd); 5252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 533928c62048612cd7180136017be5b7436c55717cShih-wei Liaoprotected: 5431b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao virtual const char **getNonPortableList() const { 5531b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao return NULL; 5631b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao } 5731b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao 5831b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liaoprotected: 593928c62048612cd7180136017be5b7436c55717cShih-wei Liao ABCCompilerDriver(const std::string &pTriple); 603928c62048612cd7180136017be5b7436c55717cShih-wei Liao 6152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaopublic: 623928c62048612cd7180136017be5b7436c55717cShih-wei Liao static ABCCompilerDriver *Create(const std::string &pTriple); 633928c62048612cd7180136017be5b7436c55717cShih-wei Liao 643928c62048612cd7180136017be5b7436c55717cShih-wei Liao virtual ~ABCCompilerDriver(); 653928c62048612cd7180136017be5b7436c55717cShih-wei Liao 663928c62048612cd7180136017be5b7436c55717cShih-wei Liao inline const std::string &getAndroidSysroot() const { 673928c62048612cd7180136017be5b7436c55717cShih-wei Liao return mAndroidSysroot; 683928c62048612cd7180136017be5b7436c55717cShih-wei Liao } 693928c62048612cd7180136017be5b7436c55717cShih-wei Liao inline void setAndroidSysroot(const std::string &pAndroidSysroot) { 703928c62048612cd7180136017be5b7436c55717cShih-wei Liao mAndroidSysroot = pAndroidSysroot; 713928c62048612cd7180136017be5b7436c55717cShih-wei Liao } 7252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 733928c62048612cd7180136017be5b7436c55717cShih-wei Liao inline const std::string &getTriple() const { 743928c62048612cd7180136017be5b7436c55717cShih-wei Liao return mTriple; 753928c62048612cd7180136017be5b7436c55717cShih-wei Liao } 7652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 7752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao // Compile the bitcode and link the shared object 7852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool build(int pInputFd, int pOutputFd); 7952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao}; 8052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 8152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao} // end namespace bcc 8252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 8352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#endif // BCC_ABC_COMPILER_DRIVER_H 84