nuttx icon indicating copy to clipboard operation
nuttx copied to clipboard

[BUG] Missing Standard C++ Headers When Building CxxTest Using CMake

Open trns1997 opened this issue 8 months ago • 5 comments

Description / Steps to reproduce the issue

Description

When building NuttX using CMake (as documented in the CMake Quickstart), the build fails during the compilation of cxxtest_main.cxx with the error:

fatal error: cstdio: No such file or directory

This issue does not occur when building using the classic Makefile configuration.

Steps to Reproduce

  1. Configure the Board Run the following command in your NuttX source directory:
cmake -B build -DBOARD_CONFIG=xmc4800-relax:nsh -GNinja
  1. Build NuttX with CxxTest Build the project with:
cmake --build build
  1. Observed Error The build fails with the following output:
[2/8] Building CXX object apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj
FAILED: apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj 
/home/thomas/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g++ -D__NuttX__ -Dmain=cxxtest_main -I/home/thomas/nuttxspace/apps/include -I/home/thomas/nuttxspace/nuttx/build/apps/include -isystem /home/thomas/nuttxspace/nuttx/include -isystem /home/thomas/nuttxspace/nuttx/build/include -mtune=cortex-m4 -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef -nostdlib -fomit-frame-pointer -mthumb -Wa,-mthumb -Wa,-mimplicit-it=always -ffunction-sections -fdata-sections -Wno-attributes -Wno-unknown-pragmas -nostdinc++ -Wno-psabi -std=c++17 -fdiagnostics-color=always -DNDEBUG -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx= -fmacro-prefix-map=/home/thomas/nuttxspace/apps= -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx/boards/arm/xmc4/xmc4800-relax= -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx/arch/arm/src/xmc4= @apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj.rsp -MD -MT apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj -MF apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj.d -o apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj -c /home/thomas/nuttxspace/apps/testing/cxx/cxxtest/cxxtest_main.cxx
/home/thomas/nuttxspace/apps/testing/cxx/cxxtest/cxxtest_main.cxx:29:10: fatal error: cstdio: No such file or directory
   29 | #include <cstdio>
      |          ^~~~~~~~
compilation terminated.
[3/8] Linking C static library libs/libc/libc.a
ninja: build stopped: subcommand failed.

On which OS does this issue occur?

[OS: Linux]

What is the version of your OS?

24.04

NuttX Version

master

Issue Architecture

[Arch: arm]

Issue Area

[Area: Build System]

Host information

file sysinfo.h not exists NuttX CFLAGS: -Wstrict-prototypes -Wno-attributes -Wno-unknown-pragmas -Wno-psabi -fomit-frame-pointer --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef -ffunction-sections -fdata-sections -mlittle-endian -march=armv7e-m -mtune=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wa-mthumb -Wa-mimplicit-it=always -isystem /home/thomas/nuttxspace/nuttx/include -D__NuttX__ -DNDEBUG -pipe

NuttX CXXFLAGS: -Wno-attributes -Wno-unknown-pragmas -Wno-psabi -std=\c++17
-fomit-frame-pointer --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef -ffunction-sections -fdata-sections -mlittle-endian -march=armv7e-m -mtune=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wa-mthumb -Wa-mimplicit-it=always -isystem /home/thomas/nuttxspace/nuttx/include/cxx -isystem /home/thomas/nuttxspace/nuttx/include -D__NuttX__ -DNDEBUG -pipe

NuttX LDFLAGS: --print-memory-usage --entry=__start -nostdlib --gc-sections --cref -Map=/home/thomas/nuttxspace/nuttx/nuttx.map

