# Maintainer: Felix Xing (Felixaszx) <felixaszx@outlook.com>

_realname=dxvk
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=3.0.2
pkgrel=1
pkgdesc="Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine and Windows (mingw-w64)"
arch=('any')
mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64')
url="https://github.com/doitsujin/dxvk"
msys2_repository_url='https://github.com/doitsujin/dxvk'
license=('spdx:Zlib')
depends=()
makedepends=(git
             "${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-meson"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-glslang"
             "${MINGW_PACKAGE_PREFIX}-spirv-headers"
             "${MINGW_PACKAGE_PREFIX}-vulkan-headers"
)
optdepends=("${MINGW_PACKAGE_PREFIX}-vulkan-loader: use MSYS2 Vulkan loader when possible")

_libdisplay_info_name=libdisplay-info
_libdisplay_info_commit=275e6459c7ab1ddd4b125f28d0440716e4888078
_dxbc_spirv_name=dxbc-spirv
_dxbc_spirv_commit=c5c1a5b9b61773d59592f628faa39be9add26282
source=("https://github.com/doitsujin/dxvk/archive/refs/tags/v$pkgver.tar.gz"
        "${_libdisplay_info_name}"::"git+https://github.com/doitsujin/${_libdisplay_info_name}.git#commit=${_libdisplay_info_commit}"
        "${_dxbc_spirv_name}"::"git+https://github.com/doitsujin/${_dxbc_spirv_name}.git#commit=${_dxbc_spirv_commit}"
        "001-use-msys2-spirv-headers.patch"
)
sha256sums=('03ad9dc888238f325af0ca5a74e2f6d2ade4492ad14017152758c614e2073e22'
            'e341e1f897220f586c95e1843059031633d780ea08800eea023ce3282730dfe7'
            '588ffaa85c3370281ce1f0a59ddf22bca90e51fc03f9728a8591d65fb6915abd'
            'a1a4f0b21c15b578c3a6f44139e6af90da0127da1fd0b05b51d9051be31f88a8')

apply_patch_with_msg() {
  for _patch in "$@"
  do
    msg2 "Applying ${_patch}"
    patch -Nbp1 --binary -i "${srcdir}/${_patch}"
  done
}

prepare() {
  mv ${_libdisplay_info_name} "${_realname}-${pkgver}"/subprojects
  mv ${_dxbc_spirv_name} "${_realname}-${pkgver}"/subprojects

  cd ${_realname}-${pkgver}

  apply_patch_with_msg \
    001-use-msys2-spirv-headers.patch
}

build() {
  local -a _meson_options=(
  --prefix=${MINGW_PREFIX}
  --buildtype=release
  --backend=ninja
  -Dbuild_id=true
  )

  MSYS2_ARG_CONV_EXCL="--prefix=" \
  PROCESSOR_ARCHITECTURE="${CARCH}" \
  ${MINGW_PREFIX}/bin/meson setup \
  -Dc_args="${CFLAGS}" \
  -Dcpp_args="${CXXFLAGS}" \
  "${_meson_options[@]}" \
  "build-${MSYSTEM}" \
  "${_realname}-${pkgver}"

  ${MINGW_PREFIX}/bin/meson compile -C "build-${MSYSTEM}"
}

package() {
  ${MINGW_PREFIX}/bin/meson install --skip-subprojects --destdir "${pkgdir}" \
  -C "build-${MSYSTEM}"

  install -d "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}
  install -d "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_libdisplay_info_name}

  cp -r "${srcdir}"/${_realname}-${pkgver}/LICENSE "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_realname}
  cp -r "${srcdir}"/${_realname}-${pkgver}/subprojects/${_libdisplay_info_name}/LICENSE \
  "${pkgdir}"${MINGW_PREFIX}/share/licenses/${_libdisplay_info_name}
}
