mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 05:55:46 +08:00
libcxx: porting libcxx test.
porting libcxx test case to nuttx. Signed-off-by: cuiziwei <cuiziwei@xiaomi.com>
This commit is contained in:
@@ -220,6 +220,10 @@ if(CONFIG_LIBCXX)
|
|||||||
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-D_LIBCPP_DISABLE_AVAILABILITY>)
|
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-D_LIBCPP_DISABLE_AVAILABILITY>)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CONFIG_LIBCXX_TEST)
|
||||||
|
add_link_options(-Wl,-latomic)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
add_link_options(-Wl,-dead_strip)
|
add_link_options(-Wl,-dead_strip)
|
||||||
else()
|
else()
|
||||||
|
|||||||
@@ -137,4 +137,9 @@ config LIBCXX_VERSION
|
|||||||
depends on LIBCXX
|
depends on LIBCXX
|
||||||
default "17.0.6"
|
default "17.0.6"
|
||||||
|
|
||||||
|
config LIBCXX_TEST
|
||||||
|
bool "LLVM Libcxx Library Test"
|
||||||
|
depends on LIBCXX && CXX_EXCEPTION
|
||||||
|
default n
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -69,13 +69,17 @@ if(CONFIG_LIBCXX)
|
|||||||
nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/libcxx/include
|
nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/libcxx/include
|
||||||
${CMAKE_BINARY_DIR}/include/libcxx)
|
${CMAKE_BINARY_DIR}/include/libcxx)
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_LIST_DIR}/../__config_site
|
nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/../__config_site
|
||||||
${CMAKE_BINARY_DIR}/include/libcxx/__config_site COPYONLY)
|
${CMAKE_BINARY_DIR}/include/libcxx_config/__config_site)
|
||||||
|
|
||||||
set_property(
|
set_property(
|
||||||
TARGET nuttx
|
TARGET nuttx
|
||||||
APPEND
|
APPEND
|
||||||
PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include/libcxx)
|
PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES
|
||||||
|
${CMAKE_BINARY_DIR}/include/libcxx
|
||||||
|
${CMAKE_BINARY_DIR}/include/libcxx_config
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/libcxx/test/support
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/libcxx/src)
|
||||||
|
|
||||||
add_compile_definitions(_LIBCPP_BUILDING_LIBRARY)
|
add_compile_definitions(_LIBCPP_BUILDING_LIBRARY)
|
||||||
if(CONFIG_LIBSUPCXX_TOOLCHAIN)
|
if(CONFIG_LIBSUPCXX_TOOLCHAIN)
|
||||||
@@ -142,4 +146,190 @@ if(CONFIG_LIBCXX)
|
|||||||
target_compile_options(libcxx PRIVATE ${FLAGS})
|
target_compile_options(libcxx PRIVATE ${FLAGS})
|
||||||
target_include_directories(libcxx BEFORE
|
target_include_directories(libcxx BEFORE
|
||||||
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libcxx/src)
|
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/libcxx/src)
|
||||||
|
|
||||||
|
if(CONFIG_LIBCXX_TEST)
|
||||||
|
list(
|
||||||
|
APPEND
|
||||||
|
FLAGS
|
||||||
|
-Wno-array-bounds
|
||||||
|
-Wno-permissive
|
||||||
|
-Wno-unused-variable
|
||||||
|
-Wno-unused-but-set-variable
|
||||||
|
-Wno-psabi
|
||||||
|
-Wno-unused-local-typedefs
|
||||||
|
-Wno-unused-result
|
||||||
|
-Wno-unused-function
|
||||||
|
-Wno-undef
|
||||||
|
-Wno-return-type
|
||||||
|
-Wno-self-move
|
||||||
|
-Wno-class-memaccess
|
||||||
|
-Wno-tautological-compare
|
||||||
|
-Wno-narrowing
|
||||||
|
-Wno-use-after-free
|
||||||
|
-Wno-invalid-memory-model
|
||||||
|
-Wno-mismatched-new-delete)
|
||||||
|
add_compile_options(-UNDEBUG)
|
||||||
|
add_compile_definitions(
|
||||||
|
DISABLE_NEW_COUNT
|
||||||
|
_LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE
|
||||||
|
_LIBCPP_ENABLE_DEBUG_MODE
|
||||||
|
_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS
|
||||||
|
_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
|
||||||
|
_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS
|
||||||
|
_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS
|
||||||
|
_LIBCPP_DISABLE_DEPRECATION_WARNINGS)
|
||||||
|
|
||||||
|
set(i 0)
|
||||||
|
set(TEST_DIR "${CMAKE_CURRENT_LIST_DIR}/libcxx/test")
|
||||||
|
file(GLOB_RECURSE TESTS "${TEST_DIR}/*.pass.cpp")
|
||||||
|
file(
|
||||||
|
GLOB
|
||||||
|
UNSUPPORTED_TESTS
|
||||||
|
# error: ‘_wremove’ was not declared in this scope
|
||||||
|
${TEST_DIR}/libcxx/input.output/file.streams/fstreams/ifstream.members/open_wchar_pointer.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/input.output/file.streams/fstreams/ofstream.members/open_wchar_pointer.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/input.output/file.streams/fstreams/ofstream.cons/wchar_pointer.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/input.output/file.streams/fstreams/fstream.members/open_wchar_pointer.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/input.output/file.streams/fstreams/fstream.cons/wchar_pointer.pass.cpp
|
||||||
|
# error: ‘x’ in ‘struct Foo’ does not name a type
|
||||||
|
${TEST_DIR}/libcxx/selftest/compile.pass.cpp/compile-error.compile.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/selftest/pass.cpp/compile-error.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/selftest/link.pass.cpp/compile-error.link.pass.cpp
|
||||||
|
# error: ‘__sanitizer_verify_contiguous_container’ was not declared in
|
||||||
|
# this scope
|
||||||
|
${TEST_DIR}/libcxx/containers/sequences/vector/asan.pass.cpp
|
||||||
|
# error: attributes are not allowed on a function-definition
|
||||||
|
${TEST_DIR}/libcxx/thread/thread.mutex/thread_safety_requires_capability.pass.cpp
|
||||||
|
# fatal error: Block.h: No such file or directory
|
||||||
|
${TEST_DIR}/libcxx/utilities/function.objects/func.blocks.pass.cpp
|
||||||
|
# link error
|
||||||
|
${TEST_DIR}/libcxx/selftest/compile.pass.cpp/link-error.compile.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/selftest/link.pass.cpp/link-error.link.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/selftest/pass.cpp/link-error.pass.cpp
|
||||||
|
# std::views::join
|
||||||
|
${TEST_DIR}/std/ranges/range.adaptors/range.join.view/adaptor.pass.cpp
|
||||||
|
${TEST_DIR}/std/library/description/conventions/customization.point.object/cpo.compile.pass.cpp
|
||||||
|
${TEST_DIR}/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy.segmented.pass.cpp
|
||||||
|
${TEST_DIR}/std/algorithms/alg.modifying.operations/alg.copy/ranges.copy_backward.pass.cpp
|
||||||
|
# no build __partition_chunks
|
||||||
|
${TEST_DIR}/libcxx/algorithms/pstl.libdispatch.chunk_partitions.pass.cpp
|
||||||
|
# REQUIRES: c++98 || c++03 || c++11 || c++14
|
||||||
|
${TEST_DIR}/std/containers/associative/multimap/multimap.value_compare/types.pass.cpp
|
||||||
|
${TEST_DIR}/std/containers/associative/map/map.value_compare/types.pass.cpp
|
||||||
|
# std::result_of
|
||||||
|
${TEST_DIR}/std/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/meta/meta.trans/meta.trans.other/result_of11.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/func.invoke/invoke.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/func.invoke/invoke_constexpr.pass.cpp
|
||||||
|
# WINT_MIN undef
|
||||||
|
${TEST_DIR}/std/language.support/cstdint/cstdint.syn/cstdint.pass.cpp
|
||||||
|
${TEST_DIR}/std/input.output/file.streams/c.files/cinttypes.pass.cpp
|
||||||
|
# static assertion failed
|
||||||
|
${TEST_DIR}/std/language.support/support.runtime/cstdlib.pass.cpp
|
||||||
|
# error: static assertion failed: Types differ unexpectedly
|
||||||
|
${TEST_DIR}/std/strings/c.strings/cstring.pass.cpp
|
||||||
|
${TEST_DIR}/std/strings/c.strings/cwchar.pass.cpp
|
||||||
|
# error: ‘is_literal_type_v’ is not a member of ‘std’
|
||||||
|
${TEST_DIR}/std/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/containers/sequences/vector/asan.pass.cpp
|
||||||
|
# error: static assertion failed
|
||||||
|
${TEST_DIR}/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp
|
||||||
|
# unsport c++20
|
||||||
|
${TEST_DIR}/std/utilities/memory/default.allocator/allocator_types.void.compile.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/utility/pairs/pairs.pair/assign_pair_cxx03.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/func.require/binary_function.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/func.require/unary_function.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/refwrap/weak_result.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/refwrap/binder_typedefs.compile.pass.cpp
|
||||||
|
${TEST_DIR}/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array11.pass.cpp
|
||||||
|
${TEST_DIR}/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete11.pass.cpp
|
||||||
|
# arm build error
|
||||||
|
${TEST_DIR}/std/numerics/cfenv/cfenv.syn/cfenv.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp
|
||||||
|
${TEST_DIR}/std/localization/locales/locale.convenience/conversions/conversions.buffer/seekoff.pass.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
file(
|
||||||
|
GLOB_RECURSE
|
||||||
|
SKIP_TESTS
|
||||||
|
${TEST_DIR}/libcxx/containers/views/mdspan/*.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/input.output/iostream.format/print.fun/*.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/ranges/range.factories/range.repeat.view/*.pass.cpp
|
||||||
|
${TEST_DIR}/libcxx/utilities/expected/*.pass.cpp
|
||||||
|
# skip deprecated test
|
||||||
|
${TEST_DIR}/libcxx/depr/*.pass.cpp
|
||||||
|
${TEST_DIR}/std/depr/*.pass.cpp
|
||||||
|
${TEST_DIR}/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/*.pass.cpp
|
||||||
|
# arm atomic undef
|
||||||
|
${TEST_DIR}/std/atomics/atomics.types.operations/atomics.types.operations.req/*.pass.cpp
|
||||||
|
${TEST_DIR}/std/atomics/atomics.types.operations/atomics.types.operations.wait/*.pass.cpp
|
||||||
|
)
|
||||||
|
list(REMOVE_ITEM TESTS ${UNSUPPORTED_TESTS} ${SKIP_TESTS})
|
||||||
|
foreach(TEST ${TESTS})
|
||||||
|
if(EXISTS ${TEST})
|
||||||
|
set(GREP_PATTERNS
|
||||||
|
"UNSUPPORTED: c++03, c++11, c++14, c++17, c++20"
|
||||||
|
"TEST_LIBCPP_ASSERT_FAILURE"
|
||||||
|
"static_assert(test"
|
||||||
|
"UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME"
|
||||||
|
"UNSUPPORTED: gcc"
|
||||||
|
"include <sstream>"
|
||||||
|
"std::ranges::join_view"
|
||||||
|
"std::binary_function"
|
||||||
|
"std::unary_function"
|
||||||
|
"std::binary_negate"
|
||||||
|
"std::not1"
|
||||||
|
"std::not2"
|
||||||
|
"std::unary_negate"
|
||||||
|
"std::raw_storage_iterator"
|
||||||
|
"void operator delete"
|
||||||
|
"filesystem_test_helper.h"
|
||||||
|
"asan_testing.h")
|
||||||
|
|
||||||
|
set(SKIP_TEST FALSE)
|
||||||
|
|
||||||
|
foreach(PATTERN IN LISTS GREP_PATTERNS)
|
||||||
|
execute_process(COMMAND grep -q "${PATTERN}" ${TEST}
|
||||||
|
RESULT_VARIABLE grep_result)
|
||||||
|
|
||||||
|
if(grep_result EQUAL 0)
|
||||||
|
set(SKIP_TEST TRUE)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(SKIP_TEST)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND grep -q "int main" ${TEST}
|
||||||
|
RESULT_VARIABLE grep_result)
|
||||||
|
if(NOT grep_result EQUAL 0)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(TEST_NAME ${TEST} NAME_WE)
|
||||||
|
foreach(CHARACTER "+" "-" "=" "[]")
|
||||||
|
string(REPLACE "${CHARACTER}" "_" TEST_NAME "${TEST_NAME}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
nuttx_add_application(
|
||||||
|
NAME
|
||||||
|
${TEST_NAME}_${i}
|
||||||
|
SRCS
|
||||||
|
${TEST}
|
||||||
|
STACKSIZE
|
||||||
|
102400
|
||||||
|
COMPILE_FLAGS
|
||||||
|
${FLAGS})
|
||||||
|
set_source_files_properties(
|
||||||
|
${TEST_DIR}/libcxx/containers/sequences/vector/exception_safety_exceptions_disabled.pass.cpp
|
||||||
|
PROPERTIES COMPILE_FLAGS -fno-exceptions)
|
||||||
|
math(EXPR i "${i}+1")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user