Skip to content

Conversation

@aa755
Copy link
Contributor

@aa755 aa755 commented Oct 18, 2025

mostly done by codex-cli
it builds successfully on my machine and all tests pass.
for that, I needed to build boost and libfuzzer from sources using libc++, the CI here may not be doing that
3 third_party libraries also needed to be patched (intx, evmc, sikpre). the submodule commits referenced in this PR are in forks under my github account.
ideally, our code should build with both libc++ and libstdc++

Detailed build instructions:
• Prereqs

  • clang-19 toolchain with libc++ headers (clang-19, clang++-19, libc++-19-dev, libc++abi-19-dev, llvm-19-dev) plus build basics (ninja-build, cmake, python3, pkg-config, zlib/brotli/gmp dev headers).
  • Pick install roots (I use $HOME/{libbacktrace-libcxx,boost-libcxx,libfuzzer-libcxx} below).

libbacktrace

  • git clone https://github.com/ianlancetaylor/libbacktrace.git
  • cmake -S libbacktrace -B build-libbacktrace -G Ninja -DCMAKE_INSTALL_PREFIX=$HOME/libbacktrace-libcxx -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-19 -DCMAKE_C_FLAGS="-O2 -fPIC"
  • cmake --build build-libbacktrace -j
  • cmake --install build-libbacktrace

