# Template file for 'cross-x86_64-w64-mingw32' pkgname=cross-x86_64-w64-mingw32 version=9.0.0 revision=1 _gcc_version=11.1.0 _binutils_version=2.35.1 _gmp_version=6.2.0 _mpfr_version=4.1.0 _mpc_version=1.1.0 _isl_version=0.21 _mingw_version="${version}" create_wrksrc=yes hostmakedepends="tar flex perl texinfo" 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 " license="GPL-2.0-or-later, GPL-3.0-or-later, ZPL-2.1" homepage="https://sourceforge.net/projects/mingw-w64/" distfiles=" ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz ${GNU_SITE}/mpc/mpc-${_mpc_version}.tar.gz ${GNU_SITE}/gmp/gmp-${_gmp_version}.tar.xz ${GNU_SITE}/mpfr/mpfr-${_mpfr_version}.tar.xz ${SOURCEFORGE_SITE}/libisl/isl-${_isl_version}.tar.bz2 ${SOURCEFORGE_SITE}/project/mingw-w64/mingw-w64/mingw-w64-release/mingw-w64-v${_mingw_version}.tar.bz2" checksum="3ced91db9bf01182b7e420eab68039f2083aed0a214c0424e257eae3ddee8607 4c4a6fb8a8396059241c2e674b85b351c26a5d678274007f076957afa1cc9ddf 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e 258e6cd51b3fbdfc185c716d55f82c08aff57df0c6fbd143cf6ed561267a1526 0c98a3f1732ff6ca4ea690552079da9c597872d30e96ec28414ee23c95558a7f d18ca11f8ad1a39ab6d03d3dcb3365ab416720fcb65b42d69f34f51bf0a0e859 1929b94b402f5ff4d7d37a9fe88daa9cc55515a6134805c104d1794ae22a4181" nocross=yes 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 libstdc++fs.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 noshlibprovides=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 noshlibprovides=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 libstdc++fs.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 noshlibprovides=yes lib32disabled=yes pkg_install() { DESTDIR="$PKGDESTDIR" _install_crt "i686-w64-mingw32" } }