NuttX configuration options: CONFIG_HOST_LINUX=y CONFIG_APPS_DIR=../apps
CONFIG_BASE_DEFCONFIG=\xmc4800-relax:nsh
CONFIG_BUILD_FLAT=y CONFIG_INTELHEX_BINARY=y CONFIG_RAW_BINARY=y CONFIG_OUTPUT_STRIP_PATHS=y CONFIG_ARCH_HAVE_STDARG_H=y CONFIG_ARCH_HAVE_SETJMP=y CONFIG_ARCH_NONE_DEBUG_H=y CONFIG_FORTIFY_SOURCE=0 CONFIG_NDEBUG=y CONFIG_DEBUG_ALERT=y CONFIG_ARCH_HAVE_STACKCHECK=y CONFIG_STACK_USAGE_WARNING=0 CONFIG_ARCH_HAVE_CUSTOMOPT=y CONFIG_DEBUG_NOOPT=y CONFIG_LTO_NONE=y CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y CONFIG_DEBUG_LINK_MAP=y CONFIG_ARCH_ARM=y CONFIG_ARCH=\arm
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y CONFIG_ARCH_CHIP_XMC4=y CONFIG_ARCH_ARMV7M=y CONFIG_ARCH_CORTEXM4=y CONFIG_ARCH_FAMILY=\armv7-m
CONFIG_ARCH_CHIP=\xmc4
CONFIG_ARM_THUMB=y CONFIG_ARM_HAVE_MPU_UNIFIED=y CONFIG_ARCH_HAVE_HARDFAULT_DEBUG=y CONFIG_ARCH_HAVE_MEMFAULT_DEBUG=y CONFIG_ARCH_HAVE_BUSFAULT_DEBUG=y CONFIG_ARCH_HAVE_USAGEFAULT_DEBUG=y CONFIG_ARMV7M_HAVE_STACKCHECK=y CONFIG_ARCH_CHIP_XMC4800=y CONFIG_XMC4_USIC=y CONFIG_XMC4_USCI_UART=y CONFIG_XMC4_USIC0=y CONFIG_XMC4_ECAT=y CONFIG_XMC4_ECAT_P0=y CONFIG_XMC4_USIC0_CHAN0_ISUART=y CONFIG_XMC4_USIC0_CHAN0_TX_BUFFER_SIZE=16 CONFIG_XMC4_USIC0_CHAN0_RX_BUFFER_SIZE=16 CONFIG_XMC4_USIC0_CHAN1_NONE=y CONFIG_ARCH_TOOLCHAIN_GNU=y CONFIG_ARCH_TOOLCHAIN_GCC=y CONFIG_ARCH_HAVE_IRQTRIGGER=y CONFIG_ARCH_HAVE_IRQPRIO=y CONFIG_ARCH_HAVE_FORK=y CONFIG_ARCH_HAVE_FPU=y CONFIG_ARCH_HAVE_MPU=y CONFIG_ARCH_HAVE_RESET=y CONFIG_ARCH_HAVE_TESTSET=y CONFIG_ARCH_HAVE_THREAD_LOCAL=y CONFIG_ARCH_HAVE_FETCHADD=y CONFIG_ARCH_HAVE_SYSCALL_HOOKS=y CONFIG_ARCH_HAVE_BACKTRACE=y CONFIG_ARCH_HAVE_DEBUG=y CONFIG_ARCH_HAVE_PERF_EVENTS=y CONFIG_ARCH_HAVE_CPUINFO=y CONFIG_ARCH_CPUINFO_FREQ_KHZ=0 CONFIG_ARCH_HAVE_TCBINFO=y CONFIG_ARCH_FPU=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0 CONFIG_ARCH_HAVE_RAMFUNCS=y CONFIG_ARCH_HAVE_RAMVECTORS=y CONFIG_BOARD_LOOPSPERMSEC=8000 CONFIG_ARCH_HAVE_INTERRUPTSTACK=y CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y CONFIG_BOOT_RUNFROMFLASH=y CONFIG_RAM_START=0x20000000 CONFIG_RAM_SIZE=65536 CONFIG_FLASH_START=0x0 CONFIG_FLASH_SIZE=0 CONFIG_ARCH_BOARD_XMC4800RELAX=y CONFIG_ARCH_BOARD=\xmc4800-relax
CONFIG_ARCH_HAVE_LEDS=y CONFIG_ARCH_LEDS=y CONFIG_ARCH_HAVE_BUTTONS=y CONFIG_ARCH_BUTTONS=y CONFIG_ARCH_HAVE_IRQBUTTONS=y CONFIG_ARCH_IRQBUTTONS=y CONFIG_ECAT=y CONFIG_BOARD_CRASHDUMP_NONE=y CONFIG_BOARDCTL=y CONFIG_BOARDCTL_MKRD=y CONFIG_BOARD_MEMORY_RANGE=\ CONFIG_DISABLE_OS_API=y CONFIG_ARCH_HAVE_TICKLESS=y CONFIG_USEC_PER_TICK=10000 CONFIG_START_YEAR=2014 CONFIG_START_MONTH=3 CONFIG_START_DAY=10 CONFIG_PREALLOC_TIMERS=4 CONFIG_IRQ_NWORKS=8 CONFIG_IRQ_WORK_SECTION=\ CONFIG_IRQ_WORK_STACKSIZE=2048 CONFIG_INIT_ENTRY=y CONFIG_INIT_ARGS=\ CONFIG_INIT_STACKSIZE=2048 CONFIG_INIT_PRIORITY=100 CONFIG_INIT_ENTRYPOINT=\nsh_main
CONFIG_INIT_ENTRYNAME=\nsh_main
CONFIG_RR_INTERVAL=200 CONFIG_TASK_NAME_SIZE=31 CONFIG_SCHED_WAITPID=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_NONE=y CONFIG_SCHED_CPULOAD_NONE=y CONFIG_SCHED_CPULOAD_TICKSPERSEC=100 CONFIG_SCHED_PROFILE_TICKSPERSEC=1000 CONFIG_SCHED_STACK_RECORD=0 CONFIG_DEV_CONSOLE=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=8 CONFIG_FILE_STREAM=y CONFIG_SIG_PREALLOC_ACTIONS=4 CONFIG_SIG_ALLOC_ACTIONS=1 CONFIG_SIG_PREALLOC_IRQ_ACTIONS=8 CONFIG_PREALLOC_MQ_MSGS=8 CONFIG_PREALLOC_MQ_IRQ_MSGS=8 CONFIG_MQ_MAXMSGSIZE=32 CONFIG_SCHED_WORKQUEUE=y CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPNTHREADS=1 CONFIG_SCHED_HPWORKPRIORITY=224 CONFIG_SCHED_HPWORKSTACKSIZE=2048 CONFIG_DEFAULT_TASK_STACKSIZE=2048 CONFIG_IDLETHREAD_STACKSIZE=1024 CONFIG_PTHREAD_STACK_MIN=256 CONFIG_PTHREAD_STACK_DEFAULT=2048 CONFIG_PID_INITIAL_COUNT=16 CONFIG_ARCH_HAVE_I2CRESET=y CONFIG_DEV_NULL=y CONFIG_DEV_ZERO=y CONFIG_DEV_OPTEE_NONE=y CONFIG_DRVR_MKRD=y CONFIG_ARCH_HAVE_RDWR_MEM_CPU_RUN=y CONFIG_SERIAL=y CONFIG_SERIAL_CONSOLE=y CONFIG_MCU_SERIAL=y CONFIG_STANDARD_SERIAL=y CONFIG_SERIAL_NPOLLWAITERS=4 CONFIG_UART0_SERIAL_CONSOLE=y CONFIG_UART0_SERIALDRIVER=y CONFIG_UART0_RXBUFSIZE=256 CONFIG_UART0_TXBUFSIZE=256 CONFIG_UART0_BAUD=115200 CONFIG_UART0_BITS=8 CONFIG_UART0_PARITY=0 CONFIG_UART0_2STOP=0 CONFIG_SYSLOG=y CONFIG_SYSLOG_DEFAULT_MASK=0xff CONFIG_SYSLOG_CRLF=y CONFIG_SYSLOG_MAX_CHANNELS=1 CONFIG_SYSLOG_DEVPATH=/dev/ttyS1
CONFIG_SYSLOG_DEFAULT=y CONFIG_FS_NEPOLL_DESCRIPTORS=8 CONFIG_FS_LOCK_BUCKET_SIZE=0 CONFIG_SENDFILE_BUFSIZE=512 CONFIG_FS_REFCOUNT=y CONFIG_FS_BACKTRACE=0 CONFIG_FS_MQUEUE_VFS_PATH=/var/mqueue
CONFIG_FS_MQUEUE_NPOLLWAITERS=4 CONFIG_FS_ANONMAP=y CONFIG_NXFONTS_PACKEDMSFIRST=y CONFIG_MM_DEFAULT_MANAGER=y CONFIG_MM_DEFAULT_ALIGNMENT=8 CONFIG_MM_REGIONS=1 CONFIG_MM_MAP_COUNT_MAX=1024 CONFIG_MM_BACKTRACE=-1 CONFIG_MM_FREE_DELAYCOUNT_MAX=0 CONFIG_MM_HEAP_BIGGEST_COUNT=30 CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=-1 CONFIG_BINFMT_ELF_RELOCATABLE=y CONFIG_STDIO_BUFFER_SIZE=64 CONFIG_STDIO_LINEBUFFER=y CONFIG_NUNGET_CHARS=2 CONFIG_LIBC_FLOATINGPOINT=y CONFIG_LIBC_LONG_LONG=y CONFIG_ARCH_LOWPUTC=y CONFIG_LIBC_RAND_ORDER=1 CONFIG_LIBC_HOMEDIR=/
CONFIG_LIBC_TMPDIR=/tmp
CONFIG_LIBC_MAX_TMPFILE=32 CONFIG_LIBC_MAX_EXITFUNS=0 CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048 CONFIG_LIBC_HOSTNAME=\ CONFIG_LIBC_OPEN_MAX=256 CONFIG_NAME_MAX=32 CONFIG_PATH_MAX=256 CONFIG_LINE_MAX=64 CONFIG_LIBC_STRERROR_ERRNUM=y CONFIG_LIBC_STRSIGNAL=y CONFIG_LIBC_LOCALE=y CONFIG_TLS_NELEM=0 CONFIG_TLS_TASK_NELEM=0 CONFIG_TLS_NCLEANUP=0 CONFIG_LIBC_GAISTRERROR_ERRNUM=y CONFIG_LIBC_FTOK_VFS_PATH=/var/ftok
CONFIG_LIBC_MEMFD_ERROR=y CONFIG_LIBC_TEMPBUFFER=y CONFIG_LIBC_MAX_TEMPBUFFER=2 CONFIG_LIBC_TEMPBUFFER_MALLOC=y CONFIG_LIBC_MUTEX_BACKTRACE=0 CONFIG_BUILTIN=y CONFIG_STREAM_OUT_BUFFER_SIZE=64 CONFIG_STREAM_HEXDUMP_BUFFER_SIZE=128 CONFIG_STREAM_BASE64_BUFFER_SIZE=128 CONFIG_LIBC_INLINE_QUEUE=y CONFIG_LIBM_TOOLCHAIN=y CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_LIBCXXTOOLCHAIN=y CONFIG_LIBSUPCXX_TOOLCHAIN=y CONFIG_CXX_STANDARD=\c++17
CONFIG_CXX_EXCEPTION=y CONFIG_CXX_RTTI=y CONFIG_BUILTIN_TOOLCHAIN=y CONFIG_COVERAGE_NONE=y CONFIG_COVERAGE_DEFAULT_PREFIX_STRIP=\99
CONFIG_COVERAGE_DEFAULT_PREFIX=/data
CONFIG_PROFILE_NONE=y CONFIG_NSH_LIBRARY=y CONFIG_NSH_PROMPT_STRING=\nsh>
CONFIG_NSH_PROMPT_MAX=32 CONFIG_NSH_PROMPT_ENV=\PS1
CONFIG_NSH_PROMPT_SUFFIX=>
CONFIG_NSH_READLINE=y CONFIG_NSH_QUOTE=y CONFIG_NSH_MAXARGUMENTS=7 CONFIG_NSH_ARGCAT=y CONFIG_NSH_NESTDEPTH=3 CONFIG_NSH_ALIAS=y CONFIG_NSH_ALIAS_MAX_AMOUNT=1 CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_DISABLE_DATE=y CONFIG_NSH_DISABLE_IFCONFIG=y CONFIG_NSH_DISABLE_IFUPDOWN=y CONFIG_NSH_DISABLE_LOSMART=y CONFIG_NSH_DISABLE_LOMTD=y CONFIG_NSH_DISABLE_MB=y CONFIG_NSH_DISABLE_MH=y CONFIG_NSH_DISABLE_MW=y CONFIG_NSH_DISABLE_PS=y CONFIG_NSH_DISABLE_TIMEDATECTL=y CONFIG_NSH_CODECS_BUFSIZE=128 CONFIG_NSH_CMDOPT_HEXDUMP=y CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_SYSINITSCRIPT=\init.d/rc.sysinit
CONFIG_NSH_INITSCRIPT=\init.d/rcS
CONFIG_NSH_SCRIPT_REDIRECT_PATH=\ CONFIG_NSH_CONSOLE=y CONFIG_NSH_ARCHINIT=y CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PRIORITY=100 CONFIG_SYSTEM_NSH_STACKSIZE=2048 CONFIG_SYSTEM_NSH_PROGNAME=\nsh
CONFIG_SYSTEM_READLINE=y CONFIG_READLINE_HAVE_EXTMATCH=y CONFIG_READLINE_ECHO=y CONFIG_TESTING_CXXTEST=y CONFIG_TESTING_RAMTEST=y CONFIG_TESTING_RAMTEST_PROGNAME=\ramtest
CONFIG_TESTING_RAMTEST_PRIORITY=90 CONFIG_TESTING_RAMTEST_STACKSIZE=2048

