microsoft / vscode-cpptools

Official repository for the Microsoft C/C++ extension for VS Code.
Other
5.51k stars 1.55k forks source link

Remove behavior where `compilerPath` overrides `compile_commands.json` entries, in favor of using an additional setting. #11889

Open CookiePLMonster opened 8 months ago

CookiePLMonster commented 8 months ago

Environment

Bug Summary and Steps to Reproduce

Bug Summary:

If both "compilerPath" and "compileCommands" are present in "c_cpp_properties.json", the former seems to take precedence during IntelliSense analysis. This results in the command line of the file present in compile_commands.json (e.g. -mcpu) to be ignored, leading to missing defines. Removing "compilerPath" results in the command line from compile_commands.json being taken into the account.

This behaviour goes directly against what c_cpp_properties.json reference documents:

If there is a matching entry in compile_commands.json for a file open in the editor, that command line will be used to configure IntelliSense for that file, instead of the other fields of c_cpp_properties.json.

Additionally, the intended behaviour (compile_commands.json overriding other options) was mentioned yesterday in another issue: https://github.com/microsoft/vscode-cpptools/issues/11880#issuecomment-1901003596.

Defining "compilerPath": "", works as a workaround.

Observed behaviour:

"compilerPath" takes precedence over "compileCommands" for populating system/architecture specific defines.

Expected behaviour:

"compileCommands" takes precedence over "compilerPath" for populating system/architecture specific defines.

Configuration and Logs

c_cpp_properties.json ``` { "configurations": [ { "name": "main", "intelliSenseMode": "gcc-arm", "compilerPath": "H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE", // This causes issues "compileCommands": "${workspaceFolder}/.vscode/compile_commands.json", "configurationProvider": "ms-vscode.cpptools", "cStandard": "gnu17", "cppStandard": "c++17" } ], "version": 4 } ```
Language server logs ("compilerPath" absent) ``` Querying compiler's default target using command line: "H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE" -dumpmachine Compiler returned default target value: arm-none-eabi Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -std=gnu17 -Wp,-v -E -dM -x c nul Attempting to get defaults from C compiler in compile_commands.json file: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE' Querying compiler for default C++ language standard using command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE -x c++ -E -dM nul ```
Language server logs ("compilerPath" present) ``` Querying compiler's default target using command line: "H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE" -dumpmachine Compiler returned default target value: arm-none-eabi Compiler query command line: H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE -std=c++17 -Wp,-v -E -dM -x c++ nul Attempting to get defaults from C++ compiler in "compilerPath" property: 'H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE' Compiler query command line: H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE -std=gnu17 -Wp,-v -E -dM -x c nul LSP: Message ignored due to no registered handler: $/setTrace ```

Other Extensions

No response

Additional context

No response

bobbrow commented 8 months ago

At the most basic level, that doc is oversimplified. We should update it. The strategy for resolving the system includes is documented here: https://code.visualstudio.com/docs/cpp/customize-default-settings-cpp#_system-include-pathdefines-resolution-strategies

For compile_commands.json we allow for users to specify compilerPath to pick a different compiler to query in the event that the compiler listed in compile_commands.json is not queryable.

However, if you are specifying a compiler in compilerPath and it's throwing away important options from the compiler command line that are listed in compile_commands.json, we treat that as a bug in the extension.

CookiePLMonster commented 8 months ago

However, if you are specifying a compiler in compilerPath and it's throwing away important options from the compiler command line that are listed in compile_commands.json, we treat that as a bug in the extension.

That matches my observations, yes. I included c_cpp_properties.json but I forgot to include my current compile_commands.json:

``` [ { "command": "H:\\dev\\flipper-zero\\.ufbt\\toolchain\\x86_64-windows\\bin\\arm-none-eabi-gcc.EXE -o H:\\dev\\flipper-zero\\.ufbt\\build\\demodemo\\util\\pbm.o -c -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Werror -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -D_GNU_SOURCE -DFW_CFG_default -D\"M_MEMORY_FULL(x)=abort()\" -DSTM32WB -DSTM32WB55xx -DUSE_FULL_ASSERT -DUSE_FULL_LL_DRIVER -DMBEDTLS_CONFIG_FILE=\\\"mbedtls_cfg.h\\\" -DPB_ENABLE_MALLOC -DFW_ORIGIN_Official -DFURI_NDEBUG -DNDEBUG -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/furi -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/applications/services -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/furi_hal_include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/ble_glue -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/furi_hal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mlib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/cmsis_core -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_cmsis/Include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_hal/Inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mbedtls/include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/toolbox -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/libusb_stm32/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_format -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/one_wire -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/ibutton -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/encoder_decoder -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/subghz -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nfc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/digital_signal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/pulse_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/signal_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/lfrfid -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_application -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/music_worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nanopb -DFAP_VERSION=\\\"0.1\\\" -IH:\\dev\\flipper-zero\\.ufbt\\build\\demodemo -IH:\\dev\\flipper-zero\\demodemo H:\\dev\\flipper-zero\\demodemo\\util\\pbm.c", "directory": "H:\\dev\\flipper-zero\\.ufbt\\current\\scripts\\ufbt", "file": "H:\\dev\\flipper-zero\\demodemo\\util\\pbm.c", "output": "H:\\dev\\flipper-zero\\.ufbt\\build\\demodemo\\util\\pbm.o" }, { "command": "H:\\dev\\flipper-zero\\.ufbt\\toolchain\\x86_64-windows\\bin\\arm-none-eabi-g++.EXE -o H:\\dev\\flipper-zero\\.ufbt\\build\\demodemo\\demodemo.o -c -std=c++17 -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-threadsafe-statics -ftemplate-depth=4096 -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Werror -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -D_GNU_SOURCE -DFW_CFG_default -D\"M_MEMORY_FULL(x)=abort()\" -DSTM32WB -DSTM32WB55xx -DUSE_FULL_ASSERT -DUSE_FULL_LL_DRIVER -DMBEDTLS_CONFIG_FILE=\\\"mbedtls_cfg.h\\\" -DPB_ENABLE_MALLOC -DFW_ORIGIN_Official -DFURI_NDEBUG -DNDEBUG -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/furi -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/applications/services -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/furi_hal_include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/ble_glue -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/furi_hal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mlib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/cmsis_core -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_cmsis/Include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_hal/Inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mbedtls/include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/toolbox -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/libusb_stm32/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_format -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/one_wire -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/ibutton -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/encoder_decoder -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/subghz -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nfc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/digital_signal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/pulse_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/signal_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/lfrfid -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_application -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/music_worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nanopb -DFAP_VERSION=\\\"0.1\\\" -IH:\\dev\\flipper-zero\\.ufbt\\build\\demodemo -IH:\\dev\\flipper-zero\\demodemo H:\\dev\\flipper-zero\\demodemo\\demodemo.cpp", "directory": "H:\\dev\\flipper-zero\\.ufbt\\current\\scripts\\ufbt", "file": "H:\\dev\\flipper-zero\\demodemo\\demodemo.cpp", "output": "H:\\dev\\flipper-zero\\.ufbt\\build\\demodemo\\demodemo.o" } ] ```

Based on this setup, I expect "compilerPath" to be used for files not present in compiler_commands.json, otherwise that JSON should take precedence. Instead, I am seeing that the JSON is completely ignored, as per the logs included above, and the result is that IntelliSense is lacking all the -mcpu=-inferred defines.

sean-mcmanus commented 8 months ago

It seems like we could add a setting to control the precedence...but the "pending" IntelliSense configuration changes would make this a non-issue.

CookiePLMonster commented 8 months ago

It seems like we could add a setting to control the precedence...

Is the current behaviour not a defect then? If I understand the docs correctly, compile_commands.json should have took precedence over "compilerPath" in this instance.

@sean-mcmanus If this is intended behaviour, how do you suggest to move forward? Update project's c_cpp_properties.json to have an empty compiler path and live with IntelliSense errors until the first compilation builds the commands JSON? I would consider this an acceptable tradeoff.

bobbrow commented 8 months ago

The current behavior of the compilerPath overriding the compiler in compile_commands.json is expected and not a defect. We would need to add a setting to disable it (as @sean-mcmanus mentioned).

We also do not currently handle the -mcpu= option. Are you getting incorrect results without it? We don't do anything special for different cpu types. We're currently limited to x86/x64/arm/arm64 support. If cortex "mostly" aligns with one of those, you might be able to set the intelliSenseMode property in your configuration to force a specific architecture that gives you the best results.

CookiePLMonster commented 8 months ago

We also do not currently handle the -mcpu= option. Are you getting incorrect results without it? We don't do anything special for different cpu types. We're currently limited to x86/x64/arm/arm64 support. If cortex "mostly" aligns with one of those, you might be able to set the intelliSenseMode property in your configuration to force a specific architecture that gives you the best results.

I believe gcc handles it for you - with "compilerPath" set to "", vscode invokes gcc with the parameters given, including -mcpu - please see the bits of the language server logs I included in the initial post.

The current behavior of the compilerPath overriding the compiler in compile_commands.json is expected and not a defect. We would need to add a setting to disable it (as @sean-mcmanus mentioned).

Therefore, to sum my issue up:

  1. compile_commands.json is parsed as expected and I get the correct results for my specific ARM CPU.
  2. "compilerPath"' needs to be set to "" in c_cpp_properties.json for this feature to work correctly.

With those in mind, I would say it's 50/50 on the c_cpp_properties.json configuration not realizing "compilerPath" overrides compile_commands.json, but also in my defense the docs really don't make that clear:

If there is a matching entry in compile_commands.json for a file open in the editor, that command line will be used to configure IntelliSense for that file, instead of the other fields of c_cpp_properties.json.

By "the other fields", I understood that this includes 'compilerPath". Since it doesn't, in my opinion the docs should clarify this.


As for this issue - I agree that overriding the compiler can be considered not a defect, but it is also overriding compiler commands. I believe this part is wrong.

