void-packages/srcpkgs/cross-x86_64-w64-mingw32/template
2020-10-16 14:14:38 -03:00

307 lines
8.2 KiB
Bash

# Template file for 'cross-x86_64-w64-mingw32'
_gcc_version=10.2.0
_binutils_version=2.34
_gmp_version=6.2.0
_mpfr_version=4.1.0
_mpc_version=1.1.0
_isl_version=0.21
_mingw_version=8.0.0
pkgname=cross-x86_64-w64-mingw32
version=$_mingw_version
revision=1
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 <aleksey.tulinov@gmail.com>"
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.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
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="f00b0e8803dc9bab1e2165bd568528135be734df3fabf8d0161828cd56028952
b8dd4368bb9c7f0b98188317ee0254dd8cc99d1e3a18d0ff146c855fe16c1d8c
6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e
258e6cd51b3fbdfc185c716d55f82c08aff57df0c6fbd143cf6ed561267a1526
0c98a3f1732ff6ca4ea690552079da9c597872d30e96ec28414ee23c95558a7f
d18ca11f8ad1a39ab6d03d3dcb3365ab416720fcb65b42d69f34f51bf0a0e859
44c740ea6ab3924bc3aa169bad11ad3c5766c5c8459e3126d44eabb8735a5762"
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"
}
}