# Template file for 'cross-x86_64-w64-mingw32' _gcc_version=9.2.0 _binutils_version=2.32 _gmp_version=6.1.2 _mpfr_version=4.0.1 _mpc_version=1.1.0 _isl_version=0.19 _mingw_version=6.0.0 pkgname=cross-x86_64-w64-mingw32 version=$_mingw_version revision=3 archs="x86_64* i686*" create_wrksrc=yes hostmakedepends="flex perl python3" makedepends="zlib-devel" # it's ok to build with current's -devel packages # although it might break the package during compiler updates #makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel" depends="${pkgname}-crt-${version}_${revision}" short_desc="Cross toolchain for Win64 (GCC ${_gcc_version})" maintainer="Aleksey Tulinov " homepage="https://sourceforge.net/projects/mingw-w64/" license="GPL-2.0-or-later, GPL-3.0-or-later, ZPL-2.1" distfiles=" ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2 ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz ${GNU_SITE}/mpc/mpc-${_mpc_version}.tar.gz https://gmplib.org/download/gmp/gmp-${_gmp_version}.tar.xz http://www.mpfr.org/mpfr-${_mpfr_version}/mpfr-${_mpfr_version}.tar.xz http://isl.gforge.inria.fr/isl-${_isl_version}.tar.bz2 ${SOURCEFORGE_SITE}/project/mingw-w64/mingw-w64/mingw-w64-release/mingw-w64-v${_mingw_version}.tar.bz2" checksum="de38b15c902eb2725eac6af21183a5f34ea4634cb0bcef19612b50e5ed31072d ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e 87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912 67874a60826303ee2fb6affc6dc0ddd3e749e9bfcb4c8655e3953d0458a6e16e d59726f34f7852a081fbd3defd1ab2136f174110fc2e0c8d10bb122173fa9ed8 805e11101e26d7897fce7d49cbb140d7bac15f3e085a91e0001e80b2adaf48f0" nopie=yes nodebug=yes noverifyrdeps=yes noshlibprovides=yes lib32disabled=yes # disable build of 32bits packages nostrip_files="libgcc.a libgcc_eh.a libgcc_s.a libgcov.a libatomic.a libatomic.dll.a libquadmath.a libquadmath.dll.a libssp.a libssp.dll.a libssp_nonshared.a libstdc++.a libstdc++.dll.a libsupc++.a" # https://sourceforge.net/p/mingw-w64/wiki2/Cross%20Win32%20and%20Win64%20compiler/ # https://gcc.gnu.org/install/configure.html # http://mingw-w64.org/doku.php/configure _binutils_build() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-binutils-${_target}" msg_normal "Building binutils: ${_target}\n" mkdir -p ${_builddir} && cd ${_builddir} ../binutils-${_binutils_version}/configure \ --prefix="/usr" \ --with-sysroot=${_sysroot} \ --target=${_target} \ --disable-multilib \ --disable-shared \ --disable-nls \ --disable-werror \ --enable-lto \ --with-system-zlib make ${makejobs} && make install } _mingw_headers() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-mingw-headers-${_target}" msg_normal "Building MinGW headers: ${_target}\n" mkdir -p ${_builddir} && cd ${_builddir} ../mingw-w64-v${_mingw_version}/mingw-w64-headers/configure \ --prefix=${_sysroot} \ --host=${_target} \ --disable-werror \ --enable-secure-api \ --enable-sdk=all make ${makejobs} && make install # manually create required symlinks (cd ${_sysroot} && ln -sfT "." "mingw") (cd ${_sysroot} && ln -sf "lib" "lib64") } _gcc_bootstrap() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-gcc-${_target}" msg_normal "Building GCC bootsrap: ${_target}\n" # not needed when using current's -devel packages ln -sf ${wrksrc}/"gmp-${_gmp_version}" ${wrksrc}/"gcc-${_gcc_version}/gmp" ln -sf ${wrksrc}/"mpc-${_mpc_version}" ${wrksrc}/"gcc-${_gcc_version}/mpc" ln -sf ${wrksrc}/"mpfr-${_mpfr_version}" ${wrksrc}/"gcc-${_gcc_version}/mpfr" ln -sf ${wrksrc}/"isl-${_isl_version}" ${wrksrc}/"gcc-${_gcc_version}/isl" mkdir -p ${_builddir} && cd ${_builddir} ../gcc-${_gcc_version}/configure \ --prefix="/usr" \ --with-sysroot=${_sysroot} \ --target=${_target} \ --disable-werror \ --disable-nls \ --disable-multilib \ --disable-gcov \ --disable-libcc1 \ --enable-lto \ --enable-shared \ --enable-static \ --enable-threads=posix \ --with-system-zlib \ --enable-languages=c,c++,lto make ${makejobs} all-gcc && make install-gcc } _mingw_crt_build() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-mingw-crt-${_target}" msg_normal "Building MinGW CRT: ${_target}\n" if [ ${_target} == "i686-w64-mingw32" ]; then _crt_configure_args="--disable-lib64 --enable-lib32" elif [ ${_target} == "x86_64-w64-mingw32" ]; then _crt_configure_args="--disable-lib32 --enable-lib64" fi mkdir -p ${_builddir} && cd ${_builddir} CC="${_target}-gcc" \ CPP="${_target}-gcc -E" \ AR="${_target}-ar" \ RANLIB="${_target}-ranlib" \ AS="${_target}-as" \ STRIP="${_target}-strip" \ OBJDUMP="${_target}-objdump" \ WINDRES="${_target}-windres" \ ../mingw-w64-v${_mingw_version}/mingw-w64-crt/configure \ --prefix=${_sysroot} \ --host=${_target} \ ${_crt_configure_args} make ${makejobs} && make install } _mingw_winpthreads_build() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-mingw-winpthreads-${_target}" msg_normal "Building MinGW winpthreads: ${_target}\n" mkdir -p ${_builddir} && cd ${_builddir} CC="${_target}-gcc" \ CPP="${_target}-gcc -E" \ AR="${_target}-ar" \ RANLIB="${_target}-ranlib" \ AS="${_target}-as" \ STRIP="${_target}-strip" \ OBJDUMP="${_target}-objdump" \ WINDRES="${_target}-windres" \ ../mingw-w64-v${_mingw_version}/mingw-w64-libraries/winpthreads/configure \ --prefix=${_sysroot} \ --host=${_target} \ --enable-static \ --enable-shared make ${makejobs} && make install } _gcc_build() { _target=$1 _sysroot="/usr/${_target}" _builddir=${wrksrc}/"build-gcc-${_target}" msg_normal "Building GCC: ${_target}\n" cd ${_builddir} # should be already configured previously # no need for install since this is the last step make ${makejobs} } _build_cross() { # ensure we use sane environment unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM unset STRIP OBJDUMP WINDRES unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS _target=$1 (_binutils_build ${_target}) (_mingw_headers ${_target}) (_gcc_bootstrap ${_target}) (_mingw_crt_build ${_target}) (_mingw_winpthreads_build ${_target}) (_gcc_build ${_target}) } do_build() { (_build_cross "x86_64-w64-mingw32") (_build_cross "i686-w64-mingw32") } _install_toolchain() { _target=$1 (cd ${wrksrc}/"build-binutils-${_target}" && DESTDIR="$DESTDIR" make install) (cd ${wrksrc}/"build-gcc-${_target}" && DESTDIR="$DESTDIR" make install) # remove unnecessary stuff rm -rf ${DESTDIR}/usr/share/ rm -rf ${DESTDIR}/usr/lib/libcc1* } _install_crt() { _target=$1 (cd ${wrksrc}/"build-mingw-headers-${_target}" && DESTDIR="$DESTDIR" make install) (cd ${wrksrc}/"build-mingw-crt-${_target}" && DESTDIR="$DESTDIR" make install) (cd ${wrksrc}/"build-mingw-winpthreads-${_target}" && DESTDIR="$DESTDIR" make install) } do_install() { (_install_toolchain "x86_64-w64-mingw32") # i686 version will be installed in subpackage (below) } _clean_cross() { _target=$1 rm -rf /usr/${_target} rm -f /usr/bin/${_target}* rm -rf /usr/lib/gcc/${_target} rm -rf /usr/libexec/gcc/${_target} } do_clean() { (_clean_cross "x86_64-w64-mingw32") (_clean_cross "i686-w64-mingw32") } cross-x86_64-w64-mingw32-crt_package() { short_desc="CRT for Win64 cross toolchain" nopie=yes nodebug=yes # this subpackage exists to skip strip step on CRT files nostrip=yes noverifyrdeps=yes noshlibsprovides=yes lib32disabled=yes pkg_install() { DESTDIR="$PKGDESTDIR" _install_crt "x86_64-w64-mingw32" } } cross-i686-w64-mingw32_package() { short_desc="Cross toolchain for Win32 (GCC ${_gcc_version})" depends="${pkgname}-crt-${version}_${revision}" nopie=yes nodebug=yes noverifyrdeps=yes noshlibsprovides=yes lib32disabled=yes nostrip_files="libgcc.a libgcc_eh.a libgcc_s.a libgcov.a libatomic.a libatomic.dll.a libquadmath.a libquadmath.dll.a libssp.a libssp.dll.a libssp_nonshared.a libstdc++.a libstdc++.dll.a libsupc++.a" pkg_install() { DESTDIR="$PKGDESTDIR" _install_toolchain "i686-w64-mingw32" } } cross-i686-w64-mingw32-crt_package() { short_desc="CRT for Win32 cross toolchain" nopie=yes nodebug=yes nostrip=yes noverifyrdeps=yes noshlibsprovides=yes lib32disabled=yes pkg_install() { DESTDIR="$PKGDESTDIR" _install_crt "i686-w64-mingw32" } }