EDIT: Just to make it entirely clear, let me visualise that -mcpu truly is used:

  1. "compilerPath" set explicitly - parameters from compile_commands.json are ignored, therefore IntelliSense doesn't know what CPU I am targetting: image
  2. "compilerPath" set to "" - compile_commands.json is parsed by IntelliSense that queries GCC for supported defines, therefore IntelliSense knows exactly what CPU I am targetting: image
bobbrow commented 8 months ago

Setting compilerPath to "" disables the compiler querying when used with includePath and defines (i.e. for source files not existing in compile_commands.json). So it's often better to just delete compilerPath from your configuration if you are not using it to override the compiler in compile_commands.json.

I was just talking to @Colengms and he said that we shouldn't be filtering out the -mcpu option from the query because it's not in our list of options to remove (because they mess up the query). So I'm not sure yet why it's not showing up in your query.

CookiePLMonster commented 8 months ago

So it's often better to just delete compilerPath from your configuration if you are not using it to override the compiler in compile_commands.json.

This results in IntelliSense trying to use cl.exe: [1/24/2024, 11:40:34 PM] For C source files, the cStandard was changed from "gnu17" to "c17" based on compiler args and querying compilerPath: "cl.exe" even though intelliSenseMode is set to gcc-arm, as I have showed in the first post.

I was just talking to @Colengms and he said that we shouldn't be filtering out the -mcpu option from the query because it's not in our list of options to remove (because they mess up the query). So I'm not sure yet why it's not showing up in your query.

Do note that with compilerPath set to a non-empty path, my language server logs don't mention compile_commands.json at all - they do, however, mention it when that path is "".

Colengms commented 8 months ago

Hi @CookiePLMonster .

Could you enable "C_Cpp.loggingLevel": "Debug" and give us more of the output from the C/C++ output panel leading up to the issue? Could you try this with the latest (insiders) version of the extension? I believe what you provided shows compiler queries for the base/default compiler, but additional invocations of the compiler should be occurring for compile command lines in your compile_commands.json. Unless there is an issue matching the filename in compile_commands.json, one of those logged command lines should refer to your -mcpu= argument and should indicate a reason why that compiler query has failed. When a compiler query fails for a compile_commands.json entry, the base/default configuration is used as a fallback. A failed compiler query could explain why you're seeing the base configuration used instead of the compiler and argument from the compile_commands.json entry.

Based on this setup, I expect "compilerPath" to be used for files not present in compiler_commands.json, otherwise that JSON should take precedence

I believe the following documentation is missing one detail:

If there is a matching entry in compile_commands.json for a file open in the editor, that command line will be used to configure IntelliSense for that file, instead of the other fields of c_cpp_properties.json.

Currently, if there is a "compilerPath" explicitly specified in your configuration (in c_cpp_properties.json, or C_Cpp.default.compilerPath), it will be used instead of the compiler specified in compile_commands.json, _when querying command lines from compile_commands.json_. The args from compile_commands.json should still be used, so you should see still an attempted compiler query in your log that refers to -mcpu=. This 'feature' was intended as a work-around for users working with generated compile_commands.json files which leverage a script or unsupported compiler, allowing them to arbitrary redirect the compiler query. This behavior isn't ideal, as it breaks 'fallback' from compile_commands.json to the base configuration, if that fallback configuration should use a different compiler path. That appears to be the core of the issue you're reporting. I'd like to use this issue to track moving this 'special' value for overring compile_commands.json compiler paths, to a new setting instead the current behavior, which seems to break base configuration fallback.

CookiePLMonster commented 8 months ago

Currently, if there is a "compilerPath" explicitly specified in your configuration (in c_cpp_properties.json, or C_Cpp.default.compilerPath), it will be used instead of the compiler specified in compile_commands.json, _when querying command lines from compile_commands.json_. The args from compile_commands.json should still be used, so you should see still an attempted compiler query in your log that refers to -mcpu=.

Please do note that the compile_commands.json I attached contains only the "command" parameter, the toolchain does not output "arguments". Therefore, if "compilerPath" overrides the entire command and not just the first part of it, that'll be an issue. However, I have been told that other tools (incl. alternative C/C++ extensions) handle such cases fine, and it is also documented as supported by this extension.


@Colengms As requested, I ran the test on the latest pre-release version of the extension (v1.19.2) and with the Debug logging level, C/C++ output panel (not C/C++ Diagnostics):

