# Maintainer: Frederik Schwan <freswa at archlinux dot org>
# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>

pkgname=wasi-compiler-rt
pkgver=22.1.0
pkgrel=2
pkgdesc="Compiler runtime libraries for clang (WASI)"
arch=('any')
url="https://compiler-rt.llvm.org/"
license=('Apache-2.0 WITH LLVM-exception')
depends=('wasi-libc')
makedepends=('llvm' 'cmake' 'ninja' 'python' 'clang' 'lld')
options=('!buildflags' 'staticlibs')
_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver
source=($_source_base/llvm-project-$pkgver.src.tar.xz{,.sig})
sha256sums=('25d2e2adc4356d758405dd885fcfd6447bce82a90eb78b6b87ce0934bd077173'
            'SKIP')

validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A'  # Tom Stellard <tstellar@redhat.com>
              'D574BD5D1D0E98895E3BF90044F2485E45D59042'  # Tobias Hieta <tobias@hieta.se>
              'FFB3368980F3E6BB5737145A316C56D064CACBA5'  # Douglas Yung <douglas.yung@sony.com>
              '71046D1E9C6656BDD61171873E83BABF4A4F9E85'  # Cullen Rhodes <cullen.rhodes@arm.com>
)

prepare() {
  cd llvm-project-$pkgver.src/compiler-rt
  mkdir build
  mkdir build-threads

  # Platform files have been copied from
  # https://github.com/WebAssembly/wasi-sdk/tree/main/cmake/Platform
  cd ../cmake
  mkdir Platform
  echo 'set(WASI 1)' > Platform/WASI.cmake
}

build() {
  cd llvm-project-$pkgver.src/compiler-rt/build

  # Build options are derived from
  # https://github.com/WebAssembly/wasi-sdk/blob/main/cmake/wasi-sdk-sysroot.cmake
  local cmake_args=(
    -G Ninja
    -DCMAKE_AR=/usr/bin/llvm-ar
    -DCMAKE_ASM_COMPILER=/usr/bin/clang
    -DCMAKE_BUILD_TYPE=RelWithDebInfo
    -DCMAKE_CXX_COMPILER=/usr/bin/clang++
    -DCMAKE_CXX_COMPILER_WORKS=ON
    -DCMAKE_CXX_FLAGS=-fno-exceptions
    -DCMAKE_CXX_LINKER_DEPFILE_SUPPORTED=OFF
    -DCMAKE_C_COMPILER=/usr/bin/clang
    -DCMAKE_C_COMPILER_WORKS=ON
    -DCMAKE_C_FLAGS=-fno-exceptions
    -DCMAKE_C_LINKER_DEPFILE_SUPPORTED=OFF
    -DCMAKE_INSTALL_PREFIX=/usr
    -DCMAKE_RANLIB=/usr/bin/llvm-ranlib
    -DCMAKE_SYSROOT=/usr/share/wasi-sysroot
    -DCMAKE_SYSTEM_NAME=WASI
    -DCMAKE_SYSTEM_PROCESSOR=wasm32
    -DCMAKE_SYSTEM_VERSION=1
    -DCOMPILER_RT_BAREMETAL_BUILD=ON
    -DCOMPILER_RT_BUILD_CTX_PROFILE=OFF
    -DCOMPILER_RT_BUILD_GWP_ASAN=OFF
    -DCOMPILER_RT_BUILD_LIBFUZZER=OFF
    -DCOMPILER_RT_BUILD_MEMPROF=OFF
    -DCOMPILER_RT_BUILD_ORC=OFF
    -DCOMPILER_RT_BUILD_PROFILE=OFF
    -DCOMPILER_RT_BUILD_SANITIZERS=OFF
    -DCOMPILER_RT_BUILD_XRAY=OFF
    -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON
    -DCOMPILER_RT_HAS_FPIC_FLAG=OFF
    -DCOMPILER_RT_INCLUDE_TESTS=OFF
    -DCOMPILER_RT_INSTALL_PATH=/usr/lib/clang/${pkgver%%.*}
    -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
  )

  cmake .. "${cmake_args[@]}" \
    -DCMAKE_{ASM,CXX,C}_COMPILER_TARGET=wasm32-wasip1
  ninja

  cd ../build-threads
  cmake .. "${cmake_args[@]}" \
    -DCMAKE_{ASM,CXX,C}_COMPILER_TARGET=wasm32-wasip1-threads
  ninja
}

package() {
  cd llvm-project-$pkgver.src/compiler-rt/build

  DESTDIR="$pkgdir" ninja install

  cd ../build-threads
  DESTDIR="$pkgdir" ninja install

  cd "$pkgdir/usr/lib/clang/${pkgver%%.*}/lib"
  ln -s wasm32-unknown-{wasip1,wasi}
  ln -s wasm32-unknown-{wasip1,wasip2}

  install -Dm644 "$srcdir/llvm-project-$pkgver.src/compiler-rt/LICENSE.TXT" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}

# vim:set ts=2 sw=2 et:
