Description
Bug Report
The generated compilation database has a bug/is missing some compiler commands.
If you are trying to use the compilation database as intellisense configuration as is done in pretty much any IDE, for example, clangd under VSCode, the generated compile_commands.json MUST explicity include the system header include directories otherwise clangd or other intellisense engines cannot find them. This is because Arduino uses different compilers in non-standard locations, with different system includes per compiler, as such the intellisense engines will not know where to find the system includes.
Current behavior
Here is an example file entry for the generated compilation database:
{
"directory": "c:\\Users\\falve\\.vscode\\extensions\\vsciot-vscode.vscode-arduino-0.4.2\\out\\src",
"arguments": [
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-g++",
"-mcpu=cortex-m0plus",
"-mthumb",
"-c",
"-g",
"-Os",
"-w",
"-std=gnu++11",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-nostdlib",
"--param",
"max-inline-insns-single=500",
"-fno-rtti",
"-fno-exceptions",
"-MMD",
"-DF_CPU=48000000L",
"-DARDUINO=10607",
"-DARDUINO_SAMD_MKRWIFI1010",
"-DARDUINO_ARCH_SAMD",
"-DUSE_ARDUINO_MKR_PIN_LAYOUT",
"-D__SAMD21G18A__",
"-DUSB_VID=0x2341",
"-DUSB_PID=0x8054",
"-DUSBCON",
"-DUSB_MANUFACTURER=\"Arduino LLC\"",
"-DUSB_PRODUCT=\"Arduino MKR WiFi 1010\"",
"-DUSE_BQ24195L_PMIC",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.5.0/CMSIS/Include/",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS-Atmel\\1.2.0/CMSIS/Device/ATMEL/",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino/api/deprecated",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino/api/deprecated-avr-comp",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\variants\\mkrwifi1010",
"c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp",
"-o",
"c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp.o"
],
"file": "c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp"
}
Expected behavior
Here is what the file entry from the compilation database should look like:
{
"directory": "c:\\Users\\falve\\.vscode\\extensions\\vsciot-vscode.vscode-arduino-0.4.2\\out\\src",
"arguments": [
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4/bin/arm-none-eabi-g++",
"-mcpu=cortex-m0plus",
"-mthumb",
"-c",
"-g",
"-Os",
"-w",
"-std=gnu++11",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-nostdlib",
"--param",
"max-inline-insns-single=500",
"-fno-rtti",
"-fno-exceptions",
"-MMD",
"-DF_CPU=48000000L",
"-DARDUINO=10607",
"-DARDUINO_SAMD_MKRWIFI1010",
"-DARDUINO_ARCH_SAMD",
"-DUSE_ARDUINO_MKR_PIN_LAYOUT",
"-D__SAMD21G18A__",
"-DUSB_VID=0x2341",
"-DUSB_PID=0x8054",
"-DUSBCON",
"-DUSB_MANUFACTURER=\"Arduino LLC\"",
"-DUSB_PRODUCT=\"Arduino MKR WiFi 1010\"",
"-DUSE_BQ24195L_PMIC",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.5.0/CMSIS/Include/",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS-Atmel\\1.2.0/CMSIS/Device/ATMEL/",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino/api/deprecated",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino/api/deprecated-avr-comp",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino",
"-IC:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\variants\\mkrwifi1010",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1\\arm-none-eabi",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1\\backward",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\lib\\gcc\\arm-none-eabi\\7.2.1\\include",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\lib\\gcc\\arm-none-eabi\\7.2.1\\include-fixed",
"-isystem C:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include",
"c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp",
"-o",
"c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp.o"
],
"file": "c:\\Users\\falve\\OneDrive\\Documents\\Arduino\\libraries\\oprintstream\\build\\sketch\\oprintstream.ino.cpp"
}
Environment
$ arduino-cli version
arduino-cli.exe alpha Version: 0.18.1 Commit: b3cf8e19 Date: 2021-04-13T13:08:30Z
Additional context
As an example, look at the compilation database, c_cpp_properties.json, that the Arduino vscode extension generates for it's intellisense configuration. They add on the system include directories.
{
"version": 4,
"configurations": [
{
"name": "Arduino",
"compilerPath": "C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\bin\\arm-none-eabi-g++",
"compilerArgs": [
"-mcpu=cortex-m0plus",
"-mthumb",
"-w",
"-std=gnu++11",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-nostdlib",
"--param",
"-fno-rtti",
"-fno-exceptions"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS\\4.5.0\\CMSIS\\Include\\",
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\CMSIS-Atmel\\1.2.0\\CMSIS\\Device\\ATMEL\\",
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino\\api\\deprecated",
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino\\api\\deprecated-avr-comp",
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino",
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\variants\\mkrwifi1010",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1\\arm-none-eabi",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include\\c++\\7.2.1\\backward",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\lib\\gcc\\arm-none-eabi\\7.2.1\\include",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\lib\\gcc\\arm-none-eabi\\7.2.1\\include-fixed",
"c:\\users\\falve\\appdata\\local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4\\arm-none-eabi\\include"
],
"forcedInclude": [
"C:\\Users\\falve\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\samd\\1.8.11\\cores\\arduino\\Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [
"F_CPU=48000000L",
...
}
]
}