Host system OS: Ubuntu 24.04.2 LTS Linux dank-engine 6.8.0-56-generic #58-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 14 15:33:28 UTC 2025 x86_64 x86_64

Host system PATH: /home/thomas/miniconda3/condabin /home/thomas/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin /home/thomas/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin /snap/bin

Verification

  • [x] I have verified before submitting the report.

trns1997 avatar Apr 15 '25 21:04 trns1997

@trns1997 does the same issue happen when you compile with Makefile?

@xiaoxiang781216 Have you or your team seen this issue before?

acassis avatar Apr 15 '25 22:04 acassis

@xuxin930 please take a look.

xiaoxiang781216 avatar Apr 16 '25 02:04 xiaoxiang781216

@trns1997 does the same issue happen when you compile with Makefile?

No the issue does not occur when compiling using the Makefile.

trns1997 avatar Apr 16 '25 05:04 trns1997

@xuxin930请看一下。

sure @xiaoxiang781216 @acassis @trns1997 I have located the issue, because when neither libcxx nor uclibc++ is selected, cmake does not have a default cxx standard library header file search path. I consider adding it in a suitable place

xuxin930 avatar Apr 17 '25 13:04 xuxin930

@xuxin930请看一下。

sure @xiaoxiang781216 @acassis @trns1997 I have located the issue, because when neither libcxx nor uclibc++ is selected, cmake does not have a default cxx standard library header file search path. I consider adding it in a suitable place

Nice @xuxin930, do not hesitate to ping me on the PR, that way i can test :)

trns1997 avatar Apr 17 '25 13:04 trns1997

Is there any update about this? I faced the same issue or maybe is there any temporary solution?

Barto22 avatar Jul 16 '25 11:07 Barto22

Is there any update about this? I faced the same issue or maybe is there any temporary solution?

The temp solution would be to compile using the Makefile. Unless @xuxin930 has already implemented the solution.

trns1997 avatar Jul 19 '25 09:07 trns1997

let try this patch https://github.com/apache/nuttx/pull/16751

xuxin930 avatar Jul 20 '25 06:07 xuxin930

@xuxin930 I'll give it a try this evening if the patch is ready :)

trns1997 avatar Jul 20 '25 10:07 trns1997