# Build using an IDE
One option for building your application using XDS is to use
an Integrated Development Environment
([IDE](https://en.wikipedia.org/wiki/Integrated_development_environment)).
Many IDEs exist (e.g. [NetBeans](https://netbeans.org/),
[Visual Studio Code](https://code.visualstudio.com/),
[Qt Creator](https://www.qt.io/),
[Eclipse](https://www.eclipse.org/), and so forth).
This section first develops an XDS configuration file
(i.e. `xds-project.conf`) and then provides two
examples, NetBeans and Visual Studio, that do the following.
- NetBeans: Creates two separate build configurations
for a project, which makes it easy to switch back and forth
between types of builds.
- Visual Studio: Creates tasks that allow you to build an example
based on CMake templates.
## XDS Configuration File
This section shows how to create an XDS configuration file
(i.e. `xds-project.conf`) or how to re-use an existing file.
For example, the following commands set up the configuration
file for an `aarch64` SDK to cross-build the
application for a Renesas Gen3 board.
```bash
# create file at root directory of your project
# for example:
# MY_PROJECT_DIR=/home/seb/xds-workspace/helloworld-native-application
cat > $MY_PROJECT_DIR/xds-project.conf << EOF
export XDS_AGENT_URL=localhost:8800
export XDS_PROJECT_ID=4021617e-ced0-11e7-acd2-3c970e49ad9b
export XDS_SDK_ID=c226821b-b5c0-386d-94fe-19f807946d03
EOF
```
## NetBeans
This section creates two configurations: one to compile the
project natively using native GNU gcc, and one to cross-compile
the project using XDS.
Having two configurations allows you to easily switch between them
using NetBean's **Run -> Set Project Configuration** menu.
### Native Configuration
Follow these steps to create the native configuration:
1. Open the **Tools** -> **Options** menu.
2. Open the **C/C++** tab.
3. Click on the **Add** button in the **Build Tools** sub-tab:
![Add new tool panel](./pictures/nb_newtool.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
4. Fill the **Make Command** and **Debugger Command** fields to point to the XDS tools:
![Add new tool panel](./pictures/nb_xds_options.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
5. Click **OK**.
6. Select the **File** -> **New Project** menu item to declare the
project and create a native configuration.
7. Select **C/C++ Project with Existing Sources** and click on **Next**.
8. Specify your project directory and set **Select Configuration Mode** to
"Custom".
Be sure to keep **Tool Collection** set to "Default GNU" in order to create a
*native configuration*, which is based on the native GNU GCC.
9. Click **Next**.
![Select Model panel](./pictures/nb_new-project-1.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
10. Update the **Run in Folder** field to add the `build_native` suffix.
Doing so results in the build files being located in the
`build_native` sub-directory.
Be sure to keep the defaults for all other settings and then click **Next**.
![Select Model panel](./pictures/nb_new-project-2.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
11. Click through **Next** several times while always keeping the
default settings until the **Finish** button appears.
12. Click **Finish** to complete the creation of the native configuration.
### Cross-Compilation Configuration
Follow these steps to create the configuration for cross-compilation
based on the XDS tools:
1. Edit project properties (using menu **File** -> **Project Properties**)
to add a new configuration that will use XDS to cross-compile
your application for example for a Renesas Gen3 board.
2. in the **Build** category, click on **Manage Configurations** button
and then **New** button to add a new configuration named for example
"Gen3 board".
![Select Build category](./pictures/nb_new-project-3.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
3. Click the **Set Active** button.
4. Select the **Pre-Build** sub-category, and set the following:
- Working Directory: `build_gen3`
- Command Line: `xds-cli exec -c ../xds-project.conf -- cmake -DRSYNC_TARGET=root@renesas-gen3 -DRSYNC_PREFIX=/opt ..`
- Pre-build First: `ticked`
5. Select the **Make** sub-category, and set the following:
- Working Directory: `build_gen3`
- Build Command: `xds-cli exec -c ../xds-project.conf -- make remote-target-populate`
- Clean Command: `xds-cli exec -c ../xds-project.conf -- make clean`
![Select Make sub-category](./pictures/nb_new-project-4.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
6. Select the **Run** sub-category, and set the following:
- Run Command: `target/start-on-root@renesas-gen3.sh`
- Run Directory: `build-gen3`
![Select Run sub-category](./pictures/nb_new-project-5.png){:: style="width:90%; max-width:700px; margin:auto; display:flex"}
7. Click **OK** to save settings.
By changing the configuration from **Default** to **Gen3 board**, you can
compile your helloworld application natively, which is the default configuration.
Or, you can cross-compile your application using XDS for the Renesas Gen3 board,
which is the Gen3 board configuration.
## Visual Studio Code
This section presents a Visual Studio example that creates tasks
that allow you to build an example that is based on CMake templates.
Follow these steps:
1. Start Visual Studio Code and open your project using the
following commands:
```bash
cd $MY_PROJECT_DIR
code . &
```
2. Add new tasks by entering the `Ctrl+Shift+P` key combination and selecting
the `Tasks: Configure Task` command.
A list of task runner templates appears.
3. Define your own tasks.
Following is an example that builds the
[helloworld-native-application](https://github.com/iotbzh/helloworld-native-application)
that is based on CMake templates.
```json
{
"version": "2.0.0",
"type": "shell",
"presentation": {
"reveal": "always"
},
"tasks": [
{
"label": "clean",
"type": "shell",
"command": "/bin/rm -rf ${workspaceFolder}/build/* && mkdir -p build && echo Cleanup done.",
"problemMatcher": []
},
{
"label": "pre-build",
"type": "shell",
"group": "build",
"command": "/opt/AGL/bin/xds-cli exec --rpath build --config xds-project.conf -- cmake -DRSYNC_TARGET=root@renesas-gen3 -DRSYNC_PREFIX=/opt ../",
"problemMatcher": [
"$gcc"
]
},
{
"label": "build",
"type": "shell",
"group": "build",
"command": "/opt/AGL/bin/xds-cli exec --rpath build --config xds-project.conf -- make widget",
"problemMatcher": [
"$gcc"
]
},
{
"label": "populate",
"type": "shell",
"command": "/opt/AGL/bin/xds-cli exec --rpath build --config xds-project.conf -- make widget-target-install",
"problemMatcher": []
}
]
}
```
4. Run a task by entering the `Ctrl+Shift+P` key combination and
selecting `Tasks: Run task` and then selecting the specific task.
For example, select `pre-build` to trigger pre-build task.
5. Optionally add keybindings that trigger tasks.
Following is an example:
```json
// Build
{
"key": "alt+f9",
"command": "workbench.action.tasks.runTask",
"args": "clean"
},
{
"key": "alt+f10",
"command": "workbench.action.tasks.runTask",
"args": "pre-build"
},
{
"key": "alt+f11",
"command": "workbench.action.tasks.runTask",
"args": "build"
},
{
"key": "alt+f12",
"command": "workbench.action.tasks.runTask",
"args": "populate"
},
```
**NOTES:**
- You can find more details about Visual Source Code keybindings
[here](https://code.visualstudio.com/docs/editor/tasks#_binding-keyboard-shortcuts-to-tasks).
- You can find more details about Visual Source Code tasks
[here](https://code.visualstudio.com/docs/editor/tasks).