diff --git a/libcxx/cmake/caches/Armv7M-picolibc.cmake b/libcxx/cmake/caches/Armv7M-picolibc.cmake index 9f8863943444..91cc32fd376e 100644 --- a/libcxx/cmake/caches/Armv7M-picolibc.cmake +++ b/libcxx/cmake/caches/Armv7M-picolibc.cmake @@ -13,17 +13,18 @@ set(COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "") set(COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE BOOL "") set(LIBCXXABI_BAREMETAL ON CACHE BOOL "") set(LIBCXXABI_ENABLE_ASSERTIONS OFF CACHE BOOL "") -set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "") +set(LIBCXXABI_ENABLE_EXCEPTIONS ON CACHE BOOL "") set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_STATIC ON CACHE BOOL "") +set(LIBCXXABI_ENABLE_STATIC_UNWINDER ON CACHE BOOL "") set(LIBCXXABI_ENABLE_THREADS OFF CACHE BOOL "") set(LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "") set(LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "") -set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") +set(LIBCXX_ENABLE_EXCEPTIONS ON CACHE BOOL "") set(LIBCXX_ENABLE_FILESYSTEM OFF CACHE STRING "") set(LIBCXX_ENABLE_MONOTONIC_CLOCK OFF CACHE BOOL "") set(LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "") -set(LIBCXX_ENABLE_RTTI OFF CACHE BOOL "") +set(LIBCXX_ENABLE_RTTI ON CACHE BOOL "") set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "") set(LIBCXX_ENABLE_THREADS OFF CACHE BOOL "") diff --git a/libcxx/utils/ci/buildkite-pipeline.yml b/libcxx/utils/ci/buildkite-pipeline.yml index c63f6a78b160..a48f8524ef63 100644 --- a/libcxx/utils/ci/buildkite-pipeline.yml +++ b/libcxx/utils/ci/buildkite-pipeline.yml @@ -224,6 +224,13 @@ steps: arch: aarch64 <<: *common + - label: Armv7-M picolibc -fno-exceptions + command: libcxx/utils/ci/run-buildbot armv7m-picolibc-no-exceptions + agents: + queue: libcxx-builders-linaro-arm + arch: aarch64 + <<: *common + - group: AIX steps: - label: AIX (32-bit) diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot index ee890fb76699..672d5cb70ae8 100755 --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -203,6 +203,43 @@ function check-cxx-benchmarks() { ${NINJA} -vC "${BUILD_DIR}" check-cxx-benchmarks } +function test-armv7m-picolibc() { + clean + + # To make it easier to get this builder up and running, build picolibc + # from scratch. Anecdotally, the build-picolibc script takes about 16 seconds. + # This could be optimised by building picolibc into the Docker container. + ${MONOREPO_ROOT}/libcxx/utils/ci/build-picolibc.sh \ + --build-dir "${BUILD_DIR}" \ + --install-dir "${INSTALL_DIR}" \ + --target armv7m-none-eabi + + echo "--- Generating CMake" + flags="--sysroot=${INSTALL_DIR}" + ${CMAKE} \ + -S "${MONOREPO_ROOT}/compiler-rt" \ + -B "${BUILD_DIR}/compiler-rt" \ + -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ + -DCMAKE_C_FLAGS="${flags}" \ + -DCMAKE_CXX_FLAGS="${flags}" \ + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \ + "${@}" + generate-cmake \ + -DLIBCXX_TEST_CONFIG="armv7m-picolibc-libc++.cfg.in" \ + -DLIBCXXABI_TEST_CONFIG="armv7m-picolibc-libc++abi.cfg.in" \ + -DLIBUNWIND_TEST_CONFIG="armv7m-picolibc-libunwind.cfg.in" \ + -DCMAKE_C_FLAGS="${flags}" \ + -DCMAKE_CXX_FLAGS="${flags}" \ + "${@}" + + ${NINJA} -vC "${BUILD_DIR}/compiler-rt" install + mv "${BUILD_DIR}/install/lib/armv7m-none-eabi"/* "${BUILD_DIR}/install/lib" + + check-runtimes +} + # Print the version of a few tools to aid diagnostics in some cases ${CMAKE} --version ${NINJA} --version @@ -616,39 +653,16 @@ armv7-no-exceptions) check-runtimes ;; armv7m-picolibc) - clean - - # To make it easier to get this builder up and running, build picolibc - # from scratch. Anecdotally, the build-picolibc script takes about 16 seconds. - # This could be optimised by building picolibc into the Docker container. - ${MONOREPO_ROOT}/libcxx/utils/ci/build-picolibc.sh \ - --build-dir "${BUILD_DIR}" \ - --install-dir "${INSTALL_DIR}" \ - --target armv7m-none-eabi - - echo "--- Generating CMake" - flags="--sysroot=${INSTALL_DIR}" - ${CMAKE} \ - -S "${MONOREPO_ROOT}/compiler-rt" \ - -B "${BUILD_DIR}/compiler-rt" \ - -GNinja -DCMAKE_MAKE_PROGRAM="${NINJA}" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" \ + test-armv7m-picolibc \ + -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7M-picolibc.cmake" +;; +armv7m-picolibc-no-exceptions) + test-armv7m-picolibc \ -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7M-picolibc.cmake" \ - -DCMAKE_C_FLAGS="${flags}" \ - -DCMAKE_CXX_FLAGS="${flags}" \ - -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON - generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Armv7M-picolibc.cmake" \ - -DLIBCXX_TEST_CONFIG="armv7m-picolibc-libc++.cfg.in" \ - -DLIBCXXABI_TEST_CONFIG="armv7m-picolibc-libc++abi.cfg.in" \ - -DLIBUNWIND_TEST_CONFIG="armv7m-picolibc-libunwind.cfg.in" \ - -DCMAKE_C_FLAGS="${flags}" \ - -DCMAKE_CXX_FLAGS="${flags}" - - ${NINJA} -vC "${BUILD_DIR}/compiler-rt" install - mv "${BUILD_DIR}/install/lib/armv7m-none-eabi"/* "${BUILD_DIR}/install/lib" - - check-runtimes + -DLIBCXXABI_ENABLE_EXCEPTIONS=OFF \ + -DLIBCXXABI_ENABLE_STATIC_UNWINDER=OFF \ + -DLIBCXX_ENABLE_EXCEPTIONS=OFF \ + -DLIBCXX_ENABLE_RTTI=OFF ;; clang-cl-dll) clean diff --git a/libcxxabi/test/catch_multi_level_pointer.pass.cpp b/libcxxabi/test/catch_multi_level_pointer.pass.cpp index 00ea66da3017..5f0e78a391b1 100644 --- a/libcxxabi/test/catch_multi_level_pointer.pass.cpp +++ b/libcxxabi/test/catch_multi_level_pointer.pass.cpp @@ -11,6 +11,10 @@ // 1b00fc5d8133 made it in the dylib in macOS 10.11 // XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10}} +// mps2-an385 machine used for testing of picolibc has just 4 MB of "flash" +// memory and this test requires almost 5 MB +// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME + #include #include #include