From 7ec5ec3f93ba2d47f0db7c6505887fe147c96e89 Mon Sep 17 00:00:00 2001 From: Catalin Toda Date: Fri, 27 Mar 2020 20:16:27 -0700 Subject: [PATCH] Add linaro gcc for compiling on host on aarch64 --- config/path | 26 ++++++++------ .../lang/gcc-arm-aarch64-none-elf/package.mk | 36 +++++++++++++++++++ packages/security/openssl/package.mk | 2 +- scripts/checkdeps | 11 ++++++ 4 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 packages/lang/gcc-arm-aarch64-none-elf/package.mk diff --git a/config/path b/config/path index 7d40b97d73..7d96080236 100644 --- a/config/path +++ b/config/path @@ -42,16 +42,6 @@ SYSROOT_PREFIX=$TOOLCHAIN/$TARGET_NAME/sysroot LIB_PREFIX=$SYSROOT_PREFIX/usr TARGET_PREFIX=$TOOLCHAIN/bin/$TARGET_NAME- -# use ARM toolchain on 64/32 split builds -if [ -z "$KERNEL_TOOLCHAIN" -a "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then - KERNEL_TOOLCHAIN="aarch64-none-linux-gnu" -fi -if [ -n "$KERNEL_TOOLCHAIN" ]; then - TARGET_KERNEL_PREFIX=$TOOLCHAIN/lib/gcc-arm-$KERNEL_TOOLCHAIN/bin/$KERNEL_TOOLCHAIN- -else - TARGET_KERNEL_PREFIX=$TARGET_PREFIX -fi - FAKEROOT_SCRIPT=$BUILD/.fakeroot if [ -z "$INSTALL" ]; then @@ -71,6 +61,22 @@ XORG_PATH_DRIVERS=/usr/lib/xorg/modules/drivers . config/optimize +# use ARM toolchain on 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 +fi +if [ -n "$KERNEL_TOOLCHAIN" ]; then + TARGET_KERNEL_PREFIX=$TOOLCHAIN/lib/gcc-arm-$KERNEL_TOOLCHAIN/bin/$KERNEL_TOOLCHAIN- +else + TARGET_KERNEL_PREFIX=$TARGET_PREFIX +fi + if [ -z "$CCACHE_DIR" ]; then export CCACHE_DIR=$BUILD/.ccache fi diff --git a/packages/lang/gcc-arm-aarch64-none-elf/package.mk b/packages/lang/gcc-arm-aarch64-none-elf/package.mk new file mode 100644 index 0000000000..b3d396906e --- /dev/null +++ b/packages/lang/gcc-arm-aarch64-none-elf/package.mk @@ -0,0 +1,36 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) + +PKG_NAME="gcc-arm-aarch64-none-elf" +PKG_VERSION="9.2-2019.12" +PKG_SHA256="041ca53bdd434b1a48f32161e957da1b84543c373d1881e2fd84a1579f87f243" +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}-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++" +} diff --git a/packages/security/openssl/package.mk b/packages/security/openssl/package.mk index 0efb40dd10..e59a553e31 100644 --- a/packages/security/openssl/package.mk +++ b/packages/security/openssl/package.mk @@ -46,7 +46,7 @@ pre_configure_host() { configure_host() { cd $PKG_BUILD/.$HOST_NAME - ./Configure $PKG_CONFIGURE_OPTS_HOST $PKG_CONFIGURE_OPTS_SHARED linux-x86_64 $CFLAGS $LDFLAGS + ./Configure $PKG_CONFIGURE_OPTS_HOST $PKG_CONFIGURE_OPTS_SHARED linux-${MACHINE_HARDWARE_NAME} $CFLAGS $LDFLAGS } makeinstall_host() { diff --git a/scripts/checkdeps b/scripts/checkdeps index 371b67b36c..9940b46dcc 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -122,6 +122,17 @@ if [ -n "${DISTRO_DEPS_PKG}" ] ; then deps_pkg+=(${DISTRO_DEPS_PKG}) fi +# aarch64 dependencies +if [ "$(uname -m)" = "aarch64" ]; then + if [ ! -f /lib64/ld-linux-x86-64.so.2 -a ! -f /lib/x86_64-linux-gnu/libc.so.6 ]; then + printf "Copy from a working x86_64 system:\n\t/lib64/libc.so.6\n\t/lib/x86_64-linux-gnu/libc.so.6\n" + fi + files+=(/lib64/ld-linux-x86-64.so.2 /lib/x86_64-linux-gnu/libc.so.6) + files_pkg+=(libc6:amd64 libc6:amd64) + deps+=(qemu-x86_64) + deps_pkg+=(qemu-user-binfmt) +fi + get_deps if [ "${#need[@]}" -gt 0 ]; then