Ai
2 Star 0 Fork 0

mirrors_android_source/llvm-ndk-cc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
llvm-ndk-cc.cpp 3.06 KB
一键复制 编辑 原始数据 按行查看 历史
Andrew Hsieh 提交于 2012-08-01 06:54 +08:00 . llvm-ndk-cc: driver of NDK llvm ABI
#include <cassert>
#include <cstdlib>
#include <list>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "clang/Driver/Arg.h"
#include "clang/Driver/ArgList.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Option.h"
#include "clang/Driver/OptTable.h"
#include "clang/Frontend/DiagnosticOptions.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "llvm/ADT/OwningPtr.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/system_error.h"
#include "Compiler.h"
// FIXME: Add parameter feature '-D macro=xxx'
static llvm::cl::opt<std::string>
InputFilename(llvm::cl::Positional, llvm::cl::Required,
llvm::cl::desc("<input file>"));
static llvm::cl::list<std::string>
HeaderSearchDirs("I", llvm::cl::desc("Header search directory"), llvm::cl::Prefix);
static llvm::cl::list<std::string>
PreDefinedSymbols("D", llvm::cl::desc("Pre-define symbol"));
static llvm::cl::opt<std::string>
OutputFilename(llvm::cl::Required, "o", llvm::cl::desc("Override output filename"));
// split "xxx" => "xxx" ""
// split "xxx=yyy" => "xxx" "yyy"
static void splitPreDefinedSymbol(const std::string& In,
std::string& Key, std::string& Value) {
size_t FoundPos = In.find("=");
if (FoundPos == std::string::npos) {
Key = In;
Value = "";
} else {
Key = In.substr(0, FoundPos);
Value = In.substr(FoundPos+1, std::string::npos);
}
}
int main(int argc, char** argv) {
llvm::llvm_shutdown_obj _ShutdownObj;
llvm::cl::ParseCommandLineOptions(argc, argv, "P-NDK Compile Tool");
clang::TextDiagnosticPrinter* DiagClient =
new clang::TextDiagnosticPrinter(llvm::errs(), clang::DiagnosticOptions());
DiagClient->setPrefix(argv[0]);
llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs>
DiagIDs(new clang::DiagnosticIDs());
clang::DiagnosticsEngine Diags(DiagIDs, DiagClient, true);
if (Diags.hasErrorOccurred())
return 1;
std::vector<std::string> IncludePaths;
for(unsigned i = 0, e = HeaderSearchDirs.size(); i<e; ++i) {
IncludePaths.push_back(HeaderSearchDirs[i]);
}
std::map<std::string, std::string> PreDefinedSymbolMap;
for(unsigned i = 0, e = PreDefinedSymbols.size(); i<e; ++i) {
std::string Key;
std::string Value;
splitPreDefinedSymbol(PreDefinedSymbols[i], Key, Value);
PreDefinedSymbolMap.insert(
std::pair<std::string, std::string>(Key,Value));
}
ndkpc::Compiler Compiler;
Compiler.init(std::string(),
std::string(),
std::vector<std::string>(),
llvm::StringRef(InputFilename).endswith(".cpp"));
Compiler.setInputSource(InputFilename);
Compiler.setIncludePaths(IncludePaths);
Compiler.setOutput(OutputFilename.c_str());
Compiler.setPreDefinedSymbol(PreDefinedSymbolMap);
int ret = Compiler.compile();
return ret;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_android_source/llvm-ndk-cc.git
git@gitee.com:mirrors_android_source/llvm-ndk-cc.git
mirrors_android_source
llvm-ndk-cc
llvm-ndk-cc
main

搜索帮助