Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===-- clang-c/CXCompilationDatabase.h - Compilation database  ---*- C -*-===*\
  2. |*                                                                            *|
  3. |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
  4. |* Exceptions.                                                                *|
  5. |* See https://llvm.org/LICENSE.txt for license information.                  *|
  6. |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
  7. |*                                                                            *|
  8. |*===----------------------------------------------------------------------===*|
  9. |*                                                                            *|
  10. |* This header provides a public interface to use CompilationDatabase without *|
  11. |* the full Clang C++ API.                                                    *|
  12. |*                                                                            *|
  13. \*===----------------------------------------------------------------------===*/
  14.  
  15. #ifndef LLVM_CLANG_C_CXCOMPILATIONDATABASE_H
  16. #define LLVM_CLANG_C_CXCOMPILATIONDATABASE_H
  17.  
  18. #include "clang-c/CXString.h"
  19. #include "clang-c/ExternC.h"
  20. #include "clang-c/Platform.h"
  21.  
  22. LLVM_CLANG_C_EXTERN_C_BEGIN
  23.  
  24. /** \defgroup COMPILATIONDB CompilationDatabase functions
  25.  * \ingroup CINDEX
  26.  *
  27.  * @{
  28.  */
  29.  
  30. /**
  31.  * A compilation database holds all information used to compile files in a
  32.  * project. For each file in the database, it can be queried for the working
  33.  * directory or the command line used for the compiler invocation.
  34.  *
  35.  * Must be freed by \c clang_CompilationDatabase_dispose
  36.  */
  37. typedef void * CXCompilationDatabase;
  38.  
  39. /**
  40.  * Contains the results of a search in the compilation database
  41.  *
  42.  * When searching for the compile command for a file, the compilation db can
  43.  * return several commands, as the file may have been compiled with
  44.  * different options in different places of the project. This choice of compile
  45.  * commands is wrapped in this opaque data structure. It must be freed by
  46.  * \c clang_CompileCommands_dispose.
  47.  */
  48. typedef void * CXCompileCommands;
  49.  
  50. /**
  51.  * Represents the command line invocation to compile a specific file.
  52.  */
  53. typedef void * CXCompileCommand;
  54.  
  55. /**
  56.  * Error codes for Compilation Database
  57.  */
  58. typedef enum  {
  59.   /*
  60.    * No error occurred
  61.    */
  62.   CXCompilationDatabase_NoError = 0,
  63.  
  64.   /*
  65.    * Database can not be loaded
  66.    */
  67.   CXCompilationDatabase_CanNotLoadDatabase = 1
  68.  
  69. } CXCompilationDatabase_Error;
  70.  
  71. /**
  72.  * Creates a compilation database from the database found in directory
  73.  * buildDir. For example, CMake can output a compile_commands.json which can
  74.  * be used to build the database.
  75.  *
  76.  * It must be freed by \c clang_CompilationDatabase_dispose.
  77.  */
  78. CINDEX_LINKAGE CXCompilationDatabase
  79. clang_CompilationDatabase_fromDirectory(const char *BuildDir,
  80.                                         CXCompilationDatabase_Error *ErrorCode);
  81.  
  82. /**
  83.  * Free the given compilation database
  84.  */
  85. CINDEX_LINKAGE void
  86. clang_CompilationDatabase_dispose(CXCompilationDatabase);
  87.  
  88. /**
  89.  * Find the compile commands used for a file. The compile commands
  90.  * must be freed by \c clang_CompileCommands_dispose.
  91.  */
  92. CINDEX_LINKAGE CXCompileCommands
  93. clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase,
  94.                                              const char *CompleteFileName);
  95.  
  96. /**
  97.  * Get all the compile commands in the given compilation database.
  98.  */
  99. CINDEX_LINKAGE CXCompileCommands
  100. clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase);
  101.  
  102. /**
  103.  * Free the given CompileCommands
  104.  */
  105. CINDEX_LINKAGE void clang_CompileCommands_dispose(CXCompileCommands);
  106.  
  107. /**
  108.  * Get the number of CompileCommand we have for a file
  109.  */
  110. CINDEX_LINKAGE unsigned
  111. clang_CompileCommands_getSize(CXCompileCommands);
  112.  
  113. /**
  114.  * Get the I'th CompileCommand for a file
  115.  *
  116.  * Note : 0 <= i < clang_CompileCommands_getSize(CXCompileCommands)
  117.  */
  118. CINDEX_LINKAGE CXCompileCommand
  119. clang_CompileCommands_getCommand(CXCompileCommands, unsigned I);
  120.  
  121. /**
  122.  * Get the working directory where the CompileCommand was executed from
  123.  */
  124. CINDEX_LINKAGE CXString
  125. clang_CompileCommand_getDirectory(CXCompileCommand);
  126.  
  127. /**
  128.  * Get the filename associated with the CompileCommand.
  129.  */
  130. CINDEX_LINKAGE CXString
  131. clang_CompileCommand_getFilename(CXCompileCommand);
  132.  
  133. /**
  134.  * Get the number of arguments in the compiler invocation.
  135.  *
  136.  */
  137. CINDEX_LINKAGE unsigned
  138. clang_CompileCommand_getNumArgs(CXCompileCommand);
  139.  
  140. /**
  141.  * Get the I'th argument value in the compiler invocations
  142.  *
  143.  * Invariant :
  144.  *  - argument 0 is the compiler executable
  145.  */
  146. CINDEX_LINKAGE CXString
  147. clang_CompileCommand_getArg(CXCompileCommand, unsigned I);
  148.  
  149. /**
  150.  * Get the number of source mappings for the compiler invocation.
  151.  */
  152. CINDEX_LINKAGE unsigned
  153. clang_CompileCommand_getNumMappedSources(CXCompileCommand);
  154.  
  155. /**
  156.  * Get the I'th mapped source path for the compiler invocation.
  157.  */
  158. CINDEX_LINKAGE CXString
  159. clang_CompileCommand_getMappedSourcePath(CXCompileCommand, unsigned I);
  160.  
  161. /**
  162.  * Get the I'th mapped source content for the compiler invocation.
  163.  */
  164. CINDEX_LINKAGE CXString
  165. clang_CompileCommand_getMappedSourceContent(CXCompileCommand, unsigned I);
  166.  
  167. /**
  168.  * @}
  169.  */
  170.  
  171. LLVM_CLANG_C_EXTERN_C_END
  172.  
  173. #endif
  174.  
  175.