Training courses
Kernel and Embedded Linux
Bootlin training courses
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
#include "clang-c/CXCompilationDatabase.h" #include "CXString.h" #include "clang/Tooling/CompilationDatabase.h" #include <cstdio> using namespace clang; using namespace clang::tooling; // FIXME: do something more useful with the error message CXCompilationDatabase clang_CompilationDatabase_fromDirectory(const char *BuildDir, CXCompilationDatabase_Error *ErrorCode) { std::string ErrorMsg; CXCompilationDatabase_Error Err = CXCompilationDatabase_NoError; std::unique_ptr<CompilationDatabase> db = CompilationDatabase::loadFromDirectory(BuildDir, ErrorMsg); if (!db) { fprintf(stderr, "LIBCLANG TOOLING ERROR: %s\n", ErrorMsg.c_str()); Err = CXCompilationDatabase_CanNotLoadDatabase; } if (ErrorCode) *ErrorCode = Err; return db.release(); } void clang_CompilationDatabase_dispose(CXCompilationDatabase CDb) { delete static_cast<CompilationDatabase *>(CDb); } struct AllocatedCXCompileCommands { std::vector<CompileCommand> CCmd; AllocatedCXCompileCommands(std::vector<CompileCommand> Cmd) : CCmd(std::move(Cmd)) {} }; CXCompileCommands clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase CDb, const char *CompleteFileName) { if (CompilationDatabase *db = static_cast<CompilationDatabase *>(CDb)) { std::vector<CompileCommand> CCmd(db->getCompileCommands(CompleteFileName)); if (!CCmd.empty()) return new AllocatedCXCompileCommands(std::move(CCmd)); } return nullptr; } CXCompileCommands clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase CDb) { if (CompilationDatabase *db = static_cast<CompilationDatabase *>(CDb)) { std::vector<CompileCommand> CCmd(db->getAllCompileCommands()); if (!CCmd.empty()) return new AllocatedCXCompileCommands(std::move(CCmd)); } return nullptr; } void clang_CompileCommands_dispose(CXCompileCommands Cmds) { delete static_cast<AllocatedCXCompileCommands *>(Cmds); } unsigned clang_CompileCommands_getSize(CXCompileCommands Cmds) { if (!Cmds) return 0; AllocatedCXCompileCommands *ACC = static_cast<AllocatedCXCompileCommands *>(Cmds); return ACC->CCmd.size(); } CXCompileCommand clang_CompileCommands_getCommand(CXCompileCommands Cmds, unsigned I) { if (!Cmds) return nullptr; AllocatedCXCompileCommands *ACC = static_cast<AllocatedCXCompileCommands *>(Cmds); if (I >= ACC->CCmd.size()) return nullptr; return &ACC->CCmd[I]; } CXString clang_CompileCommand_getDirectory(CXCompileCommand CCmd) { if (!CCmd) return cxstring::createNull(); CompileCommand *cmd = static_cast<CompileCommand *>(CCmd); return cxstring::createRef(cmd->Directory.c_str()); } CXString clang_CompileCommand_getFilename(CXCompileCommand CCmd) { if (!CCmd) return cxstring::createNull(); CompileCommand *cmd = static_cast<CompileCommand *>(CCmd); return cxstring::createRef(cmd->Filename.c_str()); } unsigned clang_CompileCommand_getNumArgs(CXCompileCommand CCmd) { if (!CCmd) return 0; return static_cast<CompileCommand *>(CCmd)->CommandLine.size(); } CXString clang_CompileCommand_getArg(CXCompileCommand CCmd, unsigned Arg) { if (!CCmd) return cxstring::createNull(); CompileCommand *Cmd = static_cast<CompileCommand *>(CCmd); if (Arg >= Cmd->CommandLine.size()) return cxstring::createNull(); return cxstring::createRef(Cmd->CommandLine[Arg].c_str()); } unsigned clang_CompileCommand_getNumMappedSources(CXCompileCommand CCmd) { // Left here for backward compatibility. No mapped sources exists in the C++ // backend anymore. return 0; } CXString clang_CompileCommand_getMappedSourcePath(CXCompileCommand CCmd, unsigned I) { // Left here for backward compatibility. No mapped sources exists in the C++ // backend anymore. return cxstring::createNull(); } CXString clang_CompileCommand_getMappedSourceContent(CXCompileCommand CCmd, unsigned I) { // Left here for backward compatibility. No mapped sources exists in the C++ // backend anymore. return cxstring::createNull(); }