xref: /llvm-project/clang/include/clang-c/CXCompilationDatabase.h (revision 8c48405069085a2c8b6b80816eda99e5dad31fc1)
10fe28a1aSArnaud A. de Grandmaison /*===-- clang-c/CXCompilationDatabase.h - Compilation database  ---*- C -*-===*\
20fe28a1aSArnaud A. de Grandmaison |*                                                                            *|
32946cd70SChandler Carruth |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
42946cd70SChandler Carruth |* Exceptions.                                                                *|
52946cd70SChandler Carruth |* See https://llvm.org/LICENSE.txt for license information.                  *|
62946cd70SChandler Carruth |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
70fe28a1aSArnaud A. de Grandmaison |*                                                                            *|
80fe28a1aSArnaud A. de Grandmaison |*===----------------------------------------------------------------------===*|
90fe28a1aSArnaud A. de Grandmaison |*                                                                            *|
10f9abd409SMarc-Andre Laperle |* This header provides a public interface to use CompilationDatabase without *|
110fe28a1aSArnaud A. de Grandmaison |* the full Clang C++ API.                                                    *|
120fe28a1aSArnaud A. de Grandmaison |*                                                                            *|
130fe28a1aSArnaud A. de Grandmaison \*===----------------------------------------------------------------------===*/
140fe28a1aSArnaud A. de Grandmaison 
152f5db8b3SBenjamin Kramer #ifndef LLVM_CLANG_C_CXCOMPILATIONDATABASE_H
162f5db8b3SBenjamin Kramer #define LLVM_CLANG_C_CXCOMPILATIONDATABASE_H
170fe28a1aSArnaud A. de Grandmaison 
180fe28a1aSArnaud A. de Grandmaison #include "clang-c/CXString.h"
19*8c484050SDuncan P. N. Exon Smith #include "clang-c/ExternC.h"
20*8c484050SDuncan P. N. Exon Smith #include "clang-c/Platform.h"
210fe28a1aSArnaud A. de Grandmaison 
22*8c484050SDuncan P. N. Exon Smith LLVM_CLANG_C_EXTERN_C_BEGIN
230fe28a1aSArnaud A. de Grandmaison 
240fe28a1aSArnaud A. de Grandmaison /** \defgroup COMPILATIONDB CompilationDatabase functions
250fe28a1aSArnaud A. de Grandmaison  * \ingroup CINDEX
260fe28a1aSArnaud A. de Grandmaison  *
270fe28a1aSArnaud A. de Grandmaison  * @{
280fe28a1aSArnaud A. de Grandmaison  */
290fe28a1aSArnaud A. de Grandmaison 
300fe28a1aSArnaud A. de Grandmaison /**
31fa6d73ccSArnaud A. de Grandmaison  * A compilation database holds all information used to compile files in a
32fa6d73ccSArnaud A. de Grandmaison  * project. For each file in the database, it can be queried for the working
33fa6d73ccSArnaud A. de Grandmaison  * directory or the command line used for the compiler invocation.
340fe28a1aSArnaud A. de Grandmaison  *
35fa6d73ccSArnaud A. de Grandmaison  * Must be freed by \c clang_CompilationDatabase_dispose
360fe28a1aSArnaud A. de Grandmaison  */
370fe28a1aSArnaud A. de Grandmaison typedef void * CXCompilationDatabase;
380fe28a1aSArnaud A. de Grandmaison 
390fe28a1aSArnaud A. de Grandmaison /**
409fc8faf9SAdrian Prantl  * Contains the results of a search in the compilation database
410fe28a1aSArnaud A. de Grandmaison  *
420fe28a1aSArnaud A. de Grandmaison  * When searching for the compile command for a file, the compilation db can
430fe28a1aSArnaud A. de Grandmaison  * return several commands, as the file may have been compiled with
440fe28a1aSArnaud A. de Grandmaison  * different options in different places of the project. This choice of compile
450fe28a1aSArnaud A. de Grandmaison  * commands is wrapped in this opaque data structure. It must be freed by
46fa6d73ccSArnaud A. de Grandmaison  * \c clang_CompileCommands_dispose.
470fe28a1aSArnaud A. de Grandmaison  */
480fe28a1aSArnaud A. de Grandmaison typedef void * CXCompileCommands;
490fe28a1aSArnaud A. de Grandmaison 
500fe28a1aSArnaud A. de Grandmaison /**
519fc8faf9SAdrian Prantl  * Represents the command line invocation to compile a specific file.
520fe28a1aSArnaud A. de Grandmaison  */
530fe28a1aSArnaud A. de Grandmaison typedef void * CXCompileCommand;
540fe28a1aSArnaud A. de Grandmaison 
550fe28a1aSArnaud A. de Grandmaison /**
569fc8faf9SAdrian Prantl  * Error codes for Compilation Database
570fe28a1aSArnaud A. de Grandmaison  */
580fe28a1aSArnaud A. de Grandmaison typedef enum  {
590fe28a1aSArnaud A. de Grandmaison   /*
609fc8faf9SAdrian Prantl    * No error occurred
610fe28a1aSArnaud A. de Grandmaison    */
620fe28a1aSArnaud A. de Grandmaison   CXCompilationDatabase_NoError = 0,
630fe28a1aSArnaud A. de Grandmaison 
640fe28a1aSArnaud A. de Grandmaison   /*
659fc8faf9SAdrian Prantl    * Database can not be loaded
660fe28a1aSArnaud A. de Grandmaison    */
670fe28a1aSArnaud A. de Grandmaison   CXCompilationDatabase_CanNotLoadDatabase = 1
680fe28a1aSArnaud A. de Grandmaison 
690fe28a1aSArnaud A. de Grandmaison } CXCompilationDatabase_Error;
700fe28a1aSArnaud A. de Grandmaison 
710fe28a1aSArnaud A. de Grandmaison /**
729fc8faf9SAdrian Prantl  * Creates a compilation database from the database found in directory
73fa6d73ccSArnaud A. de Grandmaison  * buildDir. For example, CMake can output a compile_commands.json which can
74fa6d73ccSArnaud A. de Grandmaison  * be used to build the database.
75fa6d73ccSArnaud A. de Grandmaison  *
76fa6d73ccSArnaud A. de Grandmaison  * It must be freed by \c clang_CompilationDatabase_dispose.
770fe28a1aSArnaud A. de Grandmaison  */
780fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE CXCompilationDatabase
79fa6d73ccSArnaud A. de Grandmaison clang_CompilationDatabase_fromDirectory(const char *BuildDir,
800fe28a1aSArnaud A. de Grandmaison                                         CXCompilationDatabase_Error *ErrorCode);
810fe28a1aSArnaud A. de Grandmaison 
820fe28a1aSArnaud A. de Grandmaison /**
839fc8faf9SAdrian Prantl  * Free the given compilation database
840fe28a1aSArnaud A. de Grandmaison  */
850fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE void
86fa6d73ccSArnaud A. de Grandmaison clang_CompilationDatabase_dispose(CXCompilationDatabase);
870fe28a1aSArnaud A. de Grandmaison 
880fe28a1aSArnaud A. de Grandmaison /**
899fc8faf9SAdrian Prantl  * Find the compile commands used for a file. The compile commands
90fa6d73ccSArnaud A. de Grandmaison  * must be freed by \c clang_CompileCommands_dispose.
910fe28a1aSArnaud A. de Grandmaison  */
920fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE CXCompileCommands
93fa6d73ccSArnaud A. de Grandmaison clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase,
940fe28a1aSArnaud A. de Grandmaison                                              const char *CompleteFileName);
950fe28a1aSArnaud A. de Grandmaison 
960fe28a1aSArnaud A. de Grandmaison /**
979fc8faf9SAdrian Prantl  * Get all the compile commands in the given compilation database.
98251ad5e0SArgyrios Kyrtzidis  */
99251ad5e0SArgyrios Kyrtzidis CINDEX_LINKAGE CXCompileCommands
100251ad5e0SArgyrios Kyrtzidis clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase);
101251ad5e0SArgyrios Kyrtzidis 
102251ad5e0SArgyrios Kyrtzidis /**
1039fc8faf9SAdrian Prantl  * Free the given CompileCommands
1040fe28a1aSArnaud A. de Grandmaison  */
105fa6d73ccSArnaud A. de Grandmaison CINDEX_LINKAGE void clang_CompileCommands_dispose(CXCompileCommands);
1060fe28a1aSArnaud A. de Grandmaison 
1070fe28a1aSArnaud A. de Grandmaison /**
1089fc8faf9SAdrian Prantl  * Get the number of CompileCommand we have for a file
1090fe28a1aSArnaud A. de Grandmaison  */
1100fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE unsigned
111fa6d73ccSArnaud A. de Grandmaison clang_CompileCommands_getSize(CXCompileCommands);
1120fe28a1aSArnaud A. de Grandmaison 
1130fe28a1aSArnaud A. de Grandmaison /**
1149fc8faf9SAdrian Prantl  * Get the I'th CompileCommand for a file
1150fe28a1aSArnaud A. de Grandmaison  *
116fa6d73ccSArnaud A. de Grandmaison  * Note : 0 <= i < clang_CompileCommands_getSize(CXCompileCommands)
1170fe28a1aSArnaud A. de Grandmaison  */
1180fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE CXCompileCommand
119fa6d73ccSArnaud A. de Grandmaison clang_CompileCommands_getCommand(CXCompileCommands, unsigned I);
1200fe28a1aSArnaud A. de Grandmaison 
1210fe28a1aSArnaud A. de Grandmaison /**
1229fc8faf9SAdrian Prantl  * Get the working directory where the CompileCommand was executed from
1230fe28a1aSArnaud A. de Grandmaison  */
1240fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE CXString
125fa6d73ccSArnaud A. de Grandmaison clang_CompileCommand_getDirectory(CXCompileCommand);
1260fe28a1aSArnaud A. de Grandmaison 
1270fe28a1aSArnaud A. de Grandmaison /**
1289fc8faf9SAdrian Prantl  * Get the filename associated with the CompileCommand.
12974bcd21eSArgyrios Kyrtzidis  */
13074bcd21eSArgyrios Kyrtzidis CINDEX_LINKAGE CXString
13174bcd21eSArgyrios Kyrtzidis clang_CompileCommand_getFilename(CXCompileCommand);
13274bcd21eSArgyrios Kyrtzidis 
13374bcd21eSArgyrios Kyrtzidis /**
1349fc8faf9SAdrian Prantl  * Get the number of arguments in the compiler invocation.
1350fe28a1aSArnaud A. de Grandmaison  *
1360fe28a1aSArnaud A. de Grandmaison  */
1370fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE unsigned
138fa6d73ccSArnaud A. de Grandmaison clang_CompileCommand_getNumArgs(CXCompileCommand);
1390fe28a1aSArnaud A. de Grandmaison 
1400fe28a1aSArnaud A. de Grandmaison /**
1419fc8faf9SAdrian Prantl  * Get the I'th argument value in the compiler invocations
1420fe28a1aSArnaud A. de Grandmaison  *
1430fe28a1aSArnaud A. de Grandmaison  * Invariant :
1440fe28a1aSArnaud A. de Grandmaison  *  - argument 0 is the compiler executable
1450fe28a1aSArnaud A. de Grandmaison  */
1460fe28a1aSArnaud A. de Grandmaison CINDEX_LINKAGE CXString
147fa6d73ccSArnaud A. de Grandmaison clang_CompileCommand_getArg(CXCompileCommand, unsigned I);
1480fe28a1aSArnaud A. de Grandmaison 
1490fe28a1aSArnaud A. de Grandmaison /**
1509fc8faf9SAdrian Prantl  * Get the number of source mappings for the compiler invocation.
1516192c93aSManuel Klimek  */
1526192c93aSManuel Klimek CINDEX_LINKAGE unsigned
1536192c93aSManuel Klimek clang_CompileCommand_getNumMappedSources(CXCompileCommand);
1546192c93aSManuel Klimek 
1556192c93aSManuel Klimek /**
1569fc8faf9SAdrian Prantl  * Get the I'th mapped source path for the compiler invocation.
1576192c93aSManuel Klimek  */
1586192c93aSManuel Klimek CINDEX_LINKAGE CXString
1596192c93aSManuel Klimek clang_CompileCommand_getMappedSourcePath(CXCompileCommand, unsigned I);
1606192c93aSManuel Klimek 
1616192c93aSManuel Klimek /**
1629fc8faf9SAdrian Prantl  * Get the I'th mapped source content for the compiler invocation.
1636192c93aSManuel Klimek  */
1646192c93aSManuel Klimek CINDEX_LINKAGE CXString
1656192c93aSManuel Klimek clang_CompileCommand_getMappedSourceContent(CXCompileCommand, unsigned I);
1666192c93aSManuel Klimek 
1676192c93aSManuel Klimek /**
1680fe28a1aSArnaud A. de Grandmaison  * @}
1690fe28a1aSArnaud A. de Grandmaison  */
1700fe28a1aSArnaud A. de Grandmaison 
171*8c484050SDuncan P. N. Exon Smith LLVM_CLANG_C_EXTERN_C_END
172*8c484050SDuncan P. N. Exon Smith 
1730fe28a1aSArnaud A. de Grandmaison #endif
1740fe28a1aSArnaud A. de Grandmaison 
175