Autogenerated compile_commands.json entry for the file I run this test with ``` { "command": "H:\\dev\\flipper-zero\\.ufbt\\toolchain\\x86_64-windows\\bin\\arm-none-eabi-g++.EXE -o H:\\dev\\flipper-zero\\.ufbt\\build\\mode7_demo\\mode7_demo.o -c -std=c++17 -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-threadsafe-statics -ftemplate-depth=4096 -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Werror -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -D_GNU_SOURCE -DFW_CFG_default -D\"M_MEMORY_FULL(x)=abort()\" -DSTM32WB -DSTM32WB55xx -DUSE_FULL_ASSERT -DUSE_FULL_LL_DRIVER -DMBEDTLS_CONFIG_FILE=\\\"mbedtls_cfg.h\\\" -DPB_ENABLE_MALLOC -DFW_ORIGIN_Official -DFURI_NDEBUG -DNDEBUG -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/furi -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/applications/services -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/furi_hal_include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/ble_glue -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/furi_hal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/targets/f7/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mlib -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/cmsis_core -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_cmsis/Include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/stm32wb_hal/Inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/mbedtls/include -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/toolbox -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/libusb_stm32/inc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/drivers -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_format -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/one_wire -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/ibutton -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/encoder_decoder -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/infrared/worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/subghz -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nfc -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/digital_signal -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/pulse_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/signal_reader -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/lfrfid -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/flipper_application -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/music_worker -IH:/dev/flipper-zero/.ufbt/current/sdk_headers/f7_sdk/lib/nanopb -DFAP_VERSION=\\\"0.1\\\" -IH:\\dev\\flipper-zero\\.ufbt\\build\\mode7_demo -IH:\\dev\\flipper-zero\\mode7_demo H:\\dev\\flipper-zero\\mode7_demo\\mode7_demo.cpp", "directory": "H:\\dev\\flipper-zero\\.ufbt\\current\\scripts\\ufbt", "file": "H:\\dev\\flipper-zero\\mode7_demo\\mode7_demo.cpp", "output": "H:\\dev\\flipper-zero\\.ufbt\\build\\mode7_demo\\mode7_demo.o" } ```
"compilerPath" set to a non-empty path - notice no mention of -mcpu or even compile_commands.json ``` loggingLevel: Debug LSP: (received) cpptools/initialize (id: 1) LSP: (invoked) cpptools/initialize (id: 1) cpptools version (TypeScript): 1.19.2 cpptools version (native): 1.19.2.0 Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. LSP: Sending response (id: 1) LSP: (received) cpptools/didChangeCppProperties (id: 2) LSP: (invoked) cpptools/didChangeCppProperties (id: 2) Code browsing service initialized Querying compiler for default C++ language standard using command line: H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE -x c++ -E -dM nul LSP: (received) cpptools/queryCompilerDefaults (id: 3) LSP: (received) cpptools/didChangeCppProperties (id: 4) LSP: Message ignored due to no registered handler: $/setTrace Detected language standard version: gnu++14 Querying compiler's default target using command line: "H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE" -dumpmachine Compiler returned default target value: arm-none-eabi Compiler query command line: H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE -std=c++17 -Wp,-v -E -dM -x c++ nul Attempting to get defaults from C++ compiler in "compilerPath" property: 'H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE' Compiler query command line: H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE -std=gnu17 -Wp,-v -E -dM -x c nul Attempting to get defaults from C compiler in "compilerPath" property: 'H:/dev/flipper-zero/.ufbt/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.EXE' Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE-FIXED/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/MODE7_DEMO/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/C++/10.3.1/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/BUILD/MODE7_DEMO/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/CURRENT/SDK_HEADERS/F7_SDK/ will be indexed LSP: Sending response (id: 2) LSP: (invoked) cpptools/queryCompilerDefaults (id: 3) Discovering files... Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/ LSP: Sending response (id: 3) LSP: (invoked) cpptools/didChangeCppProperties (id: 4) LSP: Sending response (id: 4) Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE-FIXED/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/MODE7_DEMO/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/C++/10.3.1/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/BUILD/MODE7_DEMO/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/CURRENT/SDK_HEADERS/F7_SDK/ Discovering files: 3068 file(s) processed 1 file(s) removed from database Done discovering files. Populating include completion cache. Parsing remaining files... Parsing: 0 files(s) processed Done parsing remaining files. LSP: (received) cpptools/didChangeCppProperties (id: 5) LSP: (invoked) cpptools/didChangeCppProperties (id: 5) LSP: Sending response (id: 5) LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) textDocument/didOpen: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (invoked) textDocument/didOpen: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors Intellisense update pending for: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 6) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 6) LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 7) LSP: (received) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 8) LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 9) LSP: (received) cpptools/clearCustomConfigurations LSP: $/cancelRequest (cpptools/getCodeActions, id: 6) LSP: $/cancelRequest (cpptools/getCodeActions, id: 7) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 7) LSP: $/cancelRequest (cpptools/getFoldingRanges, id: 8) LSP: (invoked) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 8) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 9) LSP: Request canceled by server (, code: -32802, id: 8) LSP: Sending response (id: 9) LSP: (invoked) cpptools/clearCustomConfigurations IntelliSense update scheduled and TU acquisition started for: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp sending compilation args for H:\dev\flipper-zero\mode7_demo\mode7_demo.cpp include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\FURI include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\APPLICATIONS\SERVICES include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\FURI_HAL_INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\BLE_GLUE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\FURI_HAL include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MLIB include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\CMSIS_CORE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\STM32WB_CMSIS\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\STM32WB_HAL\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MBEDTLS\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\TOOLBOX include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\LIBUSB_STM32\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\DRIVERS include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\FLIPPER_FORMAT include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\ONE_WIRE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\IBUTTON include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\INFRARED\ENCODER_DECODER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\INFRARED\WORKER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\SUBGHZ include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\NFC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\DIGITAL_SIGNAL include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\PULSE_READER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\SIGNAL_READER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\LFRFID include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\FLIPPER_APPLICATION include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MUSIC_WORKER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\NANOPB include: H:\DEV\FLIPPER-ZERO\.UFBT\BUILD\MODE7_DEMO include: H:\DEV\FLIPPER-ZERO\MODE7_DEMO include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1 include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1\ARM-NONE-EABI include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1\BACKWARD include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\LIB\GCC\ARM-NONE-EABI\10.3.1\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\LIB\GCC\ARM-NONE-EABI\10.3.1\INCLUDE-FIXED include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE define: __DBL_MIN_EXP__=(-1021) define: __HQ_FBIT__=15 define: __UINT_LEAST16_MAX__=0xffff define: __ARM_SIZEOF_WCHAR_T=4 define: __ATOMIC_ACQUIRE=2 define: __SFRACT_IBIT__=0 define: __FLT_MIN__=1.1754943508222875e-38F define: __GCC_IEC_559_COMPLEX=0 define: __UFRACT_MAX__=0XFFFFP-16UR define: __UINT_LEAST8_TYPE__=unsigned char define: __DQ_FBIT__=63 define: __INTMAX_C(c)=c ## LL define: __ULFRACT_FBIT__=32 define: __CHAR_BIT__=8 define: __USQ_IBIT__=0 define: __UINT8_MAX__=0xff define: __ACCUM_FBIT__=15 define: __WINT_MAX__=0xffffffffU define: __FLT32_MIN_EXP__=(-125) define: __USFRACT_FBIT__=8 define: __ORDER_LITTLE_ENDIAN__=1234 define: __SIZE_MAX__=0xffffffffU define: __ARM_ARCH_ISA_ARM=1 define: __WCHAR_MAX__=0xffffffffU define: __LACCUM_IBIT__=32 define: __DBL_DENORM_MIN__=double(4.9406564584124654e-324L) define: __GCC_ATOMIC_CHAR_LOCK_FREE=1 define: __GCC_IEC_559=0 define: __FLT32X_DECIMAL_DIG__=17 define: __FLT_EVAL_METHOD__=0 define: __TQ_IBIT__=0 define: __LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LLK define: __FLT64_DECIMAL_DIG__=17 define: __GCC_ATOMIC_CHAR32_T_LOCK_FREE=1 define: __UINT_FAST64_MAX__=0xffffffffffffffffULL define: __SIG_ATOMIC_TYPE__=int define: __DBL_MIN_10_EXP__=(-307) define: __FINITE_MATH_ONLY__=0 define: __ARMEL__=1 define: __FLT32X_MAX_EXP__=1024 define: __LFRACT_IBIT__=0 define: __GNUC_PATCHLEVEL__=1 define: __FLT32_HAS_DENORM__=1 define: __LFRACT_MAX__=0X7FFFFFFFP-31LR define: __USA_FBIT__=16 define: __UINT_FAST8_MAX__=0xffffffffU define: __ARM_ARCH_4T__=1 define: __INT8_C(c)=c define: __INT_LEAST8_WIDTH__=8 define: __UINT_LEAST64_MAX__=0xffffffffffffffffULL define: __SA_FBIT__=15 define: __SHRT_MAX__=0x7fff define: __LDBL_MAX__=1.7976931348623157e+308L define: __FRACT_MAX__=0X7FFFP-15R define: __UFRACT_FBIT__=16 define: __UFRACT_MIN__=0.0UR define: __UINT_LEAST8_MAX__=0xff define: __GCC_ATOMIC_BOOL_LOCK_FREE=1 define: __UINTMAX_TYPE__=long long unsigned int define: __LLFRACT_EPSILON__=0x1P-63LLR define: __FLT_EVAL_METHOD_TS_18661_3__=0 define: __CHAR_UNSIGNED__=1 define: __UINT32_MAX__=0xffffffffUL define: __GXX_EXPERIMENTAL_CXX0X__=1 define: __ULFRACT_MAX__=0XFFFFFFFFP-32ULR define: __TA_IBIT__=64 define: __LDBL_MAX_EXP__=1024 define: __WINT_MIN__=0U define: __INT_LEAST16_WIDTH__=16 define: __ULLFRACT_MIN__=0.0ULLR define: __SCHAR_MAX__=0x7f define: __WCHAR_MIN__=0U define: __INT64_C(c)=c ## LL define: __GCC_ATOMIC_POINTER_LOCK_FREE=1 define: __LLACCUM_MIN__=(-0X1P31LLK-0X1P31LLK) define: __SIZEOF_INT__=4 define: __FLT32X_MANT_DIG__=53 define: __GCC_ATOMIC_CHAR16_T_LOCK_FREE=1 define: __USACCUM_IBIT__=8 define: __USER_LABEL_PREFIX__= define: __FLT32_MAX_10_EXP__=38 define: __STDC_HOSTED__=1 define: __LFRACT_MIN__=(-0.5LR-0.5LR) define: __HA_IBIT__=8 define: __DBL_DIG__=15 define: __FLT32_DIG__=6 define: __FLT_EPSILON__=1.1920928955078125e-7F define: __APCS_32__=1 define: __GXX_WEAK__=1 define: __SHRT_WIDTH__=16 define: __USFRACT_IBIT__=0 define: __LDBL_MIN__=2.2250738585072014e-308L define: __FRACT_MIN__=(-0.5R-0.5R) define: __DA_IBIT__=32 define: __ARM_SIZEOF_MINIMAL_ENUM=1 define: __FLT32X_HAS_INFINITY__=1 define: __INT32_MAX__=0x7fffffffL define: __UQQ_FBIT__=8 define: __INT_WIDTH__=32 define: __SIZEOF_LONG__=4 define: __UACCUM_MAX__=0XFFFFFFFFP-16UK define: __UINT16_C(c)=c define: __DECIMAL_DIG__=17 define: __LFRACT_EPSILON__=0x1P-31LR define: __FLT64_EPSILON__=2.2204460492503131e-16F64 define: __ULFRACT_MIN__=0.0ULR define: __INT16_MAX__=0x7fff define: __FLT64_MIN_EXP__=(-1021) define: __LDBL_HAS_QUIET_NAN__=1 define: __ULACCUM_IBIT__=32 define: __FLT64_MANT_DIG__=53 define: __UACCUM_EPSILON__=0x1P-16UK define: __GNUC__=10 define: __ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULLK define: __GXX_RTTI=1 define: __HQ_IBIT__=0 define: __FLT_HAS_DENORM__=1 define: __SIZEOF_LONG_DOUBLE__=8 define: __SA_IBIT__=16 define: __BIGGEST_ALIGNMENT__=8 define: __STDC_UTF_16__=1 define: __FLT64_MAX_10_EXP__=308 define: __GNUC_STDC_INLINE__=1 define: __DQ_IBIT__=0 define: __FLT32_HAS_INFINITY__=1 define: __DBL_MAX__=double(1.7976931348623157e+308L) define: __ULFRACT_IBIT__=0 define: __INT_FAST32_MAX__=0x7fffffff define: __DBL_HAS_INFINITY__=1 define: __HAVE_SPECULATION_SAFE_VALUE=1 define: __ACCUM_IBIT__=16 define: __THUMB_INTERWORK__=1 define: __INTPTR_WIDTH__=32 define: __UINT_LEAST32_MAX__=0xffffffffUL define: __ULLACCUM_IBIT__=32 define: __LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK define: __FLT32X_HAS_DENORM__=1 define: __INT_FAST16_TYPE__=int define: __STRICT_ANSI__=1 define: __LDBL_HAS_DENORM__=1 define: __cplusplus=201703L define: __INT_LEAST32_MAX__=0x7fffffffL define: __ARM_PCS=1 define: __ACCUM_MAX__=0X7FFFFFFFP-15K define: __DEPRECATED=1 define: __DBL_MAX_EXP__=1024 define: __USACCUM_EPSILON__=0x1P-8UHK define: __WCHAR_WIDTH__=32 define: __FLT32_MAX__=3.4028234663852886e+38F32 define: __GCC_ATOMIC_LONG_LOCK_FREE=1 define: __SFRACT_MAX__=0X7FP-7HR define: __FRACT_IBIT__=0 define: __PTRDIFF_MAX__=0x7fffffff define: __UACCUM_MIN__=0.0UK define: __UACCUM_IBIT__=16 define: __FLT32_HAS_QUIET_NAN__=1 define: __GNUG__=10 define: __LONG_LONG_MAX__=0x7fffffffffffffffLL define: __ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK define: __SIZEOF_WINT_T__=4 define: __LONG_LONG_WIDTH__=64 define: __FLT32_MAX_EXP__=128 define: __ULLACCUM_MIN__=0.0ULLK define: __GXX_ABI_VERSION=1014 define: __UTA_FBIT__=64 define: __FLT_MIN_EXP__=(-125) define: __UFRACT_IBIT__=0 define: __INT_FAST64_TYPE__=long long int define: __FLT64_DENORM_MIN__=4.9406564584124654e-324F64 define: __DBL_MIN__=double(2.2250738585072014e-308L) define: __SIZEOF_POINTER__=4 define: __SIZE_TYPE__=unsigned int define: __DBL_HAS_QUIET_NAN__=1 define: __FLT32X_EPSILON__=2.2204460492503131e-16F32x define: __LACCUM_MIN__=(-0X1P31LK-0X1P31LK) define: __FRACT_FBIT__=15 define: __ULLACCUM_FBIT__=32 define: __GXX_TYPEINFO_EQUALITY_INLINE=0 define: __FLT64_MIN_10_EXP__=(-307) define: __ULLFRACT_EPSILON__=0x1P-64ULLR define: __USES_INITFINI__=1 define: __REGISTER_PREFIX__= define: __UINT16_MAX__=0xffff define: __ACCUM_MIN__=(-0X1P15K-0X1P15K) define: __SQ_IBIT__=0 define: __FLT32_MIN__=1.1754943508222875e-38F32 define: __UINT8_TYPE__=unsigned char define: __UHA_FBIT__=8 define: __FLT_DIG__=6 define: __NO_INLINE__=1 define: __SFRACT_MIN__=(-0.5HR-0.5HR) define: __UTQ_FBIT__=128 define: __DEC_EVAL_METHOD__=2 define: __FLT_MANT_DIG__=24 define: __LDBL_DECIMAL_DIG__=17 define: __VERSION__="10.3.1 20210824 (release)" define: __UINT64_C(c)=c ## ULL define: __ULLFRACT_FBIT__=64 define: __SOFTFP__=1 define: __FRACT_EPSILON__=0x1P-15R define: __ULACCUM_MIN__=0.0ULK define: __UDA_FBIT__=32 define: __LLACCUM_EPSILON__=0x1P-31LLK define: __GCC_ATOMIC_INT_LOCK_FREE=1 define: __FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __USFRACT_MIN__=0.0UHR define: __FLT32_MANT_DIG__=24 define: __UQQ_IBIT__=0 define: __USFRACT_MAX__=0XFFP-8UHR define: __SCHAR_WIDTH__=8 define: __INT32_C(c)=c ## L define: __ORDER_PDP_ENDIAN__=3412 define: __UHQ_FBIT__=16 define: __LLACCUM_FBIT__=31 define: __INT_FAST32_TYPE__=int define: __UINT_LEAST16_TYPE__=short unsigned int define: __DBL_HAS_DENORM__=1 define: __UINT64_MAX__=0xffffffffffffffffULL define: __UDQ_FBIT__=64 define: __INT8_TYPE__=signed char define: __ELF__=1 define: __GCC_ASM_FLAG_OUTPUTS__=1 define: __SACCUM_EPSILON__=0x1P-7HK define: __ULFRACT_EPSILON__=0x1P-32ULR define: __LLFRACT_FBIT__=63 define: __FLT_RADIX__=2 define: __INT_LEAST16_TYPE__=short int define: __LDBL_EPSILON__=2.2204460492503131e-16L define: __UINTMAX_C(c)=c ## ULL define: __SACCUM_MAX__=0X7FFFP-7HK define: __FLT32X_MIN__=2.2250738585072014e-308F32x define: __SIG_ATOMIC_MAX__=0x7fffffff define: __UACCUM_FBIT__=16 define: __GCC_ATOMIC_WCHAR_T_LOCK_FREE=1 define: __VFP_FP__=1 define: __SIZEOF_PTRDIFF_T__=4 define: __LACCUM_EPSILON__=0x1P-31LK define: __LDBL_DIG__=15 define: __FLT32X_MIN_EXP__=(-1021) define: __INT_FAST16_MAX__=0x7fffffff define: __FLT64_DIG__=15 define: __UINT_FAST32_MAX__=0xffffffffU define: __UINT_LEAST64_TYPE__=long long unsigned int define: __SFRACT_EPSILON__=0x1P-7HR define: __FLT_HAS_QUIET_NAN__=1 define: __FLT_MAX_10_EXP__=38 define: __LONG_MAX__=0x7fffffffL define: __SIZEOF_SIZE_T__=4 define: __FLT_HAS_INFINITY__=1 define: __UINT_FAST16_TYPE__=unsigned int define: __ARM_32BIT_STATE=1 define: __INT_FAST32_WIDTH__=32 define: __CHAR16_TYPE__=short unsigned int define: __PRAGMA_REDEFINE_EXTNAME=1 define: __SIZE_WIDTH__=32 define: __INT_LEAST16_MAX__=0x7fff define: __INT64_MAX__=0x7fffffffffffffffLL define: __SACCUM_FBIT__=7 define: __FLT32_DENORM_MIN__=1.4012984643248171e-45F32 define: __SIG_ATOMIC_WIDTH__=32 define: __INT_LEAST64_TYPE__=long long int define: __INT16_TYPE__=short int define: __INT_LEAST8_TYPE__=signed char define: __SQ_FBIT__=31 define: __ARM_ARCH_ISA_THUMB=1 define: __INT_FAST8_MAX__=0x7fffffff define: __ARM_ARCH=4 define: __INTPTR_MAX__=0x7fffffff define: __QQ_FBIT__=7 define: __UTA_IBIT__=64 define: __FLT64_HAS_QUIET_NAN__=1 define: __FLT32_MIN_10_EXP__=(-37) define: __EXCEPTIONS=1 define: __PTRDIFF_WIDTH__=32 define: __LDBL_MANT_DIG__=53 define: __SFRACT_FBIT__=7 define: __SACCUM_MIN__=(-0X1P7HK-0X1P7HK) define: __FLT64_HAS_INFINITY__=1 define: __STDCPP_DEFAULT_NEW_ALIGNMENT__=8 define: __SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1) define: __INTPTR_TYPE__=int define: __UINT16_TYPE__=short unsigned int define: __WCHAR_TYPE__=unsigned int define: __SIZEOF_FLOAT__=4 define: __TQ_FBIT__=127 define: __USQ_FBIT__=32 define: __UINTPTR_MAX__=0xffffffffU define: __INT_FAST64_WIDTH__=64 define: __FLT32_DECIMAL_DIG__=9 define: __INT_FAST64_MAX__=0x7fffffffffffffffLL define: __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 define: __FLT_NORM_MAX__=3.4028234663852886e+38F define: __UINT_FAST64_TYPE__=long long unsigned int define: __INT_MAX__=0x7fffffff define: __LACCUM_FBIT__=31 define: __USACCUM_MIN__=0.0UHK define: __UHA_IBIT__=8 define: __INT64_TYPE__=long long int define: __FLT_MAX_EXP__=128 define: __UTQ_IBIT__=0 define: __DBL_MANT_DIG__=53 define: __INT_LEAST64_MAX__=0x7fffffffffffffffLL define: __WINT_TYPE__=unsigned int define: __UINT_LEAST32_TYPE__=long unsigned int define: __SIZEOF_SHORT__=2 define: __ULLFRACT_IBIT__=0 define: __FLT32_NORM_MAX__=3.4028234663852886e+38F32 define: __LDBL_MIN_EXP__=(-1021) define: __arm__=1 define: __FLT64_MAX__=1.7976931348623157e+308F64 define: __UDA_IBIT__=32 define: __WINT_WIDTH__=32 define: __INT_LEAST8_MAX__=0x7f define: __INT_LEAST64_WIDTH__=64 define: __FLT32X_MAX_10_EXP__=308 define: __LFRACT_FBIT__=31 define: __WCHAR_UNSIGNED__=1 define: __LDBL_MAX_10_EXP__=308 define: __ATOMIC_RELAXED=0 define: __DBL_EPSILON__=double(2.2204460492503131e-16L) define: __UINT8_C(c)=c define: __FLT64_MAX_EXP__=1024 define: __INT_LEAST32_TYPE__=long int define: __SIZEOF_WCHAR_T__=4 define: __LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR define: __FLT64_NORM_MAX__=1.7976931348623157e+308F64 define: __INTMAX_MAX__=0x7fffffffffffffffLL define: __INT_FAST8_TYPE__=int define: __ULLACCUM_EPSILON__=0x1P-32ULLK define: __USACCUM_MAX__=0XFFFFP-8UHK define: __LDBL_HAS_INFINITY__=1 define: __UHQ_IBIT__=0 define: __ARM_FEATURE_COPROC=1 define: __LLACCUM_IBIT__=32 define: __FLT64_HAS_DENORM__=1 define: __FLT32_EPSILON__=1.1920928955078125e-7F32 define: __DBL_DECIMAL_DIG__=17 define: __STDC_UTF_32__=1 define: __INT_FAST8_WIDTH__=32 define: __FLT32X_MAX__=1.7976931348623157e+308F32x define: __TA_FBIT__=63 define: __DBL_NORM_MAX__=double(1.7976931348623157e+308L) define: __BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __UDQ_IBIT__=0 define: __INTMAX_WIDTH__=64 define: __ORDER_BIG_ENDIAN__=4321 define: __UINT64_TYPE__=long long unsigned int define: __ACCUM_EPSILON__=0x1P-15K define: __UINT32_C(c)=c ## UL define: __FLT_DENORM_MIN__=1.4012984643248171e-45F define: __LLFRACT_IBIT__=0 define: __INT8_MAX__=0x7f define: __LONG_WIDTH__=32 define: __UINT_FAST32_TYPE__=unsigned int define: __FLT32X_NORM_MAX__=1.7976931348623157e+308F32x define: __CHAR32_TYPE__=long unsigned int define: __FLT_MAX__=3.4028234663852886e+38F define: __USACCUM_FBIT__=8 define: __INT32_TYPE__=long int define: __SIZEOF_DOUBLE__=8 define: __FLT_MIN_10_EXP__=(-37) define: __UFRACT_EPSILON__=0x1P-16UR define: __FLT64_MIN__=2.2250738585072014e-308F64 define: __INT_LEAST32_WIDTH__=32 define: __INTMAX_TYPE__=long long int define: __FLT32X_HAS_QUIET_NAN__=1 define: __ATOMIC_CONSUME=1 define: __GNUC_MINOR__=3 define: __INT_FAST16_WIDTH__=32 define: __UINTMAX_MAX__=0xffffffffffffffffULL define: __FLT32X_DENORM_MIN__=4.9406564584124654e-324F32x define: __HA_FBIT__=7 define: __DBL_MAX_10_EXP__=308 define: __LDBL_DENORM_MIN__=4.9406564584124654e-324L define: __INT16_C(c)=c define: __STDC__=1 define: __FLT32X_DIG__=15 define: __PTRDIFF_TYPE__=int define: __LLFRACT_MIN__=(-0.5LLR-0.5LLR) define: __ATOMIC_SEQ_CST=5 define: __DA_FBIT__=31 define: __UINT32_TYPE__=long unsigned int define: __FLT32X_MIN_10_EXP__=(-307) define: __UINTPTR_TYPE__=unsigned int define: __USA_IBIT__=16 define: __ARM_EABI__=1 define: __LDBL_MIN_10_EXP__=(-307) define: __SIZEOF_LONG_LONG__=8 define: __ULACCUM_EPSILON__=0x1P-32ULK define: __SACCUM_IBIT__=8 define: __GCC_ATOMIC_LLONG_LOCK_FREE=1 define: __FLT_DECIMAL_DIG__=9 define: __UINT_FAST16_MAX__=0xffffffffU define: __LDBL_NORM_MAX__=1.7976931348623157e+308L define: __GCC_ATOMIC_SHORT_LOCK_FREE=1 define: __ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR define: __UINT_FAST8_TYPE__=unsigned int define: __USFRACT_EPSILON__=0x1P-8UHR define: __ULACCUM_FBIT__=32 define: __QQ_IBIT__=0 define: __ATOMIC_ACQ_REL=4 define: __ATOMIC_RELEASE=3 define: _GNU_SOURCE define: FW_CFG_default define: M_MEMORY_FULL(x)=abort() define: STM32WB define: STM32WB55xx define: USE_FULL_ASSERT define: USE_FULL_LL_DRIVER define: MBEDTLS_CONFIG_FILE="mbedtls_cfg.h" define: PB_ENABLE_MALLOC define: FW_ORIGIN_Official define: FURI_NDEBUG define: NDEBUG define: FAP_VERSION="0.1" other: --g++ other: --gnu_version=100301 stdver: c++17 intelliSenseMode: windows-gcc-arm Update IntelliSense time (sec): 0.139 LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 10) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 10) LSP: Sending response (id: 10) LSP: (received) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 11) LSP: (invoked) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 11) LSP: Sending response (id: 11) LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 12) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 12) LSP: (received) cpptools/getDocumentSymbols: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 13) LSP: Sending response (id: 12) LSP: (invoked) cpptools/getDocumentSymbols: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 13) LSP: Sending response (id: 13) LSP: Message ignored due to no registered handler: $/setTrace LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. Database safe to open. LSP: (received) cpptools/getDiagnostics (id: 14) LSP: (invoked) cpptools/getDiagnostics (id: 14) LSP: Sending response (id: 14) LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/didChangeActiveEditor: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (invoked) cpptools/didChangeActiveEditor: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/didChangeActiveEditor: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (invoked) cpptools/didChangeActiveEditor: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors ```
"compilerPath" = "" - notice -mcpu and compile_commands.json are both mentioned ``` loggingLevel: Debug LSP: (received) cpptools/initialize (id: 1) LSP: (invoked) cpptools/initialize (id: 1) cpptools version (TypeScript): 1.19.2 cpptools version (native): 1.19.2.0 Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. LSP: Sending response (id: 1) LSP: Message ignored due to no registered handler: $/setTrace LSP: (received) cpptools/didChangeCppProperties (id: 2) LSP: (invoked) cpptools/didChangeCppProperties (id: 2) Code browsing service initialized Skipping query of compiler due to explicitly empty compilerPath Skipping query of compiler due to explicitly empty compilerPath Querying compiler for default C++ language standard using command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE -x c++ -E -dM nul LSP: (received) cpptools/queryCompilerDefaults (id: 3) LSP: (received) cpptools/didChangeCppProperties (id: 4) LSP: Message ignored due to no registered handler: $/setTrace Detected language standard version: gnu++14 Querying compiler's default target using command line: "H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE" -dumpmachine Compiler returned default target value: arm-none-eabi Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -std=gnu17 -Wp,-v -E -dM -x c nul Attempting to get defaults from C compiler in compile_commands.json file: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE' Querying compiler for default C++ language standard using command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE -x c++ -E -dM nul LSP: (received) cpptools/queryCompilerDefaults (id: 5) Detected language standard version: gnu++14 Querying compiler's default target using command line: "H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE" -dumpmachine Compiler returned default target value: arm-none-eabi Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE -std=c++17 -fno-rtti -fno-use-cxa-atexit -fno-exceptions -fno-threadsafe-statics -ftemplate-depth=4096 -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Wall -Wextra -Wno-address-of-packed-member -Wredundant-decls -Wdouble-promotion -fdata-sections -ffunction-sections -fsingle-precision-constant -fno-math-errno -g -Os -mword-relocations -mlong-calls -fno-common -nostdlib -Wp,-v -E -dM -x c++ nul Attempting to get defaults from C++ compiler in compile_commands.json file: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE' Folder: H:/DEV/FLIPPER-ZERO/MODE7_DEMO/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE-FIXED/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/BUILD/MODE7_DEMO/ will be indexed Folder: H:/DEV/FLIPPER-ZERO/.UFBT/CURRENT/SDK_HEADERS/F7_SDK/ will be indexed LSP: Sending response (id: 2) LSP: (invoked) cpptools/queryCompilerDefaults (id: 3) Discovering files... LSP: (received) cpptools/queryCompilerDefaults (id: 6) Processing folder (recursive): H:/DEV/FLIPPER-ZERO/MODE7_DEMO/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE-FIXED/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/LIB/GCC/ARM-NONE-EABI/10.3.1/INCLUDE/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/TOOLCHAIN/X86_64-WINDOWS/ARM-NONE-EABI/INCLUDE/ LSP: Sending response (id: 3) LSP: (invoked) cpptools/didChangeCppProperties (id: 4) LSP: Sending response (id: 4) LSP: (invoked) cpptools/queryCompilerDefaults (id: 5) Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE -std=c17 -Wp,-v -E -dM -x c nul Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/BUILD/MODE7_DEMO/ Processing folder (recursive): H:/DEV/FLIPPER-ZERO/.UFBT/CURRENT/SDK_HEADERS/F7_SDK/ Discovering files: 1798 file(s) processed 0 file(s) removed from database Done discovering files. Populating include completion cache. Parsing remaining files... Parsing: 0 files(s) processed Done parsing remaining files. Attempting to get defaults from C compiler in "compilerPath" property: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE' Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE -std=gnu++14 -Wp,-v -E -dM -x c++ nul Attempting to get defaults from C++ compiler in "compilerPath" property: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-gcc.EXE' LSP: Sending response (id: 5) LSP: (invoked) cpptools/queryCompilerDefaults (id: 6) Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE -std=c17 -Wp,-v -E -dM -x c nul Attempting to get defaults from C compiler in "compilerPath" property: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE' Compiler query command line: H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE -std=gnu++14 -Wp,-v -E -dM -x c++ nul Attempting to get defaults from C++ compiler in "compilerPath" property: 'H:\dev\flipper-zero\.ufbt\toolchain\x86_64-windows\bin\arm-none-eabi-g++.EXE' LSP: Sending response (id: 6) LSP: (received) cpptools/didChangeCppProperties (id: 7) LSP: (invoked) cpptools/didChangeCppProperties (id: 7) LSP: Sending response (id: 7) LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) textDocument/didOpen: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (invoked) textDocument/didOpen: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors Intellisense update pending for: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/didChangeVisibleTextEditors LSP: (invoked) cpptools/didChangeVisibleTextEditors LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 8) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 8) LSP: (received) cpptools/didChangeSettings LSP: (received) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 9) LSP: Sending response (id: 8) LSP: (invoked) cpptools/didChangeSettings LSP: (received) cpptools/clearCustomConfigurations Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (invoked) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 9) LSP: (invoked) cpptools/clearCustomConfigurations LSP: $/cancelRequest (cpptools/getFoldingRanges, id: 9) LSP: $/cancelRequest (, id: 8) LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 10) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 10) LSP: Sending response (id: 10) IntelliSense update scheduled and TU acquisition started for: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp sending compilation args for H:\dev\flipper-zero\mode7_demo\mode7_demo.cpp include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\FURI include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\APPLICATIONS\SERVICES include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\FURI_HAL_INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\BLE_GLUE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\FURI_HAL include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\TARGETS\F7\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MLIB include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\CMSIS_CORE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\STM32WB_CMSIS\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\STM32WB_HAL\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MBEDTLS\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\TOOLBOX include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\LIBUSB_STM32\INC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\DRIVERS include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\FLIPPER_FORMAT include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\ONE_WIRE include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\IBUTTON include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\INFRARED\ENCODER_DECODER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\INFRARED\WORKER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\SUBGHZ include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\NFC include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\DIGITAL_SIGNAL include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\PULSE_READER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\SIGNAL_READER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\LFRFID include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\FLIPPER_APPLICATION include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\MUSIC_WORKER include: H:\DEV\FLIPPER-ZERO\.UFBT\CURRENT\SDK_HEADERS\F7_SDK\LIB\NANOPB include: H:\DEV\FLIPPER-ZERO\.UFBT\BUILD\MODE7_DEMO include: H:\DEV\FLIPPER-ZERO\MODE7_DEMO include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1 include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1\ARM-NONE-EABI\THUMB\V7E-M+FP\HARD include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE\C++\10.3.1\BACKWARD include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\LIB\GCC\ARM-NONE-EABI\10.3.1\INCLUDE include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\LIB\GCC\ARM-NONE-EABI\10.3.1\INCLUDE-FIXED include: H:\DEV\FLIPPER-ZERO\.UFBT\TOOLCHAIN\X86_64-WINDOWS\ARM-NONE-EABI\INCLUDE define: __DBL_MIN_EXP__=(-1021) define: __HQ_FBIT__=15 define: __UINT_LEAST16_MAX__=0xffff define: __ARM_SIZEOF_WCHAR_T=4 define: __SFRACT_IBIT__=0 define: __FLT_MIN__=1.1754943508222875e-38F define: __GCC_IEC_559_COMPLEX=0 define: __UFRACT_MAX__=0XFFFFP-16UR define: __UINT_LEAST8_TYPE__=unsigned char define: __FLT_MAX_EXP__=128 define: __DQ_FBIT__=63 define: __INTMAX_C(c)=c ## LL define: __ARM_FEATURE_SAT=1 define: __ULFRACT_FBIT__=32 define: __CHAR_BIT__=8 define: __USQ_IBIT__=0 define: __UINT8_MAX__=0xff define: __ACCUM_FBIT__=15 define: __WINT_MAX__=0xffffffffU define: __FLT32_MIN_EXP__=(-125) define: __USFRACT_FBIT__=8 define: __ORDER_LITTLE_ENDIAN__=1234 define: __SIZE_MAX__=0xffffffffU define: __WCHAR_MAX__=0xffffffffU define: __LACCUM_IBIT__=32 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 define: __DBL_DENORM_MIN__=double(4.9406564584124654e-324L) define: __GCC_ATOMIC_CHAR_LOCK_FREE=2 define: __GCC_IEC_559=0 define: __FLT32X_DECIMAL_DIG__=17 define: __FLT_EVAL_METHOD__=0 define: __TQ_IBIT__=0 define: __LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LLK define: __FLT64_DECIMAL_DIG__=17 define: __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 define: __INTPTR_WIDTH__=32 define: __UINT_FAST64_MAX__=0xffffffffffffffffULL define: __SIG_ATOMIC_TYPE__=int define: __DBL_MIN_10_EXP__=(-307) define: __FINITE_MATH_ONLY__=0 define: __ARMEL__=1 define: __FLT32X_MAX_EXP__=1024 define: __LFRACT_IBIT__=0 define: __GNUC_PATCHLEVEL__=1 define: __FLT32_HAS_DENORM__=1 define: __USA_FBIT__=16 define: __UINT_FAST8_MAX__=0xffffffffU define: __INT8_C(c)=c define: __INT_LEAST8_WIDTH__=8 define: __UINT_LEAST64_MAX__=0xffffffffffffffffULL define: __INT16_MAX__=0x7fff define: __SA_FBIT__=15 define: __APCS_32__=1 define: __SHRT_MAX__=0x7fff define: __LDBL_MAX__=1.7976931348623157e+308L define: __FRACT_MAX__=0X7FFFP-15R define: __thumb2__=1 define: __UFRACT_FBIT__=16 define: __ARM_FP=4 define: __UFRACT_MIN__=0.0UR define: __UINT_LEAST8_MAX__=0xff define: __GCC_ATOMIC_BOOL_LOCK_FREE=2 define: __UINTMAX_TYPE__=long long unsigned int define: __LLFRACT_EPSILON__=0x1P-63LLR define: __FLT_EVAL_METHOD_TS_18661_3__=0 define: __CHAR_UNSIGNED__=1 define: __UINT32_MAX__=0xffffffffUL define: __GXX_EXPERIMENTAL_CXX0X__=1 define: __ULFRACT_MAX__=0XFFFFFFFFP-32ULR define: __TA_IBIT__=64 define: __LDBL_MAX_EXP__=1024 define: __WINT_MIN__=0U define: __ARM_ASM_SYNTAX_UNIFIED__=1 define: __INT_LEAST16_WIDTH__=16 define: __ULLFRACT_MIN__=0.0ULLR define: __SCHAR_MAX__=0x7f define: __WCHAR_MIN__=0U define: __INT64_C(c)=c ## LL define: __GCC_ATOMIC_POINTER_LOCK_FREE=2 define: __LLACCUM_MIN__=(-0X1P31LLK-0X1P31LLK) define: __SIZEOF_INT__=4 define: __FLT32X_MANT_DIG__=53 define: __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2 define: __USACCUM_IBIT__=8 define: __USER_LABEL_PREFIX__= define: __STDC_HOSTED__=1 define: __NO_MATH_ERRNO__=1 define: __ARM_FEATURE_IDIV=1 define: __FLT_DIG__=6 define: __LFRACT_MIN__=(-0.5LR-0.5LR) define: __HA_IBIT__=8 define: __FLT32_DIG__=6 define: __FLT_EPSILON__=1.1920928955078125e-7F define: __GXX_WEAK__=1 define: __SHRT_WIDTH__=16 define: __USFRACT_IBIT__=0 define: __LDBL_MIN__=2.2250738585072014e-308L define: __FRACT_MIN__=(-0.5R-0.5R) define: __DA_IBIT__=32 define: __ARM_SIZEOF_MINIMAL_ENUM=1 define: __FLT32X_HAS_INFINITY__=1 define: __UQQ_FBIT__=8 define: __SIZEOF_LONG__=4 define: __UACCUM_MAX__=0XFFFFFFFFP-16UK define: __DECIMAL_DIG__=17 define: __LFRACT_EPSILON__=0x1P-31LR define: __FLT64_EPSILON__=2.2204460492503131e-16F64 define: __FLT64_MIN_EXP__=(-1021) define: __ARM_PCS_VFP=1 define: __LDBL_HAS_QUIET_NAN__=1 define: __ULACCUM_IBIT__=32 define: __ARM_FEATURE_FMA=1 define: __FLT64_MANT_DIG__=53 define: __UACCUM_EPSILON__=0x1P-16UK define: __GNUC__=10 define: __ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULLK define: __HQ_IBIT__=0 define: __FLT_HAS_DENORM__=1 define: __SIZEOF_LONG_DOUBLE__=8 define: __SA_IBIT__=16 define: __BIGGEST_ALIGNMENT__=8 define: __STDC_UTF_16__=1 define: __INTPTR_TYPE__=int define: __SIZE_TYPE__=unsigned int define: __FLT64_MAX_10_EXP__=308 define: __DBL_DIG__=15 define: __ULLACCUM_FBIT__=32 define: __GNUC_STDC_INLINE__=1 define: __DQ_IBIT__=0 define: __DBL_MAX__=double(1.7976931348623157e+308L) define: __ULFRACT_IBIT__=0 define: __INT_FAST32_MAX__=0x7fffffff define: __DBL_HAS_INFINITY__=1 define: __HAVE_SPECULATION_SAFE_VALUE=1 define: __ACCUM_IBIT__=16 define: __THUMB_INTERWORK__=1 define: __UINT_LEAST32_MAX__=0xffffffffUL define: __ULLACCUM_IBIT__=32 define: __LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK define: __FLT32X_HAS_DENORM__=1 define: __INT_FAST16_TYPE__=int define: __STRICT_ANSI__=1 define: __LDBL_HAS_DENORM__=1 define: __ARM_FEATURE_LDREX=7 define: __cplusplus=201703L define: __FLT32_DECIMAL_DIG__=9 define: __INT_LEAST32_MAX__=0x7fffffffL define: __ACCUM_MAX__=0X7FFFFFFFP-15K define: __DEPRECATED=1 define: __DBL_MAX_EXP__=1024 define: __USACCUM_EPSILON__=0x1P-8UHK define: __WCHAR_WIDTH__=32 define: __FLT32_MAX__=3.4028234663852886e+38F32 define: __SFRACT_MAX__=0X7FP-7HR define: __FRACT_IBIT__=0 define: __PTRDIFF_MAX__=0x7fffffff define: __UACCUM_MIN__=0.0UK define: __UACCUM_IBIT__=16 define: __FLT32_HAS_QUIET_NAN__=1 define: __GNUG__=10 define: __LONG_LONG_MAX__=0x7fffffffffffffffLL define: __ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK define: __SIZEOF_WINT_T__=4 define: __ARM_FEATURE_UNALIGNED=1 define: __LONG_LONG_WIDTH__=64 define: __FLT32_MAX_EXP__=128 define: __ULLACCUM_MIN__=0.0ULLK define: __GXX_ABI_VERSION=1014 define: __UTA_FBIT__=64 define: __GCC_HAVE_DWARF2_CFI_ASM=1 define: __UFRACT_IBIT__=0 define: __USQ_FBIT__=32 define: __ARM_FEATURE_QBIT=1 define: __INT_FAST64_TYPE__=long long int define: __FP_FAST_FMAF=1 define: __FLT64_DENORM_MIN__=4.9406564584124654e-324F64 define: __DBL_MIN__=double(2.2250738585072014e-308L) define: __SIZEOF_POINTER__=4 define: __INT16_TYPE__=short int define: __DBL_HAS_QUIET_NAN__=1 define: __FLT32X_EPSILON__=2.2204460492503131e-16F32x define: __LACCUM_MIN__=(-0X1P31LK-0X1P31LK) define: __FRACT_FBIT__=15 define: __FLT64_MIN_10_EXP__=(-307) define: __ULLFRACT_EPSILON__=0x1P-64ULLR define: __USES_INITFINI__=1 define: __REGISTER_PREFIX__= define: __UINT16_MAX__=0xffff define: __ACCUM_MIN__=(-0X1P15K-0X1P15K) define: __SQ_IBIT__=0 define: __UINT8_TYPE__=unsigned char define: __UHA_FBIT__=8 define: __SFRACT_MIN__=(-0.5HR-0.5HR) define: __UTQ_FBIT__=128 define: __DEC_EVAL_METHOD__=2 define: __FLT_MANT_DIG__=24 define: __LDBL_DECIMAL_DIG__=17 define: __VERSION__="10.3.1 20210824 (release)" define: __UINT64_C(c)=c ## ULL define: __FRACT_EPSILON__=0x1P-15R define: __ULACCUM_MIN__=0.0ULK define: __UDA_FBIT__=32 define: __GCC_ATOMIC_INT_LOCK_FREE=2 define: __FLT_MIN_EXP__=(-125) define: __FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __USFRACT_MIN__=0.0UHR define: __FLT32_MANT_DIG__=24 define: __ULLFRACT_FBIT__=64 define: __UQQ_IBIT__=0 define: __SCHAR_WIDTH__=8 define: __INT32_C(c)=c ## L define: __ORDER_PDP_ENDIAN__=3412 define: __UHQ_FBIT__=16 define: __LLACCUM_FBIT__=31 define: __INT_FAST32_TYPE__=int define: __UINT_LEAST16_TYPE__=short unsigned int define: __DBL_HAS_DENORM__=1 define: __UINT64_MAX__=0xffffffffffffffffULL define: __UDQ_FBIT__=64 define: __INT8_TYPE__=signed char define: __thumb__=1 define: __ELF__=1 define: __SACCUM_EPSILON__=0x1P-7HK define: __ULFRACT_EPSILON__=0x1P-32ULR define: __LLFRACT_FBIT__=63 define: __FLT_RADIX__=2 define: __INT_LEAST16_TYPE__=short int define: __ARM_ARCH_PROFILE=77 define: __LDBL_EPSILON__=2.2204460492503131e-16L define: __UINTMAX_C(c)=c ## ULL define: __SACCUM_MAX__=0X7FFFP-7HK define: __FLT32X_MIN__=2.2250738585072014e-308F32x define: __SIG_ATOMIC_MAX__=0x7fffffff define: __UACCUM_FBIT__=16 define: __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 define: __VFP_FP__=1 define: __SIZEOF_PTRDIFF_T__=4 define: __ATOMIC_ACQUIRE=2 define: __INT_WIDTH__=32 define: __OPTIMIZE__=1 define: __LACCUM_EPSILON__=0x1P-31LK define: __LDBL_DIG__=15 define: __FLT32X_MIN_EXP__=(-1021) define: __INT_FAST16_MAX__=0x7fffffff define: __LFRACT_MAX__=0X7FFFFFFFP-31LR define: __FLT64_DIG__=15 define: __UINT_FAST32_MAX__=0xffffffffU define: __UINT_LEAST64_TYPE__=long long unsigned int define: __SFRACT_EPSILON__=0x1P-7HR define: __GCC_ASM_FLAG_OUTPUTS__=1 define: __FLT_HAS_QUIET_NAN__=1 define: __FLT_MAX_10_EXP__=38 define: __LONG_MAX__=0x7fffffffL define: __SIZEOF_SIZE_T__=4 define: __FLT_HAS_INFINITY__=1 define: __UINT_FAST16_TYPE__=unsigned int define: __ARM_32BIT_STATE=1 define: __INT_FAST32_WIDTH__=32 define: __CHAR16_TYPE__=short unsigned int define: __PRAGMA_REDEFINE_EXTNAME=1 define: __SIZE_WIDTH__=32 define: __INT_LEAST16_MAX__=0x7fff define: __INT64_MAX__=0x7fffffffffffffffLL define: __SACCUM_FBIT__=7 define: __FLT32_DENORM_MIN__=1.4012984643248171e-45F32 define: __SIG_ATOMIC_WIDTH__=32 define: __INT_LEAST64_TYPE__=long long int define: __ARM_FEATURE_CLZ=1 define: __INT_LEAST8_TYPE__=signed char define: __SQ_FBIT__=31 define: __USFRACT_MAX__=0XFFP-8UHR define: __ARM_ARCH_ISA_THUMB=2 define: __INT_FAST8_MAX__=0x7fffffff define: __ARM_ARCH=7 define: __INTPTR_MAX__=0x7fffffff define: __QQ_FBIT__=7 define: __UTA_IBIT__=64 define: __FLT64_HAS_QUIET_NAN__=1 define: __UINT16_C(c)=c define: __PTRDIFF_WIDTH__=32 define: __LDBL_MANT_DIG__=53 define: __SFRACT_FBIT__=7 define: __SACCUM_MIN__=(-0X1P7HK-0X1P7HK) define: __FLT64_HAS_INFINITY__=1 define: __STDCPP_DEFAULT_NEW_ALIGNMENT__=8 define: __SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1) define: __GCC_ATOMIC_LONG_LOCK_FREE=2 define: __UINT16_TYPE__=short unsigned int define: __WCHAR_TYPE__=unsigned int define: __SIZEOF_FLOAT__=4 define: __THUMBEL__=1 define: __TQ_FBIT__=127 define: __UINTPTR_MAX__=0xffffffffU define: __INT_FAST64_WIDTH__=64 define: __INT_FAST64_MAX__=0x7fffffffffffffffLL define: __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 define: __FLT_NORM_MAX__=3.4028234663852886e+38F define: __FLT32_HAS_INFINITY__=1 define: __UINT_FAST64_TYPE__=long long unsigned int define: __LACCUM_FBIT__=31 define: __HA_FBIT__=7 define: __UHA_IBIT__=8 define: __INT64_TYPE__=long long int define: __UTQ_IBIT__=0 define: __DBL_MANT_DIG__=53 define: __INT_LEAST64_MAX__=0x7fffffffffffffffLL define: __FP_FAST_FMAF32=1 define: __WINT_TYPE__=unsigned int define: __UINT_LEAST32_TYPE__=long unsigned int define: __SIZEOF_SHORT__=2 define: __ULLFRACT_IBIT__=0 define: __FLT32_NORM_MAX__=3.4028234663852886e+38F32 define: __LDBL_MIN_EXP__=(-1021) define: __GXX_TYPEINFO_EQUALITY_INLINE=0 define: __INTMAX_MAX__=0x7fffffffffffffffLL define: __arm__=1 define: __FLT64_MAX__=1.7976931348623157e+308F64 define: __UDA_IBIT__=32 define: __INT_MAX__=0x7fffffff define: __WINT_WIDTH__=32 define: __INT_LEAST8_MAX__=0x7f define: __INT_LEAST64_WIDTH__=64 define: __FLT32X_MAX_10_EXP__=308 define: __LLACCUM_EPSILON__=0x1P-31LLK define: __LFRACT_FBIT__=31 define: __WCHAR_UNSIGNED__=1 define: __LDBL_MAX_10_EXP__=308 define: __ATOMIC_RELAXED=0 define: __DBL_EPSILON__=double(2.2204460492503131e-16L) define: __ARM_ARCH_7EM__=1 define: __ARM_FEATURE_SIMD32=1 define: __UINT8_C(c)=c define: __FLT64_MAX_EXP__=1024 define: __INT_LEAST32_TYPE__=long int define: __SIZEOF_WCHAR_T__=4 define: __LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR define: __FLT64_NORM_MAX__=1.7976931348623157e+308F64 define: __INT_FAST8_TYPE__=int define: __ULLACCUM_EPSILON__=0x1P-32ULLK define: __USACCUM_MAX__=0XFFFFP-8UHK define: __LDBL_HAS_INFINITY__=1 define: __FLT32_MAX_10_EXP__=38 define: __UHQ_IBIT__=0 define: __ARM_FEATURE_COPROC=15 define: __LLACCUM_IBIT__=32 define: __ULFRACT_MIN__=0.0ULR define: __FLT64_HAS_DENORM__=1 define: __FLT32_EPSILON__=1.1920928955078125e-7F32 define: __DBL_DECIMAL_DIG__=17 define: __STDC_UTF_32__=1 define: __INT_FAST8_WIDTH__=32 define: __BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__ define: __FLT32X_MAX__=1.7976931348623157e+308F32x define: __TA_FBIT__=63 define: __DBL_NORM_MAX__=double(1.7976931348623157e+308L) define: __UDQ_IBIT__=0 define: __INTMAX_WIDTH__=64 define: __ORDER_BIG_ENDIAN__=4321 define: __ARM_FEATURE_DSP=1 define: __UINT64_TYPE__=long long unsigned int define: __ACCUM_EPSILON__=0x1P-15K define: __UINT32_C(c)=c ## UL define: __QQ_IBIT__=0 define: __FLT_DENORM_MIN__=1.4012984643248171e-45F define: __LLFRACT_IBIT__=0 define: __INT8_MAX__=0x7f define: __LONG_WIDTH__=32 define: __INT32_MAX__=0x7fffffffL define: __UINT_FAST32_TYPE__=unsigned int define: __FLT32X_NORM_MAX__=1.7976931348623157e+308F32x define: __CHAR32_TYPE__=long unsigned int define: __FLT32_MIN_10_EXP__=(-37) define: __FLT_MAX__=3.4028234663852886e+38F define: __USACCUM_FBIT__=8 define: __INT32_TYPE__=long int define: __SIZEOF_DOUBLE__=8 define: __FLT_MIN_10_EXP__=(-37) define: __UFRACT_EPSILON__=0x1P-16UR define: __FLT64_MIN__=2.2250738585072014e-308F64 define: __INT_LEAST32_WIDTH__=32 define: __INTMAX_TYPE__=long long int define: __FLT32X_HAS_QUIET_NAN__=1 define: __ATOMIC_CONSUME=1 define: __GNUC_MINOR__=3 define: __INT_FAST16_WIDTH__=32 define: __UINTMAX_MAX__=0xffffffffffffffffULL define: __FLT32X_DENORM_MIN__=4.9406564584124654e-324F32x define: __ATOMIC_ACQ_REL=4 define: __DBL_MAX_10_EXP__=308 define: __LDBL_DENORM_MIN__=4.9406564584124654e-324L define: __INT16_C(c)=c define: __STDC__=1 define: __FLT32X_DIG__=15 define: __PTRDIFF_TYPE__=int define: __LLFRACT_MIN__=(-0.5LLR-0.5LLR) define: __USACCUM_MIN__=0.0UHK define: __FLT32_MIN__=1.1754943508222875e-38F32 define: __ATOMIC_SEQ_CST=5 define: __DA_FBIT__=31 define: __OPTIMIZE_SIZE__=1 define: __UINT32_TYPE__=long unsigned int define: __FLT32X_MIN_10_EXP__=(-307) define: __ARM_ARCH_EXT_IDIV__=1 define: __UINTPTR_TYPE__=unsigned int define: __USA_IBIT__=16 define: __ARM_EABI__=1 define: __LDBL_MIN_10_EXP__=(-307) define: __SIZEOF_LONG_LONG__=8 define: __ULACCUM_EPSILON__=0x1P-32ULK define: __SACCUM_IBIT__=8 define: __GCC_ATOMIC_LLONG_LOCK_FREE=1 define: __FLT_DECIMAL_DIG__=9 define: __UINT_FAST16_MAX__=0xffffffffU define: __LDBL_NORM_MAX__=1.7976931348623157e+308L define: __GCC_ATOMIC_SHORT_LOCK_FREE=2 define: __ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR define: __UINT_FAST8_TYPE__=unsigned int define: __USFRACT_EPSILON__=0x1P-8UHR define: __ULACCUM_FBIT__=32 define: __ATOMIC_RELEASE=3 define: _GNU_SOURCE define: FW_CFG_default define: M_MEMORY_FULL(x)=abort() define: STM32WB define: STM32WB55xx define: USE_FULL_ASSERT define: USE_FULL_LL_DRIVER define: MBEDTLS_CONFIG_FILE="mbedtls_cfg.h" define: PB_ENABLE_MALLOC define: FW_ORIGIN_Official define: FURI_NDEBUG define: NDEBUG define: FAP_VERSION="0.1" other: --g++ other: --gnu_version=100301 stdver: c++17 intelliSenseMode: windows-gcc-arm Update IntelliSense time (sec): 0.147 LSP: (received) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 11) LSP: (invoked) cpptools/getCodeActions: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 11) LSP: (received) cpptools/getDocumentSymbols: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 12) LSP: Sending response (id: 11) LSP: (invoked) cpptools/getDocumentSymbols: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 12) LSP: Sending response (id: 12) LSP: Message ignored due to no registered handler: $/setTrace LSP: (received) cpptools/didChangeSettings LSP: (invoked) cpptools/didChangeSettings Autocomplete is enabled. Error squiggles are enabled if all header dependencies are resolved. Hover is enabled. IntelliSense Engine = default. Enhanced Colorization is enabled. LSP: (received) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 13) LSP: (invoked) cpptools/getFoldingRanges: file:///h%3A/dev/flipper-zero/mode7_demo/mode7_demo.cpp (id: 13) LSP: Sending response (id: 13) ```

