# Maintainer: Alexey Pavlov <alexpux@gmail.com>

_realname=intel-tbb
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=2020.3
pkgrel=2
epoch=1
pkgdesc='High level abstract threading library (mingw-w64)'
depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs")
makedepends=("${MINGW_PACKAGE_PREFIX}-cc"
             "${MINGW_PACKAGE_PREFIX}-cmake"
             "${MINGW_PACKAGE_PREFIX}-make"
             $([[ ${MINGW_PACKAGE_PREFIX} != *-clang-* ]] || echo "${MINGW_PACKAGE_PREFIX}-gcc-compat"))
options=('!strip' 'staticlibs')
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
url='https://www.threadingbuildingblocks.org/'
license=('Apache')
source=(${_realname}-${pkgver}.tar.gz::https://github.com/intel/tbb/archive/v${pkgver}.tar.gz
        "tbb-cmake-config.patch"
        "tbb-dont-set-crt-version-for-ucrt.patch"
        "tbb-clang.patch"
        "tbb-aarch64.patch")
sha256sums=('ebc4f6aa47972daed1f7bf71d100ae5bf6931c2e3144cf299c8cc7d041dca2f3'
            'f5aa6bb43a69a46a0cec4d2b3e84e7e6e102b3becd1b58d496e8ee035829dc85'
            'a24719087f206fccccb032e26e3c684d2281da6bfe24e7cd69681493c800ad3a'
            '329c17c66fa11422b4402017943a8ca83c208c003fc5a769904b4149152300ab'
            '56af237a19a1f7fad5a99769928cdaadccc8cb0285fbdf2b26a972454178b64e')

prepare () {
  cd ${srcdir}/oneTBB-${pkgver}
  patch -p1 -i ${srcdir}/tbb-cmake-config.patch
  patch -p1 -i ${srcdir}/tbb-dont-set-crt-version-for-ucrt.patch

  if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
    patch -p1 -i ${srcdir}/tbb-clang.patch
  fi

  patch -p1 -i ${srcdir}/tbb-aarch64.patch
}

build() {
  cd ${srcdir}/oneTBB-${pkgver}

  sed -i "s|OUTPUT_KEY = -o #|OUTPUT_KEY = -Wl,--out-implib,lib\$(BUILDING_LIBRARY).a -o #|g" build/windows.gcc.inc
  echo "CPLUS_FLAGS += -mrtm" >> build/windows.gcc.inc # makes test cases pass

  if test "${MINGW_CHOST}" = "x86_64-w64-mingw32"
  then
    parch=intel64
  elif test "${MINGW_CHOST}" = "aarch64-w64-mingw32"
  then
    parch=arm64
  else
    parch=ia32
  fi
  unset LDFLAGS
  mingw32-make arch=${parch} tbb_os=windows runtime=mingw compiler=gcc stdver=c++11
  
  mkdir build-cmake && cd build-cmake
  MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
  ${MINGW_PREFIX}/bin/cmake.exe \
    -G"MSYS Makefiles" \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
    -DINSTALL_DIR=${srcdir}/oneTBB-${pkgver}/build-cmake \
    -DSYSTEM_NAME=Windows \
    -DTBB_VERSION_FILE=${srcdir}/oneTBB-${pkgver}/include/tbb/tbb_stddef.h \
    -DINC_REL_PATH=../../../include \
    -DLIB_REL_PATH=../../../lib \
    -DBIN_REL_PATH=../../../bin \
    -P ${srcdir}/oneTBB-${pkgver}/cmake/tbb_config_installer.cmake
}

package() {
  cd ${srcdir}/oneTBB-${pkgver}

  if test "${MINGW_CHOST}" = "x86_64-w64-mingw32"
  then
    parch=intel64
  elif test "${MINGW_CHOST}" = "aarch64-w64-mingw32"
  then
    parch=arm64
  else
    parch=ia32
  fi

  install -d "${pkgdir}${MINGW_PREFIX}"/include
  cp -a include/tbb "${pkgdir}${MINGW_PREFIX}"/include
  install -d "${pkgdir}${MINGW_PREFIX}"/bin
  #install -m755 build/windows_${parch}_gcc_mingw_debug/*.dll "${pkgdir}${MINGW_PREFIX}"/bin
  install -m755 build/windows_${parch}_gcc_mingw_release/*.dll "${pkgdir}${MINGW_PREFIX}"/bin
  install -d "${pkgdir}${MINGW_PREFIX}"/lib
  #install -m755 build/windows_${parch}_gcc_mingw_debug/*.a "${pkgdir}${MINGW_PREFIX}"/lib
  install -m755 build/windows_${parch}_gcc_mingw_release/*.a "${pkgdir}${MINGW_PREFIX}"/lib
  
  # Install cmake files
  install -d "${pkgdir}${MINGW_PREFIX}"/lib/cmake/tbb
  install -m644 build-cmake/TBBConfig.cmake "${pkgdir}${MINGW_PREFIX}"/lib/cmake/tbb/
  install -m644 build-cmake/TBBConfigVersion.cmake "${pkgdir}${MINGW_PREFIX}"/lib/cmake/tbb/
}
