diff --git a/.github/workflows/build_cxx_sysroot.yml b/.github/workflows/build_cxx_sysroot.yml index b8f0074cd..7c63865fd 100644 --- a/.github/workflows/build_cxx_sysroot.yml +++ b/.github/workflows/build_cxx_sysroot.yml @@ -20,93 +20,72 @@ jobs: - name: Update and install dependencies run: | pacman -Syu --noconfirm - pacman -Sy --noconfirm coreutils nodejs npm wget git cmake ninja llvm clang rsync make lld wasmer cargo + pacman -Sy --noconfirm coreutils nodejs npm wget git cmake ninja llvm14 clang14 rsync make lld wasmer cargo python3 + ln -s /usr/lib/llvm14/bin/clang-14 /usr/bin/clang + ln -s /usr/lib/llvm14/bin/clang++ /usr/bin/clang++ + ln -s /usr/bin/llvm-ar-14 /usr/bin/llvm-ar + ln -s /usr/bin/llvm-nm-14 /usr/bin/llvm-nm + ln -s /usr/bin/llvm-ranlib-14 /usr/bin/llvm-ranlib + + - name: Log tool versions + run: | + echo git + git --version + echo "##########################" + echo wasmer + wasmer -V + echo "##########################" + echo clang + clang -v + echo "##########################" + echo llvm-ar + llvm-ar -V + echo "##########################" + echo llvm-nm + llvm-nm -V + echo "##########################" + echo nodejs + node -v + echo "##########################" + echo npm + npm -v - name: Checkout uses: actions/checkout@v3 with: - submodules: true - + submodules: recursive + - name: Build run: | git config --global --add safe.directory $(pwd) ./build32.sh rm -rf /opt/wasix-sysroot cp -r sysroot /opt/wasix-sysroot - cp .github/workflows/files/clang-wasix.cmake_toolchain /opt/wasix-sysroot/clang-wasix.cmake_toolchain + cp tools/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 --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 \ + ../tools/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 + llvm-ranlib /opt/wasix-sysroot/lib/wasm32-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: Run WASIX tests + run: | + export CLANG_VERSION=$(clang --version | grep -i "clang version" | sed -n 's/.*version \([0-9.]*\).*/\1/p') + echo Detected clang version $CLANG_VERSION + mkdir -p /usr/lib/llvm14/lib/clang/$CLANG_VERSION/lib/wasi + cp /opt/wasix-sysroot/lib/wasm32-wasi/libclang_rt.builtins-wasm32.a /usr/lib/llvm14/lib/clang/$CLANG_VERSION/lib/wasi/libclang_rt.builtins-wasm32.a + TOOLCHAIN=/opt/wasix-sysroot/clang-wasix.cmake_toolchain ./test/wasix/run_tests.sh - name: Upload sysroot if: ${{ !env.ACT }} @@ -114,7 +93,3 @@ jobs: with: name: wasix-sysroot path: /opt/wasix-sysroot - - - name: Run WASIX tests - run: | - TOOLCHAIN=/opt/wasix-sysroot/clang-wasix.cmake_toolchain ./test/wasix/run_tests.sh 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 diff --git a/tools/llvm-project b/tools/llvm-project new file mode 160000 index 000000000..4ba6a9c9f --- /dev/null +++ b/tools/llvm-project @@ -0,0 +1 @@ +Subproject commit 4ba6a9c9f65bbc8bd06e3652cb20fd4dfc846137