diff --git a/arch/sim/src/cmake/Toolchain.cmake b/arch/sim/src/cmake/Toolchain.cmake index 1b91a918be..47ef9e5f02 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($<$<COMPILE_LANGUAGE:CXX>:-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 0000000000..56ae62c402 --- /dev/null +++ b/libs/libxx/0001_fix_stdatomic_h_miss_typedef.patch @@ -0,0 +1,11 @@ +--- libcxx/include/stdatomic.h.old 2023-12-06 21:01:46.168049453 +0800 ++++ libcxx/include/stdatomic.h 2023-12-06 21:01:55.056057032 +0800 +@@ -220,7 +220,7 @@ + using std::atomic_signal_fence _LIBCPP_USING_IF_EXISTS; + using std::atomic_thread_fence _LIBCPP_USING_IF_EXISTS; + +-#elif defined(_LIBCPP_COMPILER_CLANG_BASED) ++#else + + // Before C++23, we include the next <stdatomic.h> on the path to avoid hijacking + // the header. We do this because Clang has historically shipped a <stdatomic.h> diff --git a/libs/libxx/libcxx.cmake b/libs/libxx/libcxx.cmake index 3937cfe7db..74846ec63d 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,13 +53,31 @@ 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() +find_program(GN_EXECUTABLEXX gn REQUIRED) +message("GN_EXECUTABLEXX ${GN_EXECUTABLEXX}") + set_property( TARGET nuttx 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__)