arduino / arduino/ArduinoCore-renesas

Simple inclusion of <chrono> leads to compilation error

Open
#94 2 comments 0 reactions 0 assignees View on GitHub
topic: code type: imperfection
Dominant language
C
Stars
193
Forks
112
PR merge metrics
No merged PRs in 30d

Description

* Minimal sketch to reproduce the error:
```C++
#include

void setup() {

}

void loop() {

}
```
* Compile the sketch via `arduino-cli compile -b arduino:renesas_portenta:portenta_c33 -v .`.
* Error
```bash
/home/alex/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-g++ -c -w -Os -g3 -fno-use-cxa-atexit -fno-rtti -fno-exceptions -nostdlib -DF_CPU=200000000 -std=gnu++17 -mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsigned-char -ffunction-sections -fdata-sections -fmessage-length=0 -fno-builtin -w -x c++ -E -CC -DARDUINO=10607 "-DPROJECT_NAME=\"/tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/chrono.ino\"" -DARDUINO_PORTENTA_C33 -DARDUINO_ARCH_RENESAS -DARDUINO_ARCH_RENESAS -DARDUINO_FSP -D_XOPEN_SOURCE=700 -mthumb @/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33/defines.txt -DLWIP_DNS=1 -DCFG_TUSB_MCU=OPT_MCU_RAXXX -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/tinyusb -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/api/deprecated -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/api/deprecated-avr-comp -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino -I/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33 -iprefix/home/alex/Arduino/hardware/arduino-git/renesas @/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33/includes.txt /tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/sketch/chrono.ino.cpp -o /dev/null
Error while detecting libraries included by /tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/sketch/chrono.ino.cpp
Generating function prototypes...
/home/alex/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-g++ -c -w -Os -g3 -fno-use-cxa-atexit -fno-rtti -fno-exceptions -nostdlib -DF_CPU=200000000 -std=gnu++17 -mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsigned-char -ffunction-sections -fdata-sections -fmessage-length=0 -fno-builtin -w -x c++ -E -CC -DARDUINO=10607 "-DPROJECT_NAME=\"/tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/chrono.ino\"" -DARDUINO_PORTENTA_C33 -DARDUINO_ARCH_RENESAS -DARDUINO_ARCH_RENESAS -DARDUINO_FSP -D_XOPEN_SOURCE=700 -mthumb @/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33/defines.txt -DLWIP_DNS=1 -DCFG_TUSB_MCU=OPT_MCU_RAXXX -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/tinyusb -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/api/deprecated -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino/api/deprecated-avr-comp -I/home/alex/Arduino/hardware/arduino-git/renesas/cores/arduino -I/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33 -iprefix/home/alex/Arduino/hardware/arduino-git/renesas @/home/alex/Arduino/hardware/arduino-git/renesas/variants/PORTENTA_C33/includes.txt /tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/sketch/chrono.ino.cpp -o /tmp/arduino/sketches/158652842019AB5611B5802F01A02A76/preproc/sketch_merged.cpp
In file included from /tmp/chrono/chrono.ino:1:0:
/home/alex/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4/arm-none-eabi/include/c++/7.2.1/chrono:266:38: error: macro "abs" passed 2 arguments, but takes just 1
abs(duration<_Rep, _Period> __d)
```

Workaround:
```diff
-#include
+#undef abs
+#include
```

### Additional context

#### Additional reports

- https://github.com/arduino/ArduinoCore-renesas/issues/94#issuecomment-1992417879
- https://forum.arduino.cc/t/include-chrono-causes-a-compile-error-in-an-otherwise-empty-skeleton-sketch/1147518/1
- https://forum.arduino.cc/t/include-chrono-causes-a-compile-error-in-an-otherwise-empty-skeleton-sketch/1147518/8

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the minimal sketch and the verbose arduino-cli compile command for the Portenta C33. Inspect the Renesas variant include configuration and the reported arm-none-eabi C++ chrono header line where abs receives two arguments; done means the sketch compiles without requiring #undef abs.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers, embedded-iot
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
40/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.