From b16b1dd9996961d1716d1db68a61cffc5c03e06d Mon Sep 17 00:00:00 2001 From: zhanghongyu Date: Mon, 27 Nov 2023 12:50:26 +0800 Subject: [PATCH] libcxx: fix build error. Signed-off-by: zhanghongyu --- arch/sim/src/cmake/Toolchain.cmake | 4 +++ .../0001_fix_stdatomic_h_miss_typedef.patch | 13 ++++++++ libs/libxx/libcxx.cmake | 32 +++++++++---------- 3 files changed, 33 insertions(+), 16 deletions(-) create mode 100644 libs/libxx/0001_fix_stdatomic_h_miss_typedef.patch diff --git a/arch/sim/src/cmake/Toolchain.cmake b/arch/sim/src/cmake/Toolchain.cmake index 1b91a918be2a2..47ef9e5f0224d 100644 --- a/arch/sim/src/cmake/Toolchain.cmake +++ b/arch/sim/src/cmake/Toolchain.cmake @@ -94,6 +94,10 @@ else() endif() endif() +if(CONFIG_CXX_STANDARD) + add_compile_options($<$:-std=${CONFIG_CXX_STANDARD}>) +endif() + set(ARCHCFLAGS "-Wstrict-prototypes") set(ARCHCXXFLAGS "-nostdinc++") diff --git a/libs/libxx/0001_fix_stdatomic_h_miss_typedef.patch b/libs/libxx/0001_fix_stdatomic_h_miss_typedef.patch new file mode 100644 index 0000000000000..257382ffd76c9 --- /dev/null +++ b/libs/libxx/0001_fix_stdatomic_h_miss_typedef.patch @@ -0,0 +1,13 @@ +--- libcxx_old/include/stdatomic.h 2023-11-27 12:44:27.143768194 +0800 ++++ libcxx/include/stdatomic.h 2023-11-27 12:31:46.498517673 +0800 +@@ -232,4 +232,10 @@ using std::atomic_thread_fence _LIBCPP_U + + #endif // defined(__cplusplus) && _LIBCPP_STD_VER > 20 + ++#ifndef atomic_int ++# if __has_include_next() ++# include_next ++# endif ++#endif ++ + #endif // _LIBCPP_STDATOMIC_H diff --git a/libs/libxx/libcxx.cmake b/libs/libxx/libcxx.cmake index 3937cfe7db7a3..4870d9985a2c0 100644 --- a/libs/libxx/libcxx.cmake +++ b/libs/libxx/libcxx.cmake @@ -24,22 +24,7 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libcxx) # cmake-format: off set(LIBCXX_PATCH_COMMAND - patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} < - ${CMAKE_CURRENT_LIST_DIR}/0001-Remove-the-locale-fallback-for-NuttX.patch - && patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} < - ${CMAKE_CURRENT_LIST_DIR}/0001-libc-avoid-the-waring-__EXCEPTIONS-is-not-defined-ev.patch - && patch -p1 -d ${CMAKE_CURRENT_LIST_DIR} < - ${CMAKE_CURRENT_LIST_DIR}/0001-libcxx-Rename-PS-macro-to-avoid-clashing-with-Xtensa.patch - ) - - if(CONFIG_LIBC_ARCH_ATOMIC) - list( - APPEND - LIBCXX_PATCH_COMMAND - && patch -p1 -d ${CMAKE_CURRENT_LIST_DIR} < - ${CMAKE_CURRENT_LIST_DIR}/0002-Omit-atomic_-un-signed_lock_free-if-unsupported.patch - ) - endif() + patch -p1 -d ${CMAKE_CURRENT_LIST_DIR}/libcxx < ${CMAKE_CURRENT_LIST_DIR}/0001_fix_stdatomic_h_miss_typedef.patch) # cmake-format: on FetchContent_Declare( libcxx @@ -68,6 +53,16 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libcxx) FetchContent_Populate(libcxx) endif() + execute_process( + COMMAND + sh -c + "ln -s ${CMAKE_CURRENT_LIST_DIR}/libcxx/include ${NUTTX_DIR}/include/libcxx}" + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + execute_process( + COMMAND + sh -c + "cp ${CMAKE_CURRENT_LIST_DIR}/__config_site ${NUTTX_DIR}/include/libcxx/__config_site" + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) endif() set_property( @@ -75,6 +70,11 @@ set_property( APPEND PROPERTY NUTTX_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/libcxx/include) +set_property( + TARGET nuttx + APPEND + PROPERTY NUTTX_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/libcxx/src) + add_compile_definitions(_LIBCPP_BUILDING_LIBRARY) if(CONFIG_LIBSUPCXX) add_compile_definitions(__GLIBCXX__)