| # Maintainer: Carlos Antunes <cmantunes@gmail.com> |
| # Maintainer: fauxpark <fauxpark@gmail.com> |
| # Contributed by: nanodude |
| |
| _realname=newlib |
| _target=arm-none-eabi |
| _gccver=8.4.0 |
| |
| pkgbase=mingw-w64-${_target}-${_realname} |
| pkgname=("${MINGW_PACKAGE_PREFIX}-${_target}-${_realname}") |
| pkgver=3.3.0 |
| pkgrel=1 |
| pkgdesc='GNU Tools for ARM Embedded Processors - Newlib (mingw-w64)' |
| arch=('any') |
| mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64') |
| url="https://sourceware.org/newlib/" |
| license=('Various') |
| groups=("${MINGW_PACKAGE_PREFIX}-${_target}-toolchain") |
| depends=("${MINGW_PACKAGE_PREFIX}-${_target}-binutils") |
| options=('staticlibs' '!strip' '!emptydirs') |
| source=( |
| "https://sourceware.org/pub/newlib/newlib-${pkgver}.tar.gz" |
| "https://ftp.gnu.org/gnu/gcc/gcc-${_gccver}/gcc-${_gccver}.tar.xz" |
| ) |
| sha256sums=( |
| '58dd9e3eaedf519360d92d84205c3deef0b3fc286685d1c562e245914ef72c66' |
| 'e30a6e52d10e1f27ed55104ad233c30bd1e99cfb5ff98ab022dc941edd1b2dd4' |
| ) |
| noextract=("newlib-${pkgver}.tar.gz") |
| |
| prepare() { |
| cd ${srcdir} |
| # bsdtar doesn't like the symlinks |
| tar -xf newlib-${pkgver}.tar.gz |
| |
| cd ${srcdir}/gcc-${_gccver} |
| mkdir gcc-build-${MINGW_CHOST} |
| mkdir gcc-install-${MINGW_CHOST} |
| |
| cd ${srcdir}/newlib-${pkgver} |
| mkdir {newlib,nano}-build-${MINGW_CHOST} |
| } |
| |
| # Newlib is required to build GCC, but GCC is also required to compile newlib |
| # So we must build a minimal GCC first, to avoid the circular dependency |
| _build_gcc() { |
| cd ${srcdir}/gcc-${_gccver}/gcc-build-${MINGW_CHOST} |
| |
| cp -a ${MINGW_PREFIX}/${_target} ${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST} |
| |
| local _GCC_LDFLAGS="${LDFLAGS} -Wl,--disable-dynamicbase" |
| ../configure \ |
| --build=${MINGW_CHOST} \ |
| --host=${MINGW_CHOST} \ |
| --prefix=/ \ |
| --target=${_target} \ |
| --enable-languages=c \ |
| --disable-nls \ |
| --disable-libssp \ |
| --disable-shared \ |
| --disable-threads \ |
| --disable-libgomp \ |
| --disable-werror \ |
| --disable-lto \ |
| --disable-libffi \ |
| --disable-decimal-float \ |
| --disable-libmudflap \ |
| --disable-libquadmath \ |
| --disable-libstdcxx-pch \ |
| --disable-libsanitizer \ |
| --disable-tls \ |
| --enable-multilib \ |
| --enable-interwork \ |
| --without-headers \ |
| --with-libelf \ |
| --with-newlib \ |
| --with-multilib-list=rmprofile \ |
| --with-host-libstdcxx="-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm" \ |
| --with-sysroot=${MINGW_PREFIX} \ |
| --with-build-sysroot=${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST} \ |
| --with-build-time-tools=${MINGW_PREFIX}/${_target}/bin \ |
| LDFLAGS="${_GCC_LDFLAGS}" |
| |
| make all-gcc |
| make DESTDIR=${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST} install-gcc |
| } |
| |
| build() { |
| _build_gcc |
| |
| cd ${srcdir}/newlib-${pkgver}/newlib-build-${MINGW_CHOST} |
| |
| ../configure \ |
| PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" \ |
| --build=${MINGW_CHOST} \ |
| --host=${MINGW_CHOST} \ |
| --target=${_target} \ |
| --prefix=${MINGW_PREFIX} \ |
| --enable-newlib-io-long-long \ |
| --enable-newlib-io-c99-formats \ |
| --enable-newlib-register-fini \ |
| --enable-newlib-retargetable-locking \ |
| --disable-newlib-supplied-syscalls \ |
| --disable-nls |
| make PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" |
| |
| cd ${srcdir}/newlib-${pkgver}/nano-build-${MINGW_CHOST} |
| |
| ../configure \ |
| PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" \ |
| --build=${MINGW_CHOST} \ |
| --host=${MINGW_CHOST} \ |
| --target=${_target} \ |
| --prefix=${MINGW_PREFIX} \ |
| --disable-newlib-supplied-syscalls \ |
| --enable-newlib-reent-small \ |
| --enable-newlib-retargetable-locking \ |
| --disable-newlib-fvwrite-in-streamio \ |
| --disable-newlib-fseek-optimization \ |
| --disable-newlib-wide-orient \ |
| --enable-newlib-nano-malloc \ |
| --disable-newlib-unbuf-stream-opt \ |
| --enable-lite-exit \ |
| --enable-newlib-global-atexit \ |
| --enable-newlib-nano-formatted-io \ |
| --disable-nls |
| make PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" |
| } |
| |
| package() { |
| cd ${pkgdir} |
| |
| # make install complains if theses dirs do not already exist, for some reason |
| mkdir -p ${pkgdir}${MINGW_PREFIX}/${_target}/lib/arm/v5te/{hard,softfp} |
| mkdir -p ${pkgdir}${MINGW_PREFIX}/${_target}/lib/thumb/nofp |
| mkdir -p ${pkgdir}${MINGW_PREFIX}/${_target}/lib/thumb/v{6-m,7,7-m,7e-m,8-m.base,8-m.main}/nofp |
| mkdir -p ${pkgdir}${MINGW_PREFIX}/${_target}/lib/thumb/v{7+fp,7e-m+fp,7e-m+dp,8-m.main+fp,8-m.main+dp}/{hard,softfp} |
| |
| cd ${srcdir}/newlib-${pkgver}/nano-build-${MINGW_CHOST} |
| |
| make DESTDIR=${pkgdir} PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" install |
| |
| find ${pkgdir} -regex ".*/lib\(c\|g\|rdimon\)\.a" -exec rename .a _nano.a '{}' \; |
| install -Dm644 -t ${pkgdir}${MINGW_PREFIX}/${_target}/include/newlib-nano ${pkgdir}${MINGW_PREFIX}/${_target}/include/newlib.h |
| |
| cd ${srcdir}/newlib-${pkgver}/newlib-build-${MINGW_CHOST} |
| |
| make DESTDIR=${pkgdir} PATH="${srcdir}/gcc-${_gccver}/gcc-install-${MINGW_CHOST}/bin:${PATH}" install |
| |
| find ${pkgdir}${MINGW_PREFIX}/${_target}/lib \( -name "*.a" -or -name "*.o" \) -exec ${_target}-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc '{}' \; |
| } |