Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always build CXX #40

Merged
merged 2 commits into from
Jun 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 49 additions & 74 deletions .github/workflows/build_cxx_sysroot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,101 +20,76 @@ 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 }}
uses: actions/upload-artifact@v2
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
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -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
42 changes: 42 additions & 0 deletions build32.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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/
1 change: 1 addition & 0 deletions tools/llvm-project
Submodule llvm-project added at 4ba6a9
Loading