Sorry I missed your question. This wiki page should explain all this.

Waldek

On Thu, Feb 4, 2021 at 12:57 PM 'Stewart Hildebrand' via OSv Development <
[email protected]> wrote:

> The 2nd patch should have the subject "[PATCH 2/2] Add script to download
> aarch64 cross compiler toolchain", and I believe the original email sent in
> fact has the correct subject. However, this 2nd email is In-Reply-To the
> first one, and due to the way google groups displays it appears the subject
> is hidden. Sorry about that. What's the recommended way to send a patch
> series with multiple patches?
>
> On Thursday, February 4, 2021 at 12:48:59 PM UTC-5 Stewart Hildebrand
> wrote:
>
>> This is a source-able script that downloads the aarch64 toolchain from
>> developer.arm.com, extracts it, and, when being sourced, adds the path
>> to PATH.
>> If ccache is installed, it will also add the ccache directory to the
>> front of
>> PATH.
>>
>> Add a check in the OSv build script to source the toolchain if
>> arch=aarch64 and
>> the toolchain has been downloaded to the build directory.
>>
>> Add "centos" as an option in download_aarch64_packages.py to download the
>> toolchain. I did not change the logic for Ubuntu here due to the
>> possibility of
>> ending up with unvetted combinations of this GCC version with various
>> Ubuntu
>> system libraries that could be built with different versions of GCC. This
>> toolchain can still be used on Ubuntu by sourcing it directly, but in
>> this case
>> I recommend building Boost and other dependent libraries from source to
>> ensure
>> they are built with the same toolchain that is being used to build OSv
>> and your
>> apps/modules.
>>
>> This toolchain should work on any distribution that ARM supports, which
>> is
>> Ubuntu 16.04 LTS or later, or RHEL 7 or later. I've tested this on CentOS
>> 7 and
>> Ubuntu 18.04.
>>
>> My primary motivation for this is to support the aarch64 build on CentOS
>> 7.
>> While the EPEL repository for CentOS 7 does have an aarch64 cross
>> compiler
>> toolchain available, it is quite an old version (4.8.5). On Ubuntu, the
>> aarch64
>> cross compiler toolchain conflicts with the gcc-multilib package. Using
>> the ARM
>> toolchain allows us to avoid these particular issues.
>>
>> This toolchain does not provide Boost, so Boost will need to be built.
>> Here are
>> instructions I used for building boost from source. Ensure that the
>> current
>> working directory is the root of the OSv repository, then run the
>> following
>> commands:
>>
>> $ source scripts/download_aarch64_toolchain.sh
>> $ mkdir -p build/downloaded_packages/aarch64/boost
>> $ pushd build/downloaded_packages/aarch64/boost
>> $ wget
>> https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz
>> $ tar -xf boost_1_70_0.tar.gz
>> $ cd boost_1_70_0/
>> $ BOOST_DIR=$(pwd)
>> $ ./bootstrap.sh
>> $ echo "using gcc : arm : aarch64-none-linux-gnu-g++ ;" > user-config.jam
>> $ ./b2 --user-config=${BOOST_DIR}/user-config.jam toolset=gcc-arm
>> architecture=arm address-model=64 -j$(nproc)
>>
>> After building boost, we need to set up some symlinks so that OSv can
>> find the
>> boost headers and libraries. Ensure your current working directory is the
>> boost
>> source directory BOOST_DIR (it should be already), then run the following
>> commands:
>>
>> $ ln -s boost_1_70_0/stage ../install
>> $ mkdir -p stage/usr/include
>> $ ln -s ../../../boost stage/usr/include/boost
>> $ popd
>>
>> After building boost and setting up the symlinks, we should be ready to
>> build
>> OSv with the aarch64 toolchain:
>>
>> $ scripts/build arch=aarch64 fs=ramfs --create-disk image=native-example
>> -j$(nproc)
>>
>> Signed-off-by: Stewart Hildebrand <[email protected]>
>> ---
>> scripts/build | 5 +++
>> scripts/download_aarch64_packages.py | 2 +
>> scripts/download_aarch64_toolchain.sh | 55 +++++++++++++++++++++++++++
>> 3 files changed, 62 insertions(+)
>> create mode 100644 scripts/download_aarch64_toolchain.sh
>>
>> diff --git a/scripts/build b/scripts/build
>> index d859202a..6070ba0f 100755
>> --- a/scripts/build
>> +++ b/scripts/build
>> @@ -90,6 +90,11 @@ done
>>
>> arch=${arch:-x64}
>>
>> +if [[ "$arch" == "aarch64" && -d
>> "build/downloaded_packages/aarch64/toolchain/" ]]; then
>> + . scripts/download_aarch64_toolchain.sh
>> + export CROSS_PREFIX=aarch64-none-linux-gnu-
>> +fi
>> +
>> make "${args[@]}" ${stage1_args} | tee build.out
>> # check exit status of make
>> status=${PIPESTATUS[0]}
>> diff --git a/scripts/download_aarch64_packages.py
>> b/scripts/download_aarch64_packages.py
>> index 58a3cf7d..931decf9 100755
>> --- a/scripts/download_aarch64_packages.py
>> +++ b/scripts/download_aarch64_packages.py
>> @@ -78,6 +78,8 @@ elif name.lower() == 'ubuntu':
>> print("Cound not find boost version from neither main nor universe ports
>> index!")
>> sys.exit(1)
>> commands_to_download = ubuntu_download_commands(boost_version)
>> +elif name.lower() == "centos":
>> + commands_to_download = [ 'bash -eu
>> %s/scripts/download_aarch64_toolchain.sh' % osv_root ]
>> else:
>> print("The distribution %s is not supported for cross-compiling aarch64
>> version of OSv" % name)
>> sys.exit(1)
>> diff --git a/scripts/download_aarch64_toolchain.sh
>> b/scripts/download_aarch64_toolchain.sh
>> new file mode 100644
>> index 00000000..0403712c
>> --- /dev/null
>> +++ b/scripts/download_aarch64_toolchain.sh
>> @@ -0,0 +1,55 @@
>> +#!/bin/bash -eu
>> +
>> +# Copyright (c) 2021, DornerWorks, Ltd.
>> +# Author: Stewart Hildebrand
>> +# SPDX-License-Identifier: BSD-3-Clause OR MIT
>> +
>> +# Usage:
>> +# $ source download_aarch64_toolchain.sh
>> +# or
>> +# $ . download_aarch64_toolchain.sh
>> +
>> +#
>> https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
>> +
>> +ARM64_TOOLCHAIN_SCRIPTDIR="$(cd $(dirname ${BASH_SOURCE}) && pwd)/"
>> +ARM64_TOOLCHAIN_DESTINATION="${ARM64_TOOLCHAIN_SCRIPTDIR}../build/downloaded_packages/aarch64/toolchain/"
>>
>> +ARM64_TOOLCHAIN_VERSION=9.2-2019.12
>> +ARM64_TOOLCHAIN_FILENAME=gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu
>>
>> +
>> +if [ ! -d ${ARM64_TOOLCHAIN_DESTINATION}${ARM64_TOOLCHAIN_FILENAME} ];
>> then
>> + mkdir -p "${ARM64_TOOLCHAIN_DESTINATION}"
>> + pushd "${ARM64_TOOLCHAIN_DESTINATION}" >/dev/null
>> + if [ ! -s ${ARM64_TOOLCHAIN_FILENAME}.tar.xz ]; then
>> + wget
>> https://developer.arm.com/-/media/Files/downloads/gnu-a/${ARM64_TOOLCHAIN_VERSION}/binrel/${ARM64_TOOLCHAIN_FILENAME}.tar.xz
>> + fi
>> + tar -xf ${ARM64_TOOLCHAIN_FILENAME}.tar.xz
>> + popd >/dev/null
>> +fi
>> +
>> +if [ -d /usr/lib64/ccache ]; then
>> + CCACHE_SYMLINK_DIR=/usr/lib64/ccache
>> +fi
>> +if [ -d /usr/lib/ccache ]; then
>> + CCACHE_SYMLINK_DIR=/usr/lib/ccache
>> +fi
>> +
>> +PATH=${ARM64_TOOLCHAIN_DESTINATION}${ARM64_TOOLCHAIN_FILENAME}/bin:${PATH}
>>
>> +if [ ! -z "${CCACHE_SYMLINK_DIR-}" ]; then
>> + PATH=${CCACHE_SYMLINK_DIR}:$(echo ${PATH} | sed
>> "s|${CCACHE_SYMLINK_DIR}:||g")
>> +fi
>> +
>> +if [ -z "${CCACHE_SYMLINK_DIR-}" ]; then
>> + echo "It is recommended to install ccache and create symlinks for the"
>> + echo "aarch64 toolchain in order to significantly speed up the build."
>> +else
>> + if [ ! -h "${CCACHE_SYMLINK_DIR}/aarch64-none-linux-gnu-g++" ] || [ !
>> -h "${CCACHE_SYMLINK_DIR}/aarch64-none-linux-gnu-gcc" ]; then
>> + echo "It is recommended to create ccache symlinks for the aarch64"
>> + echo "toolchain in order to significantly speed up the build. Run the"
>> + echo "following commands to create the appropriate symlinks:"
>> + echo ""
>> + echo " sudo ln -s ../../bin/ccache
>> \"${CCACHE_SYMLINK_DIR}/aarch64-none-linux-gnu-gcc\""
>> + echo " sudo ln -s ../../bin/ccache
>> \"${CCACHE_SYMLINK_DIR}/aarch64-none-linux-gnu-g++\""
>> + echo ""
>> + echo "After this, please re-source the toolchain script to enable
>> ccache."
>> + fi
>> +fi
>> --
>> 2.30.0
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "OSv Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/osv-dev/4d0a4acf-d7f2-4ec0-ae2f-ecb72a0e988bn%40googlegroups.com
> <https://groups.google.com/d/msgid/osv-dev/4d0a4acf-d7f2-4ec0-ae2f-ecb72a0e988bn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/CAL9cFfO1ePkHtrQTBmYrr-2PYm38XndSV8xSt%3DovX55xgs6ypQ%40mail.gmail.com.

Reply via email to