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