---
title: "02 - Setup"
output:
  litedown::html_format:
    options:
      toc: true
      number_sections: true
vignette: >
  %\VignetteIndexEntry{02 - Setup}
  %\VignetteEngine{litedown::vignette}
  %\VignetteEncoding{UTF-8}
editor:
  markdown:
    wrap: sentence
bibliography: ["references.bib"]
---

## C++ Setup

You will need a working C++ compiler capable of compiling C++ code using the C++11 standard or newer. To get it:

-   On Windows, install [Rtools](https://cran.r-project.org/bin/windows/Rtools/).
-   On Mac, install Xcode from the App Store.
-   On Linux, `sudo pacman -Syu install build-essential g++-11` or similar.

On my laptop, this is the output of `g++ --version`:

```bash
g++ (GCC) 15.2.1 20250813
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

### For Ubuntu Users

After installing `g++-11`, you may still encounter issues compiling C++ code due to missing standard library headers. This does not happen when testing on Manjaro Linux.

You can try this:

```bash
sudo apt install build-essential g++-11 libc++-11-dev libc++abi-11-dev
```

Then you can attempt to compile a simple example to print a number:

```cpp
// save this as 01-print-number.cpp or similar
#include <iostream> // required for the cout function

// function to print a message
int main() {
    std::cout << 1 << std::endl;
    return 0;
}
```

Then try to compile and run it with the following bash instruction:

```bash
g++ 01-print-number.cpp
./01-print-number # prints "1"
```

Otherwise, not installing the additional packages may lead to the following error:

```bash
fatal error: 'cstdio' file not found
fatal error: 'vector' file not found
cannot find -lc++abi: No such file or directory
```

## R Setup

You can install the R packages `cpp4r`, `tinydev` and `microbenchmark` with the following command:

```r
install.packages(c("cpp4r", "tinydev", "microbenchmark"))
```

To verify that R can compile C++ code, you can run `tinydev::check_cpp_compiler()`, which will return an output similar to:

```r
using C++ compiler: ‘g++ (GCC) 16.1.1 20260430’
g++ -std=gnu++20 -I"/usr/include/R/" -DNDEBUG   -I/usr/local/include    -fpic  -Wall -O3 -pedantic  -c check_cpp_compiler.cpp -o check_cpp_compiler.o
g++ -std=gnu++20 -shared -L/usr/lib64/R/lib -Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs -flto=auto -o check_cpp_compiler.so check_cpp_compiler.o -L/usr/lib64/R/lib -lR
using C++ compiler: ‘g++ (GCC) 16.1.1 20260430’
add(2, 3) = 5
```