Based on this behaviour, I believe "compilerPath" overrides the entire "command" parameter instead of just the first part of it, or maybe it ignores compile_commands.json entirely. The approach used by the toolchain I use is not recommended over "arguments", but it is allowed:

command: The compile command as a single shell-escaped string. Arguments may be shell quoted and escaped following platform conventions, with ‘"’ and ‘\’ being the only special characters. Shell expansion is not supported.

Either arguments or command is required. arguments is preferred, as shell (un)escaping is a possible source of errors.

I had a quick look at the toolchain and modifying it to emit "arguments" instead of "command" wouldn't be trivial - it already operates on an escaped and joined list of arguments so splitting them again would not be worth it. It would be better for the extension to correctly handle this (valid) use case instead.

Colengms commented 8 months ago

Hi @CookiePLMonster

I do not see any failure to query a compiler in your logs, so we can rule that (and fallback scenarios) out.

Putting together a simple example of what you've described, I'm unable to reproduce the behavior we're seeing in your logs. There would seem to be something about your environment, workspace, or configuration that we may need to know to understand what's going on.

Are you using a single-root or multi-root workspace? I'm seeing a multitude of "didChangeCppProperties" messages in the logs you provided, which I don't see in my local repro. If you're using multiple roots, the configuration(s) of the other root(s) might be relevant.

