nuttx-apps/system/microros/patches/0002-rcutils-process-nuttx-compat.patch
Arjav Patel 55a7d4d2df apps/system/microros: define __NuttX__ in cross-compile toolchain flags.
Add -D__NuttX__ to CMAKE_C_FLAGS_INIT and CMAKE_CXX_FLAGS_INIT in
toolchain.cmake.in so that all cross-compiled micro-ROS packages see the
NuttX target macro.  Without this, rcutils/src/process.c follows the
__linux__ branch and references program_invocation_name, a glibc-only
extension absent from the NuttX C library.

Pair with 0002-rcutils-process-nuttx-compat.patch which additionally
guards the linux branch with !defined(__NuttX__), ensuring the embedded
fallback path is taken on NuttX even if the host compiler defines any
linux-flavoured macros.

Signed-off-by: Arjav Patel <arjav1528@gmail.com>
2026-05-26 06:57:55 +08:00

20 lines
1.1 KiB
Diff

From: micro-ROS NuttX Port <noreply@nuttx.apache.org>
Subject: [PATCH] rcutils: skip program_invocation_name on NuttX
When cross-compiling for NuttX on a Linux host the compiler still
defines __linux__, causing rcutils_get_executable_name() to reference
program_invocation_name which is a glibc extension absent from the
NuttX C library. Guard the Linux branch with !defined(__NuttX__) so
the "embedded OS" fallback (empty string) is taken instead.
--- a/rcutils/src/process.c
+++ b/rcutils/src/process.c
@@ -61,7 +61,7 @@ int rcutils_get_pid()
#if defined __APPLE__ || defined __FreeBSD__ || (defined __ANDROID__ && __ANDROID_API__ >= 21)
const char * appname = getprogname();
#elif defined __GNUC__ && !defined(__QNXNTO__) && !defined(__OHOS__)
- #if defined __linux__ || defined __linux || defined __gnu_linux__ || defined linux
+ #if (defined __linux__ || defined __linux || defined __gnu_linux__ || defined linux) && !defined(__NuttX__)
const char * appname = program_invocation_name;
#else
// Some embedded OS compile with __GNUC__ but are not quite conformant with GNU-specific extensions.