# Maintainer: Mateusz Mikula <mati865@gmail.com>

_realname=crt
_mingw_suff=mingw-w64-cross-clang
pkgname=("${_mingw_suff}-${_realname}")
conflicts=("${_mingw_suff%-*}-${_realname}")
pkgver=12.0.0.r731.g2ca6f1348
pkgrel=1
pkgdesc='MinGW-w64 CRT for cross-compiler'
arch=('i686' 'x86_64')
url='https://mingw-w64.sourceforge.io/'
msys2_repository_url="https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-headers/"
license=('spdx:ZPL-2.1 AND LGPL-2.1-or-later')
groups=("${_mingw_suff}-toolchain")
depends=("${_mingw_suff}-headers")
makedepends=("git" "clang" "lld" 'autotools')
options=('!strip' 'staticlibs' '!emptydirs' '!buildflags')
_commit='2ca6f1348cab58b5b994fd5916ff57445ade22f8'
source=("mingw-w64"::"git+https://git.code.sf.net/p/mingw-w64/mingw-w64#commit=$_commit")
sha256sums=('7151f7b1d04445fa4ec40a3edabdafa4b12867aaf64f3ad8329e9fcc3e05b7c3')
msys2_references=(
  'archlinux: mingw-w64-crt'
  'cpe: cpe:/a:mingw-w64:mingw-w64'
)

_targets="x86_64-w64-mingw32 i686-w64-mingw32 armv7-w64-mingw32 aarch64-w64-mingw32"

pkgver() {
  cd "${srcdir}/mingw-w64"
  git describe --long ${_commit} | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//g'
}

prepare() {
  cd "${srcdir}/mingw-w64"
}

build() {
  for _target in ${_targets}; do
    msg "Building ${_target} CRT"
  case "${_target}" in
    i686*)
      _crt_configure_args="--disable-lib64 --enable-lib32"
    ;;
    x86_64*)
      _crt_configure_args="--disable-lib32 --enable-lib64"
    ;;
    armv7*)
      _crt_configure_args="--disable-lib32 --disable-lib64 --enable-libarm32"
    ;;
    aarch64*)
      _crt_configure_args="--disable-lib32 --disable-lib64 --disable-libarm32 --enable-libarm64"
    ;;
  esac
    mkdir -p ${srcdir}/crt-${_target} && cd ${srcdir}/crt-${_target}

    export CC="clang" CXX="clang++" AS="clang" AR="llvm-ar" RANLIB="llvm-ranlib" DLLTOOL="llvm-dlltool" LD="clang" CPP="clang -E -target ${_target} --sysroot=/opt/${_target}"
    local OLDCFLAGS OLDCPPFLAGS OLDCXXFLAGS OLDLDFLAGS
    OLDCFLAGS="$CFLAGS"
    OLDCPPFLAGS="$CPPFLAGS"
    OLDCXXFLAGS="$CXXFLAGS"
    OLDLDFLAGS="$LDFLAGS"
    CFLAGS+=" -target ${_target} --sysroot=/opt/${_target}"
    CPPFLAGS+=" -target ${_target} --sysroot=/opt/${_target}"
    CXXFLAGS+=" -target ${_target} --sysroot=/opt/${_target}"
    LDFLAGS+=" -target ${_target} --sysroot=/opt/${_target} -fuse-ld=lld"

    ${srcdir}/mingw-w64/mingw-w64-crt/configure \
    --build=${CHOST} \
    --prefix=/opt/${_target} \
    --host=${_target} \
    --enable-wildcard \
    --with-default-msvcrt=ucrt \
    --disable-dependency-tracking \
    ${_crt_configure_args}

    make

    CFLAGS="$OLDCFLAGS"
    CPPFLAGS="$OLDCPPFLAGS"
    CXXFLAGS="$OLDCXXFLAGS"
    LDFLAGS="$OLDLDFLAGS"
  done
}

package() {
  for _target in ${_targets}; do
    msg "Installing ${_target} crt"
    cd ${srcdir}/crt-${_target}
    make DESTDIR=${pkgdir} install
  done
}
