Skip to content

Support build musl with --enable-llvm #1719

Open
@zqb-all

Description

@zqb-all

I try to support --enable-llvm for musl : #1718
but build fail with

[ 95%] Building CXX object libcxxabi/src/CMakeFiles/cxxabi_static_objects.dir/fallback_malloc.cpp.o
[ 95%] Building CXX object libcxxabi/src/CMakeFiles/cxxabi_static_objects.dir/private_typeinfo.cpp.o
[ 95%] Building CXX object libcxxabi/src/CMakeFiles/cxxabi_static_objects.dir/stdlib_new_delete.cpp.o
[ 95%] Building CXX object libcxxabi/src/CMakeFiles/cxxabi_static_objects.dir/cxa_noexception.cpp.o
[ 95%] Building CXX object libcxxabi/src/CMakeFiles/cxxabi_static_objects.dir/cxa_thread_atexit.cpp.o
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/llvm/libcxxabi/src/cxa_demangle.cpp:24:
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/functional:552:
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__functional/boyer_moore_searcher.h:27:
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/vector:325:
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__format/formatter_bool.h:19:
In file included from /home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__format/formatter_integral.h:35:
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:437:4: error: unknown rune table for this platform -- do you mean to define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE?
  437 | #  error unknown rune table for this platform -- do you mean to define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE?
      |    ^
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:439:16: error: unknown type name 'mask'
  439 |   static const mask alnum = alpha | digit;
      |                ^
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:439:29: error: use of undeclared identifier 'alpha'
  439 |   static const mask alnum = alpha | digit;
      |                             ^
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:439:37: error: use of undeclared identifier 'digit'
  439 |   static const mask alnum = alpha | digit;
      |                                     ^
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:440:16: error: unknown type name 'mask'
  440 |   static const mask graph = alnum | punct;
      |                ^
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/__locale:440:37: error: use of undeclared identifier 'punct'; did you mean 'putc'?
  440 |   static const mask graph = alnum | punct;
      |                                     ^~~~~
      |                                     putc
/home/mark/workspace/public_riscv-gnu-toolchain/riscv-gnu-toolchain/build_musl_llvm/build-llvm-musl/runtimes/runtimes-riscv64-unknown-linux-musl-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_riscv64/include/c++/v1/cstdio:139:9: note: 'putc' declared here
  139 | using ::putc _LIBCPP_USING_IF_EXISTS;

It looks like I need to configure LIBCXX_HAS_MUSL_LIBC=On, but I couldn't find a way to do that in Makefile.in

To confirm the impact of LIBCXX_HAS_MUSL_LIBC, I made a change to the llvm source code, which did resolve the compile error:

diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt
index 674082c7d178..35a43b8ac6cb 100644
--- a/libcxx/CMakeLists.txt
+++ b/libcxx/CMakeLists.txt
@@ -291,7 +291,7 @@ option(LIBCXX_ENABLE_THREADS "Build libc++ with support for threads." ON)
 option(LIBCXX_ENABLE_MONOTONIC_CLOCK
   "Build libc++ with support for a monotonic clock.
    This option may only be set to OFF when LIBCXX_ENABLE_THREADS=OFF." ON)
-option(LIBCXX_HAS_MUSL_LIBC "Build libc++ with support for the Musl C library" OFF)
+option(LIBCXX_HAS_MUSL_LIBC "Build libc++ with support for the Musl C library" ON)
 option(LIBCXX_HAS_PTHREAD_API "Ignore auto-detection and force use of pthread API" OFF)

Are there any suggestions on how to properly configure LIBCXX_HAS_MUSL_LIBC for compiler-rt in Makefile.in?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions