Visual Studio Code installation and setup
=========================================
Below are instructions to install Visual Studio Code (VS Code) and add some useful extensions and setup.
The settings described below are also available in the subdirectory `tools/vscode/`
from where they can be copied and adjusted to match your local setup.
This assumes you have already set up the tools to build for the ``posix`` and ``s23k148`` targets...
* On Ubuntu :prop:`tool:ubuntu_version` host platform...
* :doc:`setup_posix_ubuntu_build`
* :doc:`setup_s32k148_ubuntu_build`
* On Windows host platform with WSL (Windows Subsystem for Linux)...
* :doc:`setup_windows_wsl`
* :doc:`setup_posix_win_build`
* :doc:`setup_s32k148_win_build`
Install Visual Studio
---------------------
* Install `VS Code `_
* Install `C/C++ Extension Pack `_
If working on WSL then consult `Developing in WSL `_.
Launch VS Code from the base directory of the code...
.. code-block:: bash
code .
Set up build tasks
------------------
VS Code allows you to configure tasks. This is done in the tasks configuration file: ``.vscode\tasks.json``.
Below is an example of this file with tasks to clean, generate the build system
and build the elf file for each target (``posix`` and ``s32k148``).
You can create your own ``.vscode\tasks.json`` file
(in VS Code, press ``F1``, select ``Tasks: Configure Task`` and press ``Enter``)
and cut & paste the tasks below into it.
Then go to VS Code's menu item ``Terminal -> Run Build Task...`` (or press ``Ctrl+Shift+B``),
each task will be listed by their ``label`` below and you can select one to execute it.
.. code-block::
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Clean s32k148 build",
"command": "rm -rf cmake-build-s32k148",
"group": "build"
},
{
"type": "shell",
"label": "Generate build system for s32k148",
"command": "cmake -B cmake-build-s32k148 -S executables/referenceApp -DBUILD_TARGET_PLATFORM=\"S32K148EVB\" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON --toolchain ../../admin/cmake/ArmNoneEabi-gcc.cmake",
"group": "build"
},
{
"type": "shell",
"label": "Build s32k148 elf file",
"command": "cmake --build cmake-build-s32k148 --target app.referenceApp -j",
"group": "build"
},
{
"type": "shell",
"label": "Clean posix build",
"command": "rm -rf cmake-build-posix",
"group": "build"
},
{
"type": "shell",
"label": "Generate build system for posix",
"command": "cmake -B cmake-build-posix -S executables/referenceApp -DCMAKE_EXPORT_COMPILE_COMMANDS=ON",
"group": "build"
},
{
"type": "shell",
"label": "Build posix elf file",
"command": "cmake --build cmake-build-posix --target app.referenceApp -j",
"group": "build"
}
]
}
You may wish to set up other tasks.
For example, :ref:`automatic_formatting` provides instructions on setting up code formatting
and header guard generation in VS Code.
Set up IntelliSense
-------------------
The `C/C++ extension `_ implements IntelliSense in VS Code.
This is configured in ``.vscode/c_cpp_properties.json``.
``cmake`` can `generate a file containing the exact compile commands that will be used `_.
If you wish to use this in Intellisense,
add the option ``-DCMAKE_EXPORT_COMPILE_COMMANDS=ON`` when ``cmake`` generates the build system for each target
(as show in the build tasks added to ``.vscode\tasks.json`` above)
and set up IntelliSense in VS Code as follows.
Create ``.vscode/c_cpp_properties.json`` with the content below to use
the generated ``compile_commands.json`` files.
.. code-block::
{
"configurations": [
{
"name": "posix",
"cStandard": "c99",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64",
"compileCommands": "${workspaceFolder}/cmake-build-posix/compile_commands.json"
},
{
"name": "s32k148",
"cStandard": "c99",
"cppStandard": "c++14",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/cmake-build-s32k148/compile_commands.json"
}
],
"version": 4
}
Then, when viewing a C/C++ file, in the bottom right corner of VS Code you will see
which configuration is in use (``posix`` or ``s32k148``) and you can switch between them.
Using VS Code's ``CMake Tools`` extension
-----------------------------------------
If you prefer to use VS Code's
`CMake Tools extension `_ to build,
please note that, for this project, the ``CMake`` source directory is not the root of the code
but the subdirectory ``executables/referenceApp/`` (as specified using the ``-S`` option in the tasks above).
You need to set the same in the extensions' settings.
Add the following settings to ``.vscode/settings.json``...
.. code-block::
{
"cmake.sourceDirectory": "${workspaceFolder}/executables/referenceApp",
"cmake.options.statusBarVisibility": "visible"
}
The ``CMake Tools`` extension supports using a `CMakePresets.json `_ file
which is always placed in the ``CMake`` source directory.
For example, you can create the file ``executables/referenceApp/CMakePresets.json`` with the content below
and this will be used by the ``CMake Tools`` extension to set up a configuration for each target.
.. code-block::
{
"version": 3,
"configurePresets": [
{
"name": "default",
"displayName": "CMake posix",
"generator": "Unix Makefiles",
"binaryDir": "${workspaceFolder}/cmake-build-posix",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES"
}
},
{
"name": "CMake s32k148",
"displayName": "CMake s32k148",
"generator": "Unix Makefiles",
"binaryDir": "${workspaceFolder}/cmake-build-s32k148",
"toolchainFile": "../../admin/cmake/ArmNoneEabi-gcc.cmake",
"cacheVariables": {
"BUILD_TARGET_PLATFORM": "S32K148EVB",
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default",
"targets": "app.referenceApp"
},
{
"name": "CMake s32k148",
"configurePreset": "CMake s32k148",
"targets": "app.referenceApp"
}
]
}
Debugging with the ``posix`` build in Visual Studio Code
--------------------------------------------------------
If you wish to debug the ``posix`` build you need install ``gdb``...
.. code-block::
sudo apt install gdb
Create ``.vscode/launch.json`` with the content below.
Then choose the VS Code menu ``Run -> Start Debugging`` (or press ``F5``).
The debugger will launch and stop at the entry point in ``main()``.
.. code-block::
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug posix",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/cmake-build-posix/application/app.referenceApp.elf",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
.. _setup_s32k148_gdb_vscode:
Using GDB with the S32K148EVB via USB from Visual Studio Code
-------------------------------------------------------------
Instructions are provided in :doc:`setup_s32k148_gdbserver`
on setting up gdb server and connecting to it without using NXP's IDE (S32 Design Studio).
Flash elf file as a VS Code task
++++++++++++++++++++++++++++++++
Assuming gdb server is up and running, you may wish to add more tasks in ``.vscode\tasks.json`` for convenience.
For example, the task below will flash the elf file onto the S32K148EVB Board.
.. code-block::
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Flash s32k148 elf file",
"command": "arm-none-eabi-gdb -batch -x test/pyTest/flash.gdb cmake-build-s32k148/application/app.referenceApp.elf",
"group": "build"
}
]
}
Install debugging extension
+++++++++++++++++++++++++++
There are several VS Code plugins available for VS Code to debug code running remotely on the ARM Cortex-M boards such as the S32K148EVB.
Here, the steps to set up debugging with one of these
`Cortex-Debug `_ are described.
In VS Code's Extensions tab, enter ``Cortex-Debug`` in ``Search Extensions in Marketplace`` and install it.
In ``.vscode/settings.json`` (create this if needed) enter these settings
(with ``armToolchainPath`` set to where it is installed on your host platform)...
.. code-block::
{
"cortex-debug.liveWatchRefreshRate": 500,
"cortex-debug.armToolchainPath": "/home/user/gcc-arm-none-eabi-10.3-2021.10/bin/",
}
Cut & paste the configuration below into your ``.vscode/launch.json``...
.. code-block::
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug s32k148",
"cwd": "${workspaceFolder}",
"executable": "${workspaceFolder}/cmake-build-s32k148/application/app.referenceApp.elf",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"servertype": "external",
"gdbTarget": "127.0.0.1:7224"
}
]
}
In the ``Run and Debug`` tab (``Ctrl+Shift+D``) select ``Debug s32k148`` and press the green triangle symbol to ``Start Debugging``.