diff --git a/libcxx/cmake/caches/Armv7M-picolibc.cmake b/libcxx/cmake/caches/Armv7M-picolibc.cmake --- a/libcxx/cmake/caches/Armv7M-picolibc.cmake +++ b/libcxx/cmake/caches/Armv7M-picolibc.cmake @@ -29,6 +29,8 @@ set(LIBCXX_ENABLE_THREADS OFF CACHE BOOL "") set(LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "") set(LIBCXX_INCLUDE_BENCHMARKS OFF CACHE BOOL "") +# Long tests are prohibitively slow when run via emulation. +set(LIBCXX_TEST_PARAMS "long_tests=False" CACHE STRING "") set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "") set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "") set(LIBUNWIND_ENABLE_STATIC ON CACHE BOOL "") @@ -36,3 +38,4 @@ set(LIBUNWIND_IS_BAREMETAL ON CACHE BOOL "") set(LIBUNWIND_REMEMBER_HEAP_ALLOC ON CACHE BOOL "") set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "") +find_program(QEMU_SYSTEM_ARM qemu-system-arm) diff --git a/libcxx/docs/index.rst b/libcxx/docs/index.rst --- a/libcxx/docs/index.rst +++ b/libcxx/docs/index.rst @@ -133,7 +133,7 @@ Android 5.0+ i386, x86_64, arm, arm64 Windows i386, x86_64 Both MSVC and MinGW style environments, ABI in MSVC environments is :doc:`unstable ` AIX 7.2TL5+ powerpc, powerpc64 -Embedded (picolibc) arm Support for building with picolibc is currently work-in-progress +Embedded (picolibc) arm ===================== ========================= ============================ Generally speaking, libc++ should work on any platform that provides a fairly complete diff --git a/libcxx/test/configs/armv7m-picolibc-libc++.cfg.in b/libcxx/test/configs/armv7m-picolibc-libc++.cfg.in --- a/libcxx/test/configs/armv7m-picolibc-libc++.cfg.in +++ b/libcxx/test/configs/armv7m-picolibc-libc++.cfg.in @@ -26,10 +26,16 @@ ' -Wl,--defsym=__ram_size=0x1000000' ' -Wl,--defsym=__stack_size=0x1000' )) + +config.executor = ( + '@LIBCXX_SOURCE_DIR@/utils/qemu_baremetal.py' + ' --qemu @QEMU_SYSTEM_ARM@' + ' --machine mps2-an385' + ' --cpu cortex-m3') config.substitutions.append(('%{exec}', - 'true' # TODO use qemu-system-arm + '%{executor}' + ' --execdir %T' )) -config.available_features.add('libcxx-fake-executor') import os, site site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils')) diff --git a/libcxx/test/libcxx/selftest/dsl/dsl.sh.py b/libcxx/test/libcxx/selftest/dsl/dsl.sh.py --- a/libcxx/test/libcxx/selftest/dsl/dsl.sh.py +++ b/libcxx/test/libcxx/selftest/dsl/dsl.sh.py @@ -6,7 +6,9 @@ # # ===----------------------------------------------------------------------===## -# XFAIL: libcxx-fake-executor +# With picolibc, test_program_stderr_is_not_conflated_with_stdout fails +# because stdout & stderr are treated as the same. +# XFAIL: LIBCXX-PICOLIBC-FIXME # Note: We prepend arguments with 'x' to avoid thinking there are too few # arguments in case an argument is an empty string. diff --git a/libcxx/test/libcxx/selftest/pass.cpp/run-error.pass.cpp b/libcxx/test/libcxx/selftest/pass.cpp/run-error.pass.cpp --- a/libcxx/test/libcxx/selftest/pass.cpp/run-error.pass.cpp +++ b/libcxx/test/libcxx/selftest/pass.cpp/run-error.pass.cpp @@ -6,7 +6,6 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: libcxx-fake-executor // XFAIL: * // Make sure the test DOES NOT pass if it fails at runtime. diff --git a/libcxx/test/libcxx/selftest/pass.mm/run-error.pass.mm b/libcxx/test/libcxx/selftest/pass.mm/run-error.pass.mm --- a/libcxx/test/libcxx/selftest/pass.mm/run-error.pass.mm +++ b/libcxx/test/libcxx/selftest/pass.mm/run-error.pass.mm @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// // REQUIRES: objective-c++ -// UNSUPPORTED: libcxx-fake-executor // XFAIL: * diff --git a/libcxx/test/libcxx/selftest/stdin-is-piped.sh.cpp b/libcxx/test/libcxx/selftest/stdin-is-piped.sh.cpp --- a/libcxx/test/libcxx/selftest/stdin-is-piped.sh.cpp +++ b/libcxx/test/libcxx/selftest/stdin-is-piped.sh.cpp @@ -8,6 +8,8 @@ // Make sure that the executor pipes standard input to the test-executable being run. +// XFAIL: LIBCXX-PICOLIBC-FIXME + // RUN: %{build} // RUN: echo "abc" | %{exec} %t.exe diff --git a/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp b/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp --- a/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp +++ b/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp @@ -6,6 +6,9 @@ // //===----------------------------------------------------------------------===// +// This test appears to hang with picolibc & qemu. +// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME + // // template diff --git a/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category.pass.cpp b/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category.pass.cpp --- a/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category.pass.cpp +++ b/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category.pass.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// // XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10|11|12}} +// XFAIL: LIBCXX-PICOLIBC-FIXME // diff --git a/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp b/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp --- a/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp +++ b/libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp @@ -13,6 +13,7 @@ // const error_category& system_category(); // XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10|11|12}} +// XFAIL: LIBCXX-PICOLIBC-FIXME #include #include diff --git a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cerr.sh.cpp b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cerr.sh.cpp --- a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cerr.sh.cpp +++ b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cerr.sh.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME +// XFAIL: LIBCXX-PICOLIBC-FIXME // diff --git a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cin.sh.cpp b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cin.sh.cpp --- a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cin.sh.cpp +++ b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cin.sh.cpp @@ -8,6 +8,7 @@ // TODO: Investigate // UNSUPPORTED: LIBCXX-AIX-FIXME +// XFAIL: LIBCXX-PICOLIBC-FIXME // This test hangs on Android devices that lack shell_v2, which was added in // Android N (API 24). diff --git a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/clog.sh.cpp b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/clog.sh.cpp --- a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/clog.sh.cpp +++ b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/clog.sh.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME +// XFAIL: LIBCXX-PICOLIBC-FIXME // diff --git a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cout.sh.cpp b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cout.sh.cpp --- a/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cout.sh.cpp +++ b/libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cout.sh.cpp @@ -6,8 +6,6 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME - // // ostream cout; diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp @@ -9,7 +9,6 @@ // test sized operator delete[] replacement. // UNSUPPORTED: sanitizer-new-delete, c++03, c++11 -// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME // NOTE: Clang does not enable sized-deallocation in C++14 and beyond by // default. It is only enabled when -fsized-deallocation is given. diff --git a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp --- a/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp +++ b/libcxx/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp @@ -9,7 +9,6 @@ // test sized operator delete replacement. // UNSUPPORTED: sanitizer-new-delete, c++03, c++11 -// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME // NOTE: Clang does not enable sized-deallocation in C++14 and beyond by // default. It is only enabled when -fsized-deallocation is given. diff --git a/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp b/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp --- a/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp +++ b/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp @@ -6,6 +6,8 @@ // //===----------------------------------------------------------------------===// +// XFAIL: LIBCXX-PICOLIBC-FIXME + // // template <> class ctype diff --git a/libcxx/test/std/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.pass.cpp b/libcxx/test/std/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.pass.cpp --- a/libcxx/test/std/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.pass.cpp +++ b/libcxx/test/std/localization/locale.categories/category.numeric/locale.nm.put/facet.num.put.members/put_long_double.pass.cpp @@ -13,6 +13,7 @@ // iter_type put(iter_type s, ios_base& iob, char_type fill, long double v) const; // XFAIL: win32-broken-printf-g-precision +// XFAIL: LIBCXX-PICOLIBC-FIXME // Needs more investigation, but this is probably failing on Android M (API 23) // and up because the printf formatting of NAN changed. diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp --- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp +++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.PR44847.pass.cpp @@ -18,6 +18,9 @@ // Serializing/deserializing the state of the RNG requires iostreams // UNSUPPORTED: no-localization +// This test appears to hang with picolibc & qemu. +// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME + #include #include #include diff --git a/libcxx/test/std/time/time.clock/time.clock.file/now.pass.cpp b/libcxx/test/std/time/time.clock/time.clock.file/now.pass.cpp --- a/libcxx/test/std/time/time.clock/time.clock.file/now.pass.cpp +++ b/libcxx/test/std/time/time.clock/time.clock.file/now.pass.cpp @@ -10,6 +10,9 @@ // UNSUPPORTED: availability-filesystem-missing +// qemu: Unsupported SemiHosting SWI 0x30 +// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME + // // file_clock diff --git a/libcxxabi/test/configs/armv7m-picolibc-libc++abi.cfg.in b/libcxxabi/test/configs/armv7m-picolibc-libc++abi.cfg.in --- a/libcxxabi/test/configs/armv7m-picolibc-libc++abi.cfg.in +++ b/libcxxabi/test/configs/armv7m-picolibc-libc++abi.cfg.in @@ -17,10 +17,16 @@ ' -Wl,--defsym=__ram_size=0x1000000' ' -Wl,--defsym=__stack_size=0x1000' )) + +config.executor = ( + '@LIBCXXABI_LIBCXX_PATH@/utils/qemu_baremetal.py' + ' --qemu @QEMU_SYSTEM_ARM@' + ' --machine mps2-an385' + ' --cpu cortex-m3') config.substitutions.append(('%{exec}', - 'true' # TODO use qemu-system-arm + '%{executor}' + ' --execdir %T' )) -config.available_features.add('libcxx-fake-executor') import os, site site.addsitedir(os.path.join('@LIBCXXABI_LIBCXX_PATH@', 'utils')) diff --git a/libunwind/test/configs/armv7m-picolibc-libunwind.cfg.in b/libunwind/test/configs/armv7m-picolibc-libunwind.cfg.in --- a/libunwind/test/configs/armv7m-picolibc-libunwind.cfg.in +++ b/libunwind/test/configs/armv7m-picolibc-libunwind.cfg.in @@ -17,10 +17,16 @@ ' -Wl,--defsym=__ram_size=0x1000000' ' -Wl,--defsym=__stack_size=0x1000' )) + +config.executor = ( + '@LIBUNWIND_LIBCXX_PATH@/utils/qemu_baremetal.py' + ' --qemu @QEMU_SYSTEM_ARM@' + ' --machine mps2-an385' + ' --cpu cortex-m3') config.substitutions.append(('%{exec}', - 'true' # TODO use qemu-system-arm + '%{executor}' + ' --execdir %T' )) -config.available_features.add('libcxx-fake-executor') import os, site site.addsitedir(os.path.join('@LIBUNWIND_LIBCXX_PATH@', 'utils')) diff --git a/libunwind/test/libunwind_02.pass.cpp b/libunwind/test/libunwind_02.pass.cpp --- a/libunwind/test/libunwind_02.pass.cpp +++ b/libunwind/test/libunwind_02.pass.cpp @@ -10,6 +10,9 @@ // TODO: Figure out why this fails with Memory Sanitizer. // XFAIL: msan +// This test fails on older llvm, when built with picolibc. +// XFAIL: clang-16 && LIBCXX-PICOLIBC-FIXME + #undef NDEBUG #include #include