From 0e148fbe518c6f6b1201c56520538604d213b661 Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Thu, 14 Apr 2022 19:37:34 +0200 Subject: [PATCH 1/5] binutils-aarch64: Initial binutils package for aarch64 --- packages/devel/binutils-aarch64/package.mk | 47 +++++++++++++++++++ ...uses-of-system-directories-when-link.patch | 32 +++++++++++++ .../binutils-aarch64/patches/nodocs.patch | 11 +++++ 3 files changed, 90 insertions(+) create mode 100644 packages/devel/binutils-aarch64/package.mk create mode 100644 packages/devel/binutils-aarch64/patches/binutils-01-warn-for-uses-of-system-directories-when-link.patch create mode 100644 packages/devel/binutils-aarch64/patches/nodocs.patch diff --git a/packages/devel/binutils-aarch64/package.mk b/packages/devel/binutils-aarch64/package.mk new file mode 100644 index 0000000000..b854112857 --- /dev/null +++ b/packages/devel/binutils-aarch64/package.mk @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="binutils-aarch64" +PKG_VERSION="2.37" +PKG_SHA256="820d9724f020a3e69cb337893a0b63c2db161dadcb0e06fc11dc29eb1e84a32c" +PKG_LICENSE="GPL" +PKG_SITE="https://www.gnu.org/software/binutils/" +PKG_URL="https://ftp.gnu.org/gnu/binutils/binutils-${PKG_VERSION}.tar.xz" +PKG_DEPENDS_HOST="toolchain:host" +PKG_LONGDESC="A GNU collection of binary utilities for 64-bit ARM." + +PKG_CONFIGURE_OPTS_HOST="--target=aarch64-none-elf \ + --with-sysroot=${SYSROOT_PREFIX} \ + --with-lib-path=${SYSROOT_PREFIX}/lib:${SYSROOT_PREFIX}/usr/lib \ + --without-ppl \ + --enable-static \ + --without-cloog \ + --disable-werror \ + --disable-multilib \ + --disable-libada \ + --disable-libssp \ + --enable-version-specific-runtime-libs \ + --enable-plugins \ + --enable-gold \ + --enable-ld=default \ + --enable-lto \ + --disable-nls" + +pre_configure_host() { + unset CPPFLAGS + unset CFLAGS + unset CXXFLAGS + unset LDFLAGS +} + +make_host() { + make configure-host + make +} + +makeinstall_host() { + cp -v ../include/libiberty.h ${SYSROOT_PREFIX}/usr/include + make -C bfd install # fix parallel build with libctf requiring bfd + make install +} diff --git a/packages/devel/binutils-aarch64/patches/binutils-01-warn-for-uses-of-system-directories-when-link.patch b/packages/devel/binutils-aarch64/patches/binutils-01-warn-for-uses-of-system-directories-when-link.patch new file mode 100644 index 0000000000..1619cef941 --- /dev/null +++ b/packages/devel/binutils-aarch64/patches/binutils-01-warn-for-uses-of-system-directories-when-link.patch @@ -0,0 +1,32 @@ +simplified patch based on +http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-devtools/binutils/binutils/0009-warn-for-uses-of-system-directories-when-cross-linki.patch +just detect and skip system directories if used by mistake + +linker output in case of using /usr/lib path: +/data/LibreELEC.tv/build.LibreELEC-Generic.x86_64-8.0-devel/toolchain/lib/gcc/x86_64-libreelec-linux-gnu/6.2.0/../../../../x86_64-libreelec-linux-gnu/bin/ld: warning: library search path "/usr/lib" is unsafe for cross-compilation, ignore it + +From 7ab8e318659eb5d9adc758c78d084a95560b93fd Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Fri, 15 Jan 2016 06:31:09 +0000 +Subject: [PATCH 09/13] warn for uses of system directories when cross linking + +--- a/ld/ldfile.c ++++ b/ld/ldfile.c +@@ -103,6 +103,17 @@ ldfile_add_library_path (const char *nam + if (!cmdline && config.only_cmd_line_lib_dirs) + return; + ++ /* skip those directories when linking */ ++ if ((!strncmp (name, "/lib", 4)) || ++ (!strncmp (name, "/usr/lib", 8)) || ++ (!strncmp (name, "/usr/local/lib", 14)) || ++ (!strncmp (name, "/usr/X11R6/lib", 14))) ++ { ++ einfo (_("%P: warning: library search path \"%s\" is unsafe for " ++ "cross-compilation, ignore it\n"), name); ++ return; ++ } ++ + new_dirs = (search_dirs_type *) xmalloc (sizeof (search_dirs_type)); + new_dirs->next = NULL; + new_dirs->cmdline = cmdline; diff --git a/packages/devel/binutils-aarch64/patches/nodocs.patch b/packages/devel/binutils-aarch64/patches/nodocs.patch new file mode 100644 index 0000000000..11bbb87798 --- /dev/null +++ b/packages/devel/binutils-aarch64/patches/nodocs.patch @@ -0,0 +1,11 @@ +--- a/binutils/Makefile.in ++++ b/binutils/Makefile.in +@@ -569,7 +569,7 @@ zlibdir = @zlibdir@ + zlibinc = @zlibinc@ + AUTOMAKE_OPTIONS = dejagnu no-dist foreign subdir-objects + ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd +-SUBDIRS = doc po ++SUBDIRS = + tooldir = $(exec_prefix)/$(target_alias) + + # Automake 1.10+ disables lex and yacc output file regeneration if From 973cc6c57f7b41516f2052a55a23439781876b42 Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Thu, 14 Apr 2022 19:38:06 +0200 Subject: [PATCH 2/5] gcc-aarch64: Initial gcc package for aarch64 --- packages/lang/gcc-aarch64/package.mk | 68 +++++++++++++++++++ .../patches/gcc-allow-newer-autoconf.patch | 32 +++++++++ .../patches/gcc-crosscompile-badness.patch | 31 +++++++++ 3 files changed, 131 insertions(+) create mode 100644 packages/lang/gcc-aarch64/package.mk create mode 100644 packages/lang/gcc-aarch64/patches/gcc-allow-newer-autoconf.patch create mode 100644 packages/lang/gcc-aarch64/patches/gcc-crosscompile-badness.patch diff --git a/packages/lang/gcc-aarch64/package.mk b/packages/lang/gcc-aarch64/package.mk new file mode 100644 index 0000000000..a637d9ed56 --- /dev/null +++ b/packages/lang/gcc-aarch64/package.mk @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) +# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="gcc-aarch64" +PKG_VERSION="11.2.0" +PKG_SHA256="d08edc536b54c372a1010ff6619dd274c0f1603aa49212ba20f7aa2cda36fa8b" +PKG_LICENSE="GPL-2.0-or-later" +PKG_SITE="http://gcc.gnu.org/" +PKG_URL="http://ftpmirror.gnu.org/gcc/gcc-${PKG_VERSION}/gcc-${PKG_VERSION}.tar.xz" +PKG_DEPENDS_HOST="toolchain:host ccache:host autoconf:host binutils-aarch64:host gmp:host mpfr:host mpc:host zstd:host" +PKG_LONGDESC="This package contains the GNU Compiler Collection for 64-bit ARM." + +PKG_CONFIGURE_OPTS_HOST="--target=aarch64-none-elf \ + --with-sysroot=${SYSROOT_PREFIX} \ + --with-gmp=${TOOLCHAIN} \ + --with-mpfr=${TOOLCHAIN} \ + --with-mpc=${TOOLCHAIN} \ + --with-zstd=${TOOLCHAIN} \ + --with-gnu-as \ + --with-gnu-ld \ + --with-newlib \ + --without-ppl \ + --without-headers \ + --without-cloog \ + --enable-__cxa_atexit \ + --enable-checking=release \ + --enable-gold \ + --enable-languages=c \ + --enable-ld=default \ + --enable-lto \ + --enable-plugin \ + --enable-static \ + --disable-decimal-float \ + --disable-gcov \ + --disable-libada \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libitm \ + --disable-libmpx \ + --disable-libmudflap \ + --disable-libquadmath \ + --disable-libquadmath-support \ + --disable-libsanitizer \ + --disable-libssp \ + --disable-multilib \ + --disable-nls \ + --disable-shared \ + --disable-threads" + +post_makeinstall_host() { + PKG_GCC_PREFIX="${TOOLCHAIN}/bin/aarch64-none-elf-" + GCC_VERSION=$(${PKG_GCC_PREFIX}gcc -dumpversion) + DATE="0501$(echo ${GCC_VERSION} | sed 's/\./0/g')" + CROSS_CC=${PKG_GCC_PREFIX}gcc-${GCC_VERSION} + + rm -f ${PKG_GCC_PREFIX}gcc + +cat > ${PKG_GCC_PREFIX}gcc < +Date: Thu, 24 Apr 2014 22:33:27 +0300 +Subject: [PATCH] allow newer autoconf + +--- + config/override.m4 | 9 --------- + 1 files changed, 0 insertions(+), 9 deletions(-) + +diff --git a/config/override.m4 b/config/override.m4 +index 52bd1c3..6c39656 100644 +--- a/config/override.m4 ++++ b/config/override.m4 +@@ -38,15 +38,6 @@ dnl m4_define([_GCC_AUTOCONF_VERSION], [X.Y]) + dnl in configure.ac before AC_INIT, + dnl without rewriting this file. + dnl Or for updating the whole tree at once with the definition above. +-AC_DEFUN([_GCC_AUTOCONF_VERSION_CHECK], +-[m4_if(m4_defn([_GCC_AUTOCONF_VERSION]), +- m4_defn([m4_PACKAGE_VERSION]), [], +- [m4_fatal([Please use exactly Autoconf ]_GCC_AUTOCONF_VERSION[ instead of ]m4_defn([m4_PACKAGE_VERSION])[.])]) +-]) +-m4_define([AC_INIT], m4_defn([AC_INIT])[ +-_GCC_AUTOCONF_VERSION_CHECK +-]) +- + + dnl Ensure we do not use a buggy M4. + m4_if(m4_index([..wi.d.], [.d.]), [-1], +-- +1.7.2.5 + diff --git a/packages/lang/gcc-aarch64/patches/gcc-crosscompile-badness.patch b/packages/lang/gcc-aarch64/patches/gcc-crosscompile-badness.patch new file mode 100644 index 0000000000..22aa83167f --- /dev/null +++ b/packages/lang/gcc-aarch64/patches/gcc-crosscompile-badness.patch @@ -0,0 +1,31 @@ +Index: gcc-4.4+svnr145550/gcc/incpath.c +=================================================================== +--- gcc-4.4+svnr145550.orig/gcc/incpath.c 2009-04-04 13:48:31.000000000 -0700 ++++ gcc-4.4+svnr145550/gcc/incpath.c 2009-04-04 14:49:29.000000000 -0700 +@@ -417,6 +417,26 @@ + p->construct = 0; + p->user_supplied_p = user_supplied_p; + ++ /* A common error when cross compiling is including ++ host headers. This code below will try to fail fast ++ for cross compiling. Currently we consider /usr/include, ++ /opt/include and /sw/include as harmful. */ ++ ++ { ++ /* printf("Adding Path: %s\n", p->name ); */ ++ if( strstr(p->name, "/usr/include" ) == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /usr/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } else if( strstr(p->name, "/sw/include") == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /sw/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } else if( strstr(p->name, "/opt/include") == p->name ) { ++ fprintf(stderr, _("CROSS COMPILE Badness: /opt/include in INCLUDEPATH: %s\n"), p->name); ++ abort(); ++ } ++ } ++ ++ + add_cpp_dir_path (p, chain); + } + From 771d19715b626ed50f26dad9e3f6213532e5604f Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Thu, 14 Apr 2022 19:39:26 +0200 Subject: [PATCH 3/5] config: switch aarch64 toolchain --- config/path | 12 +++--------- packages/linux/package.mk | 4 ++-- packages/tools/atf/package.mk | 2 +- packages/tools/u-boot/package.mk | 2 +- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/config/path b/config/path index 4a6e042994..2b0be6cead 100644 --- a/config/path +++ b/config/path @@ -56,18 +56,12 @@ XORG_PATH_DRIVERS=/usr/lib/xorg/modules/drivers . config/optimize -# use ARM toolchain on 64/32 split builds +# use different toolchain for 64/32 split builds if [ -z "$KERNEL_TOOLCHAIN" -a "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then - if [ "${MACHINE_HARDWARE_NAME}" = "x86_64" ]; then - KERNEL_TOOLCHAIN="aarch64-none-linux-gnu" - elif [ "${MACHINE_HARDWARE_NAME}" = "aarch64" ]; then - KERNEL_TOOLCHAIN="aarch64-none-elf" - else - die "No known toolchain available for ${MACHINE_HARDWARE_NAME}." - fi + KERNEL_TOOLCHAIN="aarch64" fi if [ -n "$KERNEL_TOOLCHAIN" ]; then - TARGET_KERNEL_PREFIX=$TOOLCHAIN/lib/gcc-arm-$KERNEL_TOOLCHAIN/bin/$KERNEL_TOOLCHAIN- + TARGET_KERNEL_PREFIX=$KERNEL_TOOLCHAIN-none-elf- else TARGET_KERNEL_PREFIX=$TARGET_PREFIX fi diff --git a/packages/linux/package.mk b/packages/linux/package.mk index d9efed6638..b139baab29 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -38,8 +38,8 @@ esac PKG_KERNEL_CFG_FILE=$(kernel_config_path) || die if [ -n "${KERNEL_TOOLCHAIN}" ]; then - PKG_DEPENDS_HOST+=" gcc-arm-${KERNEL_TOOLCHAIN}:host" - PKG_DEPENDS_TARGET+=" gcc-arm-${KERNEL_TOOLCHAIN}:host" + PKG_DEPENDS_HOST+=" gcc-${KERNEL_TOOLCHAIN}:host" + PKG_DEPENDS_TARGET+=" gcc-${KERNEL_TOOLCHAIN}:host" HEADERS_ARCH=${TARGET_ARCH} fi diff --git a/packages/tools/atf/package.mk b/packages/tools/atf/package.mk index 3774afde4a..d0798a3ad5 100644 --- a/packages/tools/atf/package.mk +++ b/packages/tools/atf/package.mk @@ -12,7 +12,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="ARM Trusted Firmware is a reference implementation of secure world software, including a Secure Monitor executing at Exception Level 3 and various Arm interface standards." PKG_TOOLCHAIN="manual" -[ -n "${KERNEL_TOOLCHAIN}" ] && PKG_DEPENDS_TARGET+=" gcc-arm-${KERNEL_TOOLCHAIN}:host" +[ -n "${KERNEL_TOOLCHAIN}" ] && PKG_DEPENDS_TARGET+=" gcc-${KERNEL_TOOLCHAIN}:host" make_target() { CROSS_COMPILE="${TARGET_KERNEL_PREFIX}" LDFLAGS="" CFLAGS="" make PLAT=${ATF_PLATFORM} bl31 diff --git a/packages/tools/u-boot/package.mk b/packages/tools/u-boot/package.mk index c502d4cd17..1a1de33fe6 100644 --- a/packages/tools/u-boot/package.mk +++ b/packages/tools/u-boot/package.mk @@ -11,7 +11,7 @@ PKG_LONGDESC="Das U-Boot is a cross-platform bootloader for embedded systems." PKG_STAMP="${UBOOT_SYSTEM} ${UBOOT_TARGET}" -[ -n "${KERNEL_TOOLCHAIN}" ] && PKG_DEPENDS_TARGET+=" gcc-arm-${KERNEL_TOOLCHAIN}:host" +[ -n "${KERNEL_TOOLCHAIN}" ] && PKG_DEPENDS_TARGET+=" gcc-${KERNEL_TOOLCHAIN}:host" if [ -n "${UBOOT_FIRMWARE}" ]; then PKG_DEPENDS_TARGET+=" ${UBOOT_FIRMWARE}" From 5bca9a1b0b0bee67499c6839489e1ba9a25e2f3b Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Thu, 14 Apr 2022 19:40:05 +0200 Subject: [PATCH 4/5] gcc-arm-aarch64-none-elf: Remove unused package --- .../lang/gcc-arm-aarch64-none-elf/package.mk | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 packages/lang/gcc-arm-aarch64-none-elf/package.mk diff --git a/packages/lang/gcc-arm-aarch64-none-elf/package.mk b/packages/lang/gcc-arm-aarch64-none-elf/package.mk deleted file mode 100644 index 0e7450f5fe..0000000000 --- a/packages/lang/gcc-arm-aarch64-none-elf/package.mk +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="gcc-arm-aarch64-none-elf" -PKG_VERSION="11.2-2022.02" -PKG_SHA256="3b15725545a0211a17b63e72d4f10241f7ffbe7ce94cb9612590ceacde16992c" -PKG_LICENSE="GPL" -PKG_SITE="https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a" -PKG_URL="https://developer.arm.com/-/media/Files/downloads/gnu/${PKG_VERSION}/binrel/gcc-arm-${PKG_VERSION}-aarch64-aarch64-none-elf.tar.xz" -PKG_DEPENDS_HOST="ccache:host" -PKG_LONGDESC="ARM Aarch64 GNU Linux Binary Toolchain" -PKG_TOOLCHAIN="manual" - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/lib/gcc-arm-aarch64-none-elf/ - cp -a * ${TOOLCHAIN}/lib/gcc-arm-aarch64-none-elf - - # wrap gcc and g++ with ccache like in gcc package.mk - PKG_GCC_PREFIX="${TOOLCHAIN}/lib/gcc-arm-aarch64-none-elf/bin/aarch64-none-elf-" - - cp "${PKG_GCC_PREFIX}gcc" "${PKG_GCC_PREFIX}gcc.real" -cat > "${PKG_GCC_PREFIX}gcc" << EOF -#!/bin/sh -${TOOLCHAIN}/bin/ccache ${PKG_GCC_PREFIX}gcc.real "\$@" -EOF - - chmod +x "${PKG_GCC_PREFIX}gcc" - - cp "${PKG_GCC_PREFIX}g++" "${PKG_GCC_PREFIX}g++.real" -cat > "${PKG_GCC_PREFIX}g++" << EOF -#!/bin/sh -${TOOLCHAIN}/bin/ccache ${PKG_GCC_PREFIX}g++.real "\$@" -EOF - - chmod +x "${PKG_GCC_PREFIX}g++" -} From 82c76fdd73e7c50cd6721fae5526caf96361bed9 Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Thu, 14 Apr 2022 19:40:33 +0200 Subject: [PATCH 5/5] gcc-arm-aarch64-none-linux-gnu: Remove unused package --- .../gcc-arm-aarch64-none-linux-gnu/package.mk | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 packages/lang/gcc-arm-aarch64-none-linux-gnu/package.mk diff --git a/packages/lang/gcc-arm-aarch64-none-linux-gnu/package.mk b/packages/lang/gcc-arm-aarch64-none-linux-gnu/package.mk deleted file mode 100644 index ff8408c3ad..0000000000 --- a/packages/lang/gcc-arm-aarch64-none-linux-gnu/package.mk +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="gcc-arm-aarch64-none-linux-gnu" -PKG_VERSION="10.3-2021.07" -PKG_SHA256="1e33d53dea59c8de823bbdfe0798280bdcd138636c7060da9d77a97ded095a84" -PKG_LICENSE="GPL" -PKG_SITE="https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a" -PKG_URL="https://developer.arm.com/-/media/Files/downloads/gnu-a/${PKG_VERSION}/binrel/gcc-arm-${PKG_VERSION}-x86_64-aarch64-none-linux-gnu.tar.xz" -PKG_DEPENDS_HOST="ccache:host" -PKG_LONGDESC="ARM Aarch64 GNU Linux Binary Toolchain" -PKG_TOOLCHAIN="manual" - -makeinstall_host() { - mkdir -p ${TOOLCHAIN}/lib/gcc-arm-aarch64-none-linux-gnu/ - cp -a * ${TOOLCHAIN}/lib/gcc-arm-aarch64-none-linux-gnu - - # wrap gcc and g++ with ccache like in gcc package.mk - PKG_GCC_PREFIX="${TOOLCHAIN}/lib/gcc-arm-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-" - - cp "${PKG_GCC_PREFIX}gcc" "${PKG_GCC_PREFIX}gcc.real" -cat > "${PKG_GCC_PREFIX}gcc" << EOF -#!/bin/sh -${TOOLCHAIN}/bin/ccache ${PKG_GCC_PREFIX}gcc.real "\$@" -EOF - - chmod +x "${PKG_GCC_PREFIX}gcc" - - cp "${PKG_GCC_PREFIX}g++" "${PKG_GCC_PREFIX}g++.real" -cat > "${PKG_GCC_PREFIX}g++" << EOF -#!/bin/sh -${TOOLCHAIN}/bin/ccache ${PKG_GCC_PREFIX}g++.real "\$@" -EOF - - chmod +x "${PKG_GCC_PREFIX}g++" -}