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 203f64f76a827af742d969fe0b699d42a70b069998Shih-wei Liao#include "bcc/AndroidBitcode/ABCCompiler.h" 2152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/BCCContext.h" 2252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/Compiler.h" 2352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include "bcc/Linker.h" 2452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#include <string> 2652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaonamespace bcc { 2852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 2942b88c3b3cdadf6fcd367ee2bc620c0c94bbfe1bShih-wei Liaoclass ABCExpandVAArgPass; 3052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass CompilerConfig; 3152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass LinkerConfig; 3252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 3352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoclass ABCCompilerDriver { 3452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 3552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao BCCContext mContext; 363f64f76a827af742d969fe0b699d42a70b069998Shih-wei Liao ABCCompiler mCompiler; 3752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao Linker mLinker; 3852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 3952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao CompilerConfig *mCompilerConfig; 4052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao LinkerConfig *mLinkerConfig; 4152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao std::string mAndroidSysroot; 4352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 4552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool configCompiler(); 4652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool configLinker(); 4752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 4852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaoprivate: 4952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao Script *prepareScript(int pInputFd); 5052aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool compile(Script &pScript, llvm::raw_ostream &pOutput); 5152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool link(const Script &pScript, const std::string &input_relocatable, 5252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao int pOutputFd); 5352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 5465569163ae870b16f3a1bedaa994e62422c3963eShih-wei Liaoprivate: 5565569163ae870b16f3a1bedaa994e62422c3963eShih-wei Liao virtual CompilerConfig *createCompilerConfig() const = 0; 5665569163ae870b16f3a1bedaa994e62422c3963eShih-wei Liao virtual LinkerConfig *createLinkerConfig() const = 0; 5765569163ae870b16f3a1bedaa994e62422c3963eShih-wei Liao 583928c62048612cd7180136017be5b7436c55717cShih-wei Liaoprotected: 5931b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao virtual const char **getNonPortableList() const { 6031b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao return NULL; 6131b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao } 6231b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liao 6342b88c3b3cdadf6fcd367ee2bc620c0c94bbfe1bShih-wei Liaopublic: 6442b88c3b3cdadf6fcd367ee2bc620c0c94bbfe1bShih-wei Liao virtual ABCExpandVAArgPass *createExpandVAArgPass() const = 0; 6542b88c3b3cdadf6fcd367ee2bc620c0c94bbfe1bShih-wei Liao 6631b7c5664f33fcc335c29d8533537ad3c50fe467Shih-wei Liaoprotected: 6765569163ae870b16f3a1bedaa994e62422c3963eShih-wei Liao ABCCompilerDriver(); 683928c62048612cd7180136017be5b7436c55717cShih-wei Liao 6952aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liaopublic: 703928c62048612cd7180136017be5b7436c55717cShih-wei Liao static ABCCompilerDriver *Create(const std::string &pTriple); 713928c62048612cd7180136017be5b7436c55717cShih-wei Liao 723928c62048612cd7180136017be5b7436c55717cShih-wei Liao virtual ~ABCCompilerDriver(); 733928c62048612cd7180136017be5b7436c55717cShih-wei Liao 743928c62048612cd7180136017be5b7436c55717cShih-wei Liao inline const std::string &getAndroidSysroot() const { 753928c62048612cd7180136017be5b7436c55717cShih-wei Liao return mAndroidSysroot; 763928c62048612cd7180136017be5b7436c55717cShih-wei Liao } 773f64f76a827af742d969fe0b699d42a70b069998Shih-wei Liao 783928c62048612cd7180136017be5b7436c55717cShih-wei Liao inline void setAndroidSysroot(const std::string &pAndroidSysroot) { 793928c62048612cd7180136017be5b7436c55717cShih-wei Liao mAndroidSysroot = pAndroidSysroot; 803928c62048612cd7180136017be5b7436c55717cShih-wei Liao } 8152aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 8252aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao // Compile the bitcode and link the shared object 8352aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao bool build(int pInputFd, int pOutputFd); 8452aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao}; 8552aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 8652aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao} // end namespace bcc 8752aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao 8852aefd86e18310cd7e5de81f8498bb3497978519Shih-wei Liao#endif // BCC_ABC_COMPILER_DRIVER_H 89