void-packages/srcpkgs/wasi-sdk/template
2025-02-05 02:20:22 +01:00

157 lines
5.6 KiB
Bash

# Template file for 'wasi-sdk'
pkgname=wasi-sdk
version=25
revision=1
_llvmversion="19.1.7"
_llvmver="${_llvmversion%%.*}"
_wasi_sdk_ver=25
build_wrksrc="llvm-project-${_llvmversion}.src"
build_style=cmake
hostmakedepends="python3 clang${_llvmver} llvm${_llvmver} chroot-git ninja"
makedepends="wasi-libc"
depends="wasi-libc wasi-libcxx wasi-compiler-rt"
short_desc="WASI-enabled WebAssembly C/C++ toolchain"
maintainer="Duncaen <duncaen@voidlinux.org>"
license="custom:Apache-2.0-with-llvm-exception"
homepage="https://github.com/WebAssembly/wasi-sdk"
distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${_llvmversion}/llvm-project-${_llvmversion}.src.tar.xz
https://github.com/WebAssembly/wasi-sdk/archive/refs/tags/wasi-sdk-${version}.tar.gz"
checksum="82401fea7b79d0078043f7598b835284d6650a75b93e64b6f761ea7b63097501
4ab1ad1b5fc60d3c9c36905fea8ed899f5fdc5bd0bd77849c112e0b5a1788916"
nostrip=yes
export CMAKE_GENERATOR=Ninja
post_extract() {
cp "wasi-sdk-wasi-sdk-${version}/wasi-sdk.cmake" "llvm-project-${_llvmversion}.src"/wasi-sdk.cmake
cp -r "wasi-sdk-wasi-sdk-${version}/cmake/Platform" "llvm-project-${_llvmversion}.src"/cmake
}
_configure_libcxx() {
local target="$1"
local destdir="$2"
local want_threads="OFF"
local extra_cflags=""
case "$target" in
*-threads)
want_threads="ON"
extra_cflags="-pthread"
;;
esac
cmake -B "$destdir" -G Ninja -S runtimes -Wno-dev \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_MODULE_PATH="${wrksrc}/${build_wrksrc}/cmake" \
-DCMAKE_TOOLCHAIN_FILE="${wrksrc}/${build_wrksrc}/wasi-sdk.cmake" \
-DCMAKE_C_COMPILER_WORKS=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \
-DCMAKE_C_FLAGS="$CFLAGS $extra_cflags --target=$target" \
-DCMAKE_CXX_FLAGS="$CXXFLAGS $extra_cflags --target=$target" \
-DCMAKE_ASM_COMPILER_TARGET="$target" \
-DCMAKE_CXX_COMPILER_TARGET="$target" \
-DCMAKE_C_COMPILER_TARGET="$target" \
-DLLVM_DEFAULT_TARGET_TRIPLE="$target" \
-DCMAKE_STAGING_PREFIX="${XBPS_CROSS_BASE}/usr/share/wasi-sysroot" \
-DCXX_SUPPORTS_CXX11=ON \
-DLIBCXX_ABI_VERSION=2 \
-DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY=OFF \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=libcxxabi/include \
-DLIBCXX_ENABLE_EXCEPTIONS=OFF \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
-DLIBCXX_ENABLE_FILESYSTEM=OFF \
-DLIBCXX_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_THREADS=$want_threads \
-DLIBCXX_HAS_EXTERNAL_THREAD_API=OFF \
-DLIBCXX_HAS_MUSL_LIBC=ON \
-DLIBCXX_HAS_PTHREAD_API=$want_threads \
-DLIBCXX_HAS_WIN32_THREAD_API=OFF \
-DLIBCXX_INCLUDE_TESTS="$([ "$CHECK_PKGS" ] && echo ON || echo OFF)" \
-DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY=OFF \
-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF \
-DLIBCXXABI_ENABLE_PIC=OFF \
-DLIBCXXABI_ENABLE_SHARED=OFF \
-DLIBCXXABI_ENABLE_THREADS=$want_threads \
-DLIBCXXABI_HAS_EXTERNAL_THREAD_API=OFF \
-DLIBCXXABI_HAS_PTHREAD_API=$want_threads \
-DLIBCXXABI_HAS_WIN32_THREAD_API=OFF \
-DLIBCXXABI_INCLUDE_TESTS="$([ "$CHECK_PKGS" ] && echo ON || echo OFF)" \
-DLIBCXXABI_LIBCXX_INCLUDES="${wrksrc}/${build_wrksrc}/build-libcxx/include/c++/v1" \
-DLIBCXXABI_LIBCXX_PATH=libcxx \
-DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
-DUNIX=ON \
-DWASI_SDK_PREFIX=/usr \
-DLIBCXX_INSTALL_INCLUDE_DIR=include/$target/c++/v1 \
-DLIBCXX_INSTALL_INCLUDE_TARGET_DIR=include/$target/c++/v1 \
-DLIBCXXABI_INSTALL_INCLUDE_DIR=include/$target/c++/v1
}
do_configure() {
export CFLAGS="-O2 -fno-exceptions --sysroot=${XBPS_CROSS_BASE}/usr/share/wasi-sysroot"
export CXXFLAGS="-O2 -fno-exceptions --sysroot=${XBPS_CROSS_BASE}/usr/share/wasi-sysroot"
_configure_libcxx wasm32-wasi build
_configure_libcxx wasm32-wasi-threads build-threads
cmake -B build-compiler-rt -G Ninja -S compiler-rt -Wno-dev \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_MODULE_PATH="${wrksrc}/${build_wrksrc}/cmake" \
-DCMAKE_TOOLCHAIN_FILE="${wrksrc}/${build_wrksrc}/wasi-sdk.cmake" \
-DCMAKE_C_COMPILER_WORKS=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \
-DCOMPILER_RT_BAREMETAL_BUILD=ON \
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
-DCOMPILER_RT_HAS_FPIC_FLAG=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
-DCOMPILER_RT_OS_DIR=wasi \
-DWASI_SDK_PREFIX=/usr \
-DCMAKE_INSTALL_PREFIX="/usr/lib/llvm/${_llvmver}/lib/clang/${_llvmver}/"
}
do_build() {
cmake --build build ${makejobs}
cmake --build build-threads ${makejobs}
cmake --build build-compiler-rt ${makejobs}
}
do_install() {
DESTDIR="$DESTDIR" cmake --install build-compiler-rt
rm -r "$DESTDIR/usr/lib/llvm/${_llvmver}/lib/clang/${_llvmver}/include"
DESTDIR="$DESTDIR" cmake --install build
mv -v "${DESTDIR}"/usr/share/wasi-sysroot/lib/wasm32-{unknown-,}wasi
DESTDIR="$DESTDIR" cmake --install build-threads
mv -v "${DESTDIR}"/usr/share/wasi-sysroot/lib/wasm32-{unknown-,}wasi-threads
mkdir -p "${DESTDIR}/etc/clang${_llvmver}"
cat <<-EOF >"${DESTDIR}/etc/clang${_llvmver}/wasm32-unknown-wasi.cfg"
--sysroot /usr/share/wasi-sysroot
EOF
ln -svf wasm32-unknown-wasi.cfg "${DESTDIR}/etc/clang$_llvmver/wasm32-unknown-wasi-threads.cfg"
vlicense "../wasi-sdk-wasi-sdk-${version}/LICENSE"
}
wasi-libcxx_package() {
short_desc+=" - C++ standard library"
nostrip=yes
make_dirs="/usr/share/wasi-sysroot/include/c++/v1 0755 root root"
pkg_install() {
vmove usr/share/wasi-sysroot/include
vmove usr/share/wasi-sysroot/share
vmove usr/share/wasi-sysroot/lib/wasm32-wasi
vmove usr/share/wasi-sysroot/lib/wasm32-wasi-threads
}
}
wasi-compiler-rt_package() {
short_desc+=" - runtime libraries"
nostrip=yes
pkg_install() {
vmove "usr/lib/llvm/${_llvmver}/lib/clang/${_llvmver}/lib/wasi/libclang_rt.builtins-wasm32.a"
}
}