Can you provide us with a stand-alone example, as a github repo or a zip file? I suspect this would not be difficult for us to address if we could repro locally.

CookiePLMonster commented 8 months ago

Hey @Colengms, considering I was not even aware multi-root workspaces are a thing, I use a single-root one. Always opening the directory as a workspace.

Can you provide us with a stand-alone example, as a github repo or a zip file? I suspect this would not be difficult for us to address if we could repro locally.

The project I encountered this issue with is open source, standalone and self-contained - as in, it keeps the toolchain and all intermediates in its own repo directory only, not polluting the home directory or PATH. I suspect for this reason it should serve you well as a test case:

  1. Clone https://github.com/flipperdevices/flipperzero-firmware with all submodules.
  2. In the repository root, run ./fbt vscode_dist. This sets up the VSCode workspace and downloads the toolchain for compilation. Worry not, it downloads those to a toolchain/ directory in the repo directory, not impacting your environment otherwise.
  3. Open the workspace in VSCode, Press Ctrl+Shift+B to bring up the Build menu and run the [Debug] Build Firmware task.

With this set-up done, you may now observe the issue:

  1. build/latest/compile_commands.json has been created by the toolchain. Do note the command contains options like -mcpu=cortex-m4 that are supposed to impact the system defines IntelliSense sees.
  2. Open any .c file mentioned in the JSON file. In my case, I went for furi/flipper.c.
  3. Attempt to use a __ARM_ARCH_7EM__ macro anywhere in the file. Notice IntelliSense claims it is undefined, yet (if you attempt to build) the compiler sees it as defined to 1. This is because -mcpu=cortex-m4 implies an ARMv7E instruction set, which this system define signifies.
  4. Now open .vscode/c_cpp_properties.json and set "compilerPath" to "". Save the changes.
  5. Navigate back to furi/flipper.c. Notice that IntelliSense immediately picks up on the existence on __ARM_ARCH_7EM__ and says Expands to: 1. This is the intended behaviour.

