C++程序  |  74行  |  2.55 KB

/*
 * Copyright 2013, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ABCC_ABCC_HOST_H
#define ABCC_ABCC_HOST_H

#include <cstdio>
#include "Abcc.h"

#define LOG(format, ...) do { \
  fprintf(stderr, format, ##__VA_ARGS__); \
  fprintf(stderr, "\n"); \
} while(0)

extern bool kVerbose;
#define LOGE  LOG
#define LOGV(format, ...) do {\
  if (kVerbose) LOG(format, ##__VA_ARGS__); \
} while(0)

namespace abcc {

class HostBitcodeCompiler : public BitcodeCompiler {
  std::string mIn;
  std::string mOut;
  std::string mNDKDir;  // empty string if standalone mode
  std::string mPlatform;
  std::string mToolchainBinPath;  // Used at ndk mode to prevent tedious path issue
  std::map<std::string, std::string> mRuntimePath; // mappings of library name and full path

public:
  HostBitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &toolchain_bin,
                      const std::string &input, const std::string &output, const std::string &working_dir,
                      const std::string &platform, const bool savetemps, bool bit32 = true);
  HostBitcodeCompiler(const std::string &abi, const std::string &sysroot, const std::string &ndk_dir, const std::string &toolchain_bin,
                      const std::string &input, const std::string &output, const std::string &working_dir,
                      const std::string &platform, const bool savetemps, bool bit32 = true);

public:
  virtual int parseLDFlags(BitcodeInfo &info, const std::string &str);

private:
  virtual void getBitcodeFiles();
  virtual void prepareToolchain();
  virtual void copyRuntime(const BitcodeInfo &info);
  virtual void removeIntermediateFile(const std::string &path);
  void initRuntimePath();
  const std::string getRuntimePath(const std::string &libname);

private:
  const std::string getToolchainBinPath() const;
  const std::string getCompilerRTPath() const;
  const std::string getGAbixxPath() const;
  const std::string getLibPortablePath() const;
  const std::string getGCCUnwindPath() const;
};

} // namespace abcc

#endif