diff --git a/.github/workflows/build_cxx_sysroot.yml b/.github/workflows/build_cxx_sysroot.yml index b8f0074cd..9f309c999 100644 --- a/.github/workflows/build_cxx_sysroot.yml +++ b/.github/workflows/build_cxx_sysroot.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@v3 with: submodules: true - + - name: Build run: | git config --global --add safe.directory $(pwd) @@ -35,79 +35,6 @@ jobs: cp -r sysroot /opt/wasix-sysroot cp .github/workflows/files/clang-wasix.cmake_toolchain /opt/wasix-sysroot/clang-wasix.cmake_toolchain - - name: Determine LLVM revision - run: | - export LLVM_TAG=$(echo "llvmorg-$(llvm-ar --version | grep -i "LLVM version" | sed -r 's/.*version ([0-9\.]+).*/\1/')") - echo "LLVM tag: $LLVM_TAG" - echo "LLVM_REV=$(git ls-remote --tags https://github.com/llvm/llvm-project.git $LLVM_TAG | sed -r 's/([^ \t]*).*/\1/')" | tee -a $GITHUB_ENV - echo "LLVM_TAG=$LLVM_TAG" | tee -a $GITHUB_ENV - - - name: Cache LLVM - uses: actions/cache@v3 - if: ${{ !env.ACT }} - with: - path: llvm-project - key: llvm-${{ env.LLVM_REV }} - - - name: Checkout LLVM - run: | - if [ ! -d "llvm-project" ]; then git clone https://github.com/llvm/llvm-project.git; fi - cd llvm-project - git fetch origin refs/tags/${{ env.LLVM_TAG }} - if [ "$(git rev-parse ${{ env.LLVM_TAG }})" != "$(git rev-parse HEAD)" ]; then echo "Checkout ($(git rev-parse ${{ env.LLVM_TAG }}) != $(git rev-parse HEAD))" && git reset --hard ${{ env.LLVM_TAG }} && echo "checked out $(git rev-parse HEAD)"; fi - - - name: Build and install compiler_rt builtins - run: | - mkdir -p build-compiler-rt-builtins - cd build-compiler-rt-builtins - cmake --fresh -DCOMPILER_RT_BAREMETAL_BUILD=On -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCOMPILER_RT_OS_DIR=wasm32-wasi -DCOMPILER_RT_DEFAULT_TARGET_ONLY:BOOL=ON -DCMAKE_TOOLCHAIN_FILE=/opt/wasix-sysroot/clang-wasix.cmake_toolchain -DCMAKE_SYSROOT=/opt/wasix-sysroot -DCMAKE_INSTALL_PREFIX=/opt/wasix-sysroot ../llvm-project/compiler-rt/lib/builtins - cmake --build . --target install --parallel 4 - export CLANG_MAJOR_VERSION=$(clang --version | grep -i "clang version" | sed -r 's/.*version ([0-9]+).*/\1/') - mkdir -p /usr/lib/clang/$CLANG_MAJOR_VERSION/lib/wasi - cp /opt/wasix-sysroot/lib/wasm32-wasi/libclang_rt.builtins-wasm32.a /usr/lib/clang/$CLANG_MAJOR_VERSION/lib/wasi/libclang_rt.builtins-wasm32.a - - - name: Build and install LLVM libc++ - run: > - mkdir -p build-libcxx && - cd build-libcxx && - cmake - --fresh - -DCMAKE_TOOLCHAIN_FILE=/opt/wasix-sysroot/clang-wasix.cmake_toolchain - -DCMAKE_SYSROOT=/opt/wasix-sysroot - -DCMAKE_INSTALL_PREFIX=/opt/wasix-sysroot - -DCXX_SUPPORTS_CXX23=ON - -DLIBCXX_ENABLE_THREADS:BOOL=ON - -DLIBCXX_HAS_PTHREAD_API:BOOL=ON - -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF - -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF - -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF - -DCMAKE_BUILD_TYPE=RelWithDebugInfo - -DLIBCXX_ENABLE_SHARED:BOOL=OFF - -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF - -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF - -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF - -DLIBCXX_CXX_ABI=libcxxabi - -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON - -DLIBCXX_ABI_VERSION=2 - -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF - -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF - -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON - -DLIBCXXABI_ENABLE_THREADS:BOOL=ON - -DLIBCXXABI_HAS_PTHREAD_API:BOOL=ON - -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF - -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF - -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF - -DLIBCXXABI_ENABLE_PIC:BOOL=OFF - -DCMAKE_C_COMPILER_WORKS=ON - -DCMAKE_CXX_COMPILER_WORKS=ON - -DLLVM_COMPILER_CHECKED=ON - -DUNIX:BOOL=ON - -DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi - -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi - -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" - ../llvm-project/runtimes - && cmake --build . --target install --parallel 4 - - name: Upload sysroot if: ${{ !env.ACT }} uses: actions/upload-artifact@v2 diff --git a/.gitmodules b/.gitmodules index c116f3c6d..5a3918136 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "tools/wasix-headers/WASI"] path = tools/wasix-headers/WASI url = https://github.com/wasix-org/wasix-witx.git +[submodule "tools/llvm-project"] + path = tools/llvm-project + url = https://github.com/llvm/llvm-project.git diff --git a/build32.sh b/build32.sh index c83af6214..421cbdb57 100755 --- a/build32.sh +++ b/build32.sh @@ -29,4 +29,46 @@ EOF make -j 14 rm -f sysroot/lib/wasm32-wasi/libc-printscan-long-double.a + +# Build C++ sysroot +mkdir -p build/libcxx +cd build/libcxx +cmake \ + -DCMAKE_TOOLCHAIN_FILE=$(pwd)/../../tools/clang-wasix.cmake_toolchain \ + -DCMAKE_SYSROOT=$(pwd)/../../sysroot \ + -DCMAKE_INSTALL_PREFIX=$(pwd)/../../sysroot \ + -DCXX_SUPPORTS_CXX23=ON \ + -DLIBCXX_ENABLE_THREADS:BOOL=ON \ + -DLIBCXX_HAS_PTHREAD_API:BOOL=ON \ + -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ + -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ + -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \ + -DCMAKE_BUILD_TYPE=RelWithDebugInfo \ + -DLIBCXX_ENABLE_SHARED:BOOL=OFF \ + -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \ + -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \ + -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \ + -DLIBCXX_ABI_VERSION=2 \ + -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \ + -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \ + -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \ + -DLIBCXXABI_ENABLE_THREADS:BOOL=ON \ + -DLIBCXXABI_HAS_PTHREAD_API:BOOL=ON \ + -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ + -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ + -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \ + -DLIBCXXABI_ENABLE_PIC:BOOL=OFF \ + -DCMAKE_C_COMPILER_WORKS=ON \ + -DCMAKE_CXX_COMPILER_WORKS=ON \ + -DLLVM_COMPILER_CHECKED=ON \ + -DUNIX:BOOL=ON \ + -DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \ + -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \ + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ + ../../tools/llvm-project/runtimes +cmake --build . --target install --parallel 14 +cd ../.. + rsync -Lrtv --delete ./sysroot/ ./sysroot32/ diff --git a/.github/workflows/files/clang-wasix.cmake_toolchain b/tools/clang-wasix.cmake_toolchain similarity index 100% rename from .github/workflows/files/clang-wasix.cmake_toolchain rename to tools/clang-wasix.cmake_toolchain