I hope those repro steps are workable for you.

Colengms commented 8 months ago

Hi @CookiePLMonster

With those repro steps, if I remove the compilerPath entry in the generated c_cpp_properties.json, everything appears to work as expected. The issue would seem to be that, with the compilerPath specified, it overrides the compile_commands.json entry entirely, using both the compilerPath and compilerArgs from the base configuration (i.e. in c_cpp_properties.json) instead of anything from compile_commands.json.

You may be able to work around the issue by removing the compilePath entry entirely. Or, if you need to be able to fall back to some base configuration for files not in c_cpp_properties.json, you could copy a set of arguments from the compile_commands.json into the compilerArgs field of c_cpp_properties.json. (Assuming the same args are sufficient to configure all files, that may eliminate the need to refer to the compile_commands.json file at all. Also, the compilerArgs field, as an array of args, should not contain any shell command-line escaping. If that's an issue, providing a complete compile command-line in the compilerPath field, is also supported.)

I think the original intention was for compilerPath to override only the compiler and not the arguments in compile_commands.json. Though, instead of adjusting that behavior, I'd like to use this issue to track no longer allowing compilerPath to override command lines in compile_commands.json, in favor of using a separate settings value for that.

Also, I see this invalid entry present: "configurationProvider": "ms-vscode.cpptools" Which you may want to remove also. The C/C++ Extension is not a provider of custom configurations to itself. This field would be for custom configuraiton providers such as CMake Tools, or Makefile Tools.

CookiePLMonster commented 8 months ago

Hey @Colengms, your insights make sense to me, thank you! Just one note:

You may be able to work around the issue by removing the compilePath entry entirely.

Given that removing the line makes the extension fall back to cl.exe (as I mentioned HERE), would setting the path to "" not be preferable? This is what I proposed in the drafted PR to the linked repository and my tests have been successful.

Colengms commented 8 months ago

would setting the path to "" not be preferable

That would result in no IntelliSense for files not found in compile_commands.json. Assuming that all of the compile_commands.json entries are indicating essentially the same arguments, you might try just pasting one of those command lines into the compilerPath field. That may successfully configure all files appropriately, without even requiring use of the compile_commands.json.

CookiePLMonster commented 8 months ago

Assuming that all of the compile_commands.json entries are indicating essentially the same arguments, you might try just pasting one of those command lines into the compilerPath field. That may successfully configure all files appropriately, without even requiring use of the compile_commands.json.

I don't think that's a safe assumption as I've seen a different set of arguments for .c and .cpp files. I also don't have enough knowledge of this project's toolchain.

That would result in no IntelliSense for files not found in compile_commands.json.

No Intellisense at all or just not querying the compiler for defines? If it's the latter, I don't know how useful cl.exe's query be for this codebase.

Colengms commented 8 months ago

Hi @CookiePLMonster .

No Intellisense at all or just not querying the compiler for defines

You're correct in that the IntelliSense engine would still provide results, but system headers are unlikely to be parsed correctly when predefined macros are not set appropriately. That usually results in IntelliSense being effectively broken.

I'm going to go ahead and correct the previously intended behavior of the compilerPath override, to continue to use the arguments provided in compile_commands.json. That should at least allow the original(?) approach, of specifying the same compiler in the compilePath field, to enable fallback for files not in compile_commands.json to use the (same) compiler in the base configuration. We expect to release 1.19.3 within days, and it should include this fix.

CookiePLMonster commented 8 months ago

I'm going to go ahead and correct the previously intended behavior of the compilerPath override, to continue to use the arguments provided in compile_commands.json.

This sounds perfect @Colengms, and effectively the exact change I was hoping to see when I opened this issue 👍

With this in mind, I am going to shelve my PR to the Flipper Zero repository (https://github.com/flipperdevices/flipperzero-firmware/pull/3394) and wait for 1.19.3 to release. That said, I think it is still going to be worth removing the "configurationProvider": "ms-vscode.cpptools" entry you highlighted earlier as invalid.

CookiePLMonster commented 7 months ago

Hey @Colengms, did the bug fix make it to 1.19.3? While the issue is not linked, this change log entry sounds related:

Fix an issue where use of an explicit compilerPath to override the compiler in a compile_commands.json with also throw out the compiler arguments.

EDIT: It's been fixed! I verified on a clear project and a regenerated vscode environment that IntelliSense now respects -mcpu with the compilerPath still set: image

bobbrow commented 7 months ago

Yes, it was fixed in 1.19.3 (as your EDIT confirms). I have updated the project marking to reflect which release it went in. It was accidentally marked for 1.20.

CookiePLMonster commented 7 months ago

Should this issue be closed then? Or do you wish to use it to track that "additional setting" that's mentioned in a revised issue title? Or keep it open until the fix hits a mainline version and not just a pre-release?

bobbrow commented 7 months ago

We usually keep issues open while the changes are only available in pre-release.

Colengms commented 7 months ago

I think the original intention was for compilerPath to override only the compiler and not the arguments in compile_commands.json. Though, instead of adjusting that behavior, I'd like to use this issue to track no longer allowing compilerPath to override command lines in compile_commands.json, in favor of using a separate settings value for that.

@CookiePLMonster @bobbrow I had updated the title of this issue to track a better solution. Restoring the previous behavior is a temporary solution. My intent was not to consider this issue resolved until the solution in the title has been implemented. Please leave this issue open to track that better solution. (Or I'll need to create another one).

CookiePLMonster commented 7 months ago

That's fine by me - the current behaviour is optimal already, and I'm fine with keeping this issue open.