From 9cd50cb0f9dac27c8c03e3eb85e6470d8fd28ed5 Mon Sep 17 00:00:00 2001 From: q66 Date: Fri, 27 Dec 2019 23:40:18 +0100 Subject: [PATCH 1/4] cross-arm-none-eabi-gcc: update to 9.2.0 + build libgcc This does other reworking, such as building in a separate directory like is recommended by the project. By importing some changes from Arch, I managed to fix building of libgcc, which further enables building the rest of the toolchain. However, building libstdc++ is skipped, as that requires newlib to build, which itself is not available at this point. Newlib on the other hand requires a built toolchain to compile. We solve this by building gcc (complete but without libstdc++) first, followed by building newlib, followed by building just libstdc++ on its own. --- srcpkgs/cross-arm-none-eabi-gcc/template | 118 +++++++++++++---------- 1 file changed, 68 insertions(+), 50 deletions(-) diff --git a/srcpkgs/cross-arm-none-eabi-gcc/template b/srcpkgs/cross-arm-none-eabi-gcc/template index 0e636b75773..f082fdcb39c 100644 --- a/srcpkgs/cross-arm-none-eabi-gcc/template +++ b/srcpkgs/cross-arm-none-eabi-gcc/template @@ -1,55 +1,13 @@ -# Template file for 'cross-${_triplet}-${_pkgname}' +# Template file for 'cross-${_triplet}-gcc' _triplet=arm-none-eabi _pkgname=gcc -pkgname=cross-${_triplet}-${_pkgname} -version=9.1.0 +pkgname=cross-${_triplet}-gcc +version=9.2.0 revision=1 -wrksrc="${_pkgname}-${version}" +wrksrc="gcc-${version}" +build_wrksrc=build build_style=gnu-configure -configure_args=" - --disable-decimal-float - --disable-libffi - --disable-libgomp - --disable-libmudflap - --disable-libquadmath - --disable-libssp - --disable-libstdcxx-pch - --disable-nls - --disable-shared - --disable-threads - --disable-tls - --disable-werror - --enable-__cxa_atexit - --enable-c99 - --enable-gnu-indirect-function - --enable-interwork - --enable-languages=c,c++ - --enable-long-long - --enable-multilib - --enable-plugins - --host=${XBPS_CROSS_TRIPLET} - --libdir=/usr/lib - --libexecdir=/usr/lib - --prefix=/usr - --target=${_triplet} - --with-gmp - --with-gnu-as - --with-gnu-ld - --with-headers=/usr/${_triplet}/include - --with-host-libstdcxx='-static-libgcc' - --with-isl - --with-libelf - --with-mpc - --with-mpfr - --with-multilib-list=rmprofile - --with-native-system-header-dir=/include - --with-newlib - --with-python-dir=share/${_pkgname}-${_triplet} - --with-sysroot=/usr/${_triplet} - --with-system-zlib -" -make_build_target="all-gcc" -make_install_target="install-gcc" +make_build_args="INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0'" hostmakedepends="autoconf automake cross-arm-none-eabi-binutils bison flex perl" makedepends="gmp-devel isl15-devel libmpc-devel mpfr-devel zlib-devel" depends="cross-arm-none-eabi-binutils" @@ -57,12 +15,72 @@ short_desc="GNU Compiler Collection" maintainer="Ivan Sokolov " license="GFDL-1.2-or-later, GPL-3.0-or-later, LGPL-2.1-or-later" homepage="https://gcc.gnu.org" -distfiles="${GNU_SITE}/${_pkgname}/${_pkgname}-${version}/${_pkgname}-${version}.tar.xz" -checksum=79a66834e96a6050d8fe78db2c3b32fb285b230b855d0a66288235bc04b327a0 +distfiles="${GNU_SITE}/gcc/gcc-${version}/gcc-${version}.tar.xz" +checksum=ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206 alternatives="arm-none-eabi:/usr/bin/arm-none-eabi-cc:/usr/bin/arm-none-eabi-gcc" nocross=yes nopie=yes +nostrip_files="libgcc.a libgcov.a" + +post_extract() { + mkdir -p build +} + +pre_configure() { + export CFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections" + export CXXFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections" +} + +do_configure() { + ../configure \ + --disable-decimal-float \ + --disable-libffi \ + --disable-libgomp \ + --disable-libmudflap \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libstdcxx-pch \ + --disable-libstdc__-v3 \ + --disable-nls \ + --disable-shared \ + --disable-threads \ + --disable-tls \ + --disable-werror \ + --enable-__cxa_atexit \ + --enable-c99 \ + --enable-gnu-indirect-function \ + --enable-interwork \ + --enable-languages=c,c++ \ + --enable-long-long \ + --enable-multilib \ + --enable-plugins \ + --host=${XBPS_CROSS_TRIPLET} \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --prefix=/usr \ + --target=${_triplet} \ + --with-gmp \ + --with-gnu-as \ + --with-gnu-ld \ + --with-headers=/usr/${_triplet}/include \ + --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' \ + --with-isl \ + --with-libelf \ + --with-mpc \ + --with-mpfr \ + --with-multilib-list=rmprofile \ + --with-native-system-header-dir=/include \ + --with-newlib \ + --with-python-dir=share/gcc-${_triplet} \ + --with-sysroot=/usr/${_triplet} \ + --with-system-zlib +} + +pre_build() { + pre_configure +} post_install() { rm -fr ${DESTDIR}/usr/share/{info,man/man7} + rm -fr ${DESTDIR}/usr/lib/libcc1.* } From 8a88885c54062f303d5c29c7aadf27d8851923d5 Mon Sep 17 00:00:00 2001 From: q66 Date: Sat, 28 Dec 2019 02:18:41 +0100 Subject: [PATCH 2/4] cross-arm-none-eabi-newlib: build a nano variant --- srcpkgs/cross-arm-none-eabi-newlib/template | 73 +++++++++++++++++---- 1 file changed, 61 insertions(+), 12 deletions(-) diff --git a/srcpkgs/cross-arm-none-eabi-newlib/template b/srcpkgs/cross-arm-none-eabi-newlib/template index 076c52c93f3..a5c27a2ce79 100644 --- a/srcpkgs/cross-arm-none-eabi-newlib/template +++ b/srcpkgs/cross-arm-none-eabi-newlib/template @@ -3,21 +3,14 @@ _triplet=arm-none-eabi _pkgname=newlib pkgname=cross-${_triplet}-${_pkgname} version=3.1.0.20181231 -revision=1 +revision=2 wrksrc="${_pkgname}-${version}" build_style=gnu-configure configure_args=" - --disable-newlib-supplied-syscalls - --disable-nls - --enable-interwork - --enable-newlib-io-long-long - --enable-newlib-register-fini - --host=${XBPS_CROSS_TRIPLET} - --prefix=/usr - --target=${_triplet} - --with-gnu-as - --with-gnu-ld -" + --prefix=/usr --target=${_triplet} --host=${XBPS_CROSS_TRIPLET} + --with-gnu-as --with-gnu-ld --disable-nls + --disable-newlib-supplied-syscalls --enable-newlib-retargetable-locking + --enable-interwork" hostmakedepends="cross-arm-none-eabi-binutils cross-arm-none-eabi-gcc" short_desc="C library intended for use on embedded systems" maintainer="Ivan Sokolov " @@ -26,3 +19,59 @@ homepage="https://www.sourceware.org/${_pkgname}/" distfiles="ftp://sources.redhat.com/pub/${_pkgname}/${_pkgname}-${version}.tar.gz" checksum=9e12fea7297648b114434033ed4458755afe7b9b6c7d58123389e82bd37681c0 nostrip=yes + +post_extract() { + mkdir -p build-{newlib,nano} +} + +do_configure() { + pushd build-newlib + export CFLAGS_FOR_TARGET="-g -O2 -ffunction-sections -fdata-sections" + ../configure ${configure_args} \ + --enable-newlib-io-long-long \ + --enable-newlib-register-fini + popd + + pushd build-nano + export CFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections" + ../configure ${configure_args} \ + --enable-newlib-reent-small \ + --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 + popd +} + +do_build() { + pushd build-newlib + make ${makejobs} + popd + + pushd build-nano + make ${makejobs} + popd +} + +do_install() { + pushd build-nano + make DESTDIR=${DESTDIR} install + find ${DESTDIR} -regex ".*/lib\(c\|g\|rdimon\)\.a" \ + -exec rename .a _nano.a '{}' \; + install -d ${DESTDIR}/usr/${_triplet}/include/newlib-nano + install -m644 -t ${DESTDIR}/usr/${_triplet}/include/newlib-nano \ + ${DESTDIR}/usr/${_triplet}/include/newlib.h + popd + + pushd build-newlib + make DESTDIR=${DESTDIR} install + popd +} + +post_install() { + vlicense COPYING +} From d9ec45b0f1a218bdeb32d4b33ec8cddda3ceb723 Mon Sep 17 00:00:00 2001 From: q66 Date: Fri, 27 Dec 2019 23:42:08 +0100 Subject: [PATCH 3/4] New package: cross-arm-none-eabi-libstdc++ This completes the basic bare metal C/C++ toolchain by adding libstdc++. As this requires newlib to build, we need to make it into a separate package in order to avoid a dependency cycle. --- .../cross-arm-none-eabi-libstdc++/template | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 srcpkgs/cross-arm-none-eabi-libstdc++/template diff --git a/srcpkgs/cross-arm-none-eabi-libstdc++/template b/srcpkgs/cross-arm-none-eabi-libstdc++/template new file mode 100644 index 00000000000..c9d8318ff16 --- /dev/null +++ b/srcpkgs/cross-arm-none-eabi-libstdc++/template @@ -0,0 +1,49 @@ +# Template file for 'cross-${_triplet}-libstdc++' +_triplet=arm-none-eabi +pkgname=cross-${_triplet}-libstdc++ +version=9.2.0 +revision=1 +wrksrc="gcc-${version}" +build_wrksrc=build +# gnu-configure implicitly passes stuff we don't want +build_style=configure +configure_args=" + --disable-libstdcxx-pch --disable-libstdcxx-threads + --disable-nls --disable-shared --disable-tls --disable-werror + --enable-multilib --host=${_triplet} --target=${_triplet} + --libdir=/usr/${_triplet}/lib --prefix=/usr/${_triplet} + --with-gnu-ld --with-gxx-include-dir=/usr/${_triplet}/include/${version} + --with-newlib --with-python-dir=share/gcc-${_triplet}" +configure_script="../libstdc++-v3/configure" +make_build_args="INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0'" +hostmakedepends="autoconf automake cross-arm-none-eabi-binutils + cross-arm-none-eabi-gcc cross-arm-none-eabi-newlib bison flex perl" +makedepends="gmp-devel isl15-devel libmpc-devel mpfr-devel zlib-devel" +depends="cross-arm-none-eabi-gcc" +short_desc="GNU Compiler Collection - Standard C++ Library" +maintainer="q66 " +license="GPL-3.0-or-later" +homepage="https://gcc.gnu.org" +distfiles="${GNU_SITE}/gcc/gcc-${version}/gcc-${version}.tar.xz" +checksum=ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206 +nocross=yes +nopie=yes +nostrip=yes + +post_extract() { + mkdir -p build +} + +pre_configure() { + export CFLAGS="-g -Os -ffunction-sections -fdata-sections" + export CXXFLAGS="-g -Os -ffunction-sections -fdata-sections" + export CC=arm-none-eabi-gcc + export CXX=arm-none-eabi-g++ + export CPP=arm-none-eabi-cpp + export AR=arm-none-eabi-ar + export AS=arm-none-eabi-as +} + +pre_build() { + pre_configure +} From 5e9cd1c3b9533ac985e47673c1b34ab09d7f26c4 Mon Sep 17 00:00:00 2001 From: q66 Date: Fri, 27 Dec 2019 23:43:03 +0100 Subject: [PATCH 4/4] cross-arm-none-eabi: add libstdc++ dependency [ci skip] --- srcpkgs/cross-arm-none-eabi/template | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/srcpkgs/cross-arm-none-eabi/template b/srcpkgs/cross-arm-none-eabi/template index 4cae46f9b08..8a6b7573ebe 100644 --- a/srcpkgs/cross-arm-none-eabi/template +++ b/srcpkgs/cross-arm-none-eabi/template @@ -1,10 +1,11 @@ # Template file for 'cross-arm-none-eabi' _triplet=arm-none-eabi pkgname=cross-arm-none-eabi -version=0.4 +version=0.5 revision=1 build_style=meta -depends="cross-arm-none-eabi-binutils cross-arm-none-eabi-gcc cross-arm-none-eabi-newlib" +depends="cross-arm-none-eabi-binutils cross-arm-none-eabi-gcc + cross-arm-none-eabi-libstdc++ cross-arm-none-eabi-newlib" short_desc="GNU cross bare metal toolchain" maintainer="Ivan Sokolov " license="metapackage"