Boost (1.83) with libc++ + libbacktrace

  • Fetch Boost source (boost_1_83_0.tar.bz2 or git clone --branch boost-1.83.0 …).
  • cd boost_1_83_0
  • ./bootstrap.sh --prefix=$HOME/boost-libcxx --with-libraries=context,fiber,stacktrace,filesystem,json,container,atomic,thread
  • ./b2 -j$(nproc) toolset=clang cxxstd=23 link=static runtime-link=static variant=release threading=multi address-model=64 install
    cxxflags="-stdlib=libc++ -fPIC -O2 -g -DBOOST_STACKTRACE_USE_BACKTRACE -I$HOME/libbacktrace-libcxx/include"
    linkflags="-stdlib=libc++ -L$HOME/libbacktrace-libcxx/lib -lbacktrace"
  • Resulting CMake configs land in $HOME/boost-libcxx/lib/cmake/*.

libFuzzer runtime (compiler-rt only)

  • Unpack LLVM 19.1.7 sources: tar xf llvm-project-19.1.7.src.tar.xz.
  • cmake -S llvm-project-19.1.7.src/compiler-rt -B $HOME/build-libfuzzer -G Ninja
    -DCMAKE_INSTALL_PREFIX=$HOME/libfuzzer-libcxx -DCMAKE_BUILD_TYPE=Release
    -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19
    -DCMAKE_C_FLAGS="-stdlib=libc++ -O2 -fPIC" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -fPIC"
    -DCOMPILER_RT_BUILD_LIBFUZZER=ON -DCOMPILER_RT_BUILD_SANITIZERS=OFF -DCOMPILER_RT_BUILD_PROFILE=OFF
    -DCOMPILER_RT_BUILD_BUILTINS=OFF -DCOMPILER_RT_BUILD_MEMPROF=OFF -DCOMPILER_RT_BUILD_GWP_ASAN=OFF
  • cmake --build $HOME/build-libfuzzer --target install
  • The runtime you need is $HOME/libfuzzer-libcxx/lib/linux/libclang_rt.fuzzer-x86_64.a.

Project configure/build

  • From repo root:

    export CC=clang-19
    export CXX=clang++-19
    export CMAKE_BUILD_TYPE=RelWithDebInfo
    export CMAKE_PREFIX_PATH=$HOME/boost-libcxx
    export LIBBACKTRACE_ROOT=$HOME/libbacktrace-libcxx
    export LIBFUZZER_RUNTIME_PATH=$HOME/libfuzzer-libcxx/lib/linux/libclang_rt.fuzzer-x86_64.a
    export CFLAGS="-march=haswell -stdlib=libc++"
    export CXXFLAGS="-march=haswell -stdlib=libc++"
    ./scripts/configure.sh
    ./scripts/build.sh
    (The configure script forwards the environment-set flags and installs -include category/core/char_traits.hpp automatically.)

Testing

  • Full suite: ./scripts/tests.sh

aa755 added 3 commits October 17, 2025 18:01
…recompile boost locally.

1. Environment setup

     export MONAD_ROOT=/home/abhishek/monad-latest/monad
     export BOOST_PREFIX=$HOME/boost-libcxx
     export LIBBACKTRACE_ROOT=$HOME/libbacktrace-libcxx
  2. Build libbacktrace (static, libc++)

     cd $HOME
     git clone https://github.com/ianlancetaylor/libbacktrace.git
     cd libbacktrace
     ./configure CC=clang-19 CFLAGS='-O2 -fPIC' --prefix=$LIBBACKTRACE_ROOT
     make -j$(nproc)
     make install
  3. Build Boost 1.83.0 against libc++

     cd $HOME
     curl -LO https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.bz2
     tar xf boost_1_83_0.tar.bz2
     cd boost_1_83_0
     ./bootstrap.sh --with-toolset=clang --prefix=$BOOST_PREFIX

     ./b2 toolset=clang-19 \
          cxxflags="-stdlib=libc++ -march=haswell -fPIC -I$LIBBACKTRACE_ROOT/include" \
          linkflags="-stdlib=libc++ -L$LIBBACKTRACE_ROOT/lib" \
          --with-context --with-fiber --with-stacktrace \
          --with-filesystem --with-json --with-container --with-atomic --with-thread \
          -sLIBBACKTRACE_PATH=$LIBBACKTRACE_ROOT \
          install -j$(nproc)
  4. Reconfigure the project for libc++

     cd $MONAD_ROOT
     python3 - <<'PY'

  import shutil, os
  shutil.rmtree('build', ignore_errors=True)
  os.mkdir('build')
  PY

  cmake -S . -B build -G Ninja \
  -DCMAKE_C_COMPILER=/usr/bin/clang-19 \
  -DCMAKE_CXX_COMPILER=/usr/bin/clang++-19 \
  -DCMAKE_C_FLAGS='-march=haswell' \
  -DCMAKE_CXX_FLAGS='-march=haswell -stdlib=libc++' \
  -DCMAKE_PREFIX_PATH=$BOOST_PREFIX \
  -DLIBBACKTRACE_ROOT=$LIBBACKTRACE_ROOT \
  -Dboost_context_DIR=$BOOST_PREFIX/lib/cmake/boost_context-1.83.0 \
  -Dboost_fiber_DIR=$BOOST_PREFIX/lib/cmake/boost_fiber-1.83.0 \
  -Dboost_stacktrace_backtrace_DIR=$BOOST_PREFIX/lib/cmake/boost_stacktrace_backtrace-1.83.0 \
  -Dboost_stacktrace_addr2line_DIR=$BOOST_PREFIX/lib/cmake/boost_stacktrace_addr2line-1.83.0 \
  -Dboost_stacktrace_basic_DIR=$BOOST_PREFIX/lib/cmake/boost_stacktrace_basic-1.83.0 \
  -Dboost_filesystem_DIR=$BOOST_PREFIX/lib/cmake/boost_filesystem-1.83.0 \
  -Dboost_json_DIR=$BOOST_PREFIX/lib/cmake/boost_json-1.83.0 \
  -Dboost_container_DIR=$BOOST_PREFIX/lib/cmake/boost_container-1.83.0 \
  -Dboost_atomic_DIR=$BOOST_PREFIX/lib/cmake/boost_atomic-1.83.0 \
  -Dboost_thread_DIR=$BOOST_PREFIX/lib/cmake/boost_thread-1.83.0 \
  -DBoost_USE_STATIC_LIBS=ON \
  -DBoost_USE_STATIC_RUNTIME=OFF

  5. **Build**
  ```bash
  ./scripts/build.sh   # (or plain `ninja -C build`)

  That reproduces exactly the libc++ toolchain we just set up (Boost + libbacktrace in $HOME, Clang 19, -stdlib=libc++).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants