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