pokeplatinum

Editor Setup: Visual Studio Code

This document assumes that you have a functioning install of Visual Studio Code and are familiar with installing extensions via the Marketplace.

Table of Contents

Install the Microsoft C/C++ Extensions

If you have not already, install Microsoft’s C/C++ extension to add language support for C and C++ to Visual Studio Code. This extension will enable rich completions and symbol navigation while editing C and C++ code. It will also integrate automated code-formatting using clang-format, following the configuration outlined in the .clang-format file at the root of the project. For further details on the extension’s features, refer to the official documentation.

In the following sections, we will configure this extension to integrate with pokeplatinum’s toolchain.

Generate the Compilation Database

If you have not already, generate the compilation database by invoking the following from the root of the project:

python tools/devtools/gen_compile_commands.py

You should now see a file named compile_commands.json in the root of the project. This file will be used to instruct the clangd language server on how to compile individual source files.

Configure C/C++ Project Properties

The C/C++ extension reads configuration for a project from the file .vscode/c_cpp_properties.json. The .vscode folder should already be present in the root of your project. In that folder, create the c_cpp_properties.json file, if it is not already present. The following configuration can be used as a starting point:

{
  "configurations": [
    {
      "name": "Linux",
      "includePath": [
        "${workspaceFolder}/build/**",
        "${workspaceFolder}/include/**"
      ],
      "forcedInclude": [ "${workspaceFolder}/include/pch/global_pch.h" ],
      "defines": [ "SDK_ARM9", "BOOL=int" ],
      "compilerPath": "/usr/bin/arm-none-eabi-gcc",
      "cStandard": "c99",
      "cppStandard": "c++17",
      "intelliSenseMode": "linux-gcc-arm",
      "compileCommands": "${workspaceFolder}/compile_commands.json"
    }
  ],
  "version": 4
}

To ensure that the configuration loads correctly in your editor, replace the name and intelliSenseMode properties according to the values specified in the following table for specific platforms:

Platform name intelliSenseMode
Windows - MSYS2 Windows windows-gcc-arm
Windows - WSL1 Windows windows-gcc-arm
Windows - WSL2 Linux linux-gcc-arm
Linux Linux linux-gcc-arm
macOS macOS macos-gcc-arm64

[!NOTE] Visual Studio Code may take a long time to initialize Intellisense when first opening the repository, during which time the application may appear to be unresponsive. This is expected, as it attempts to build a complete database of symbols declared within the project. This unresponsiveness should only apply to the first time that a source file is opened within the project; future start-up times should be much faster.

Optional: Add Language Support for Meson

The Meson extension for Visual Studio Code will provide support for the Meson build-system language. With direct configuration for the project supplied by the generated compile_commands.json, this extension is largely useful for syntax highlighting and code snippets used when making modifications to the build configuration.

[!WARNING] If prompted, do NOT use this extension to configure IntelliSense, as it may override previous configuration!

Advanced: Use clangd for C/C++ Integration

If desired, a user may install the LLVM clangd extension instead of the Microsoft C/C++ extension. Unlike the Microsoft-branded extension, the clangd extension will build its symbol database incrementally; this can provide a more immediately-responsive editing experience when first opening a project source file at the cost of a higher memory footprint.