From f18dbd25884120a10bd75f411ade6a7bc87ee28c Mon Sep 17 00:00:00 2001 From: Mizux Seiha Date: Tue, 5 Jan 2021 16:14:49 +0100 Subject: [PATCH] Add cross toolchain scripts --- arm.sh | 13 ++ tools/cross_compile_glop.sh | 252 ++++++++++++++++++++++++++++++++++++ 2 files changed, 265 insertions(+) create mode 100755 arm.sh create mode 100755 tools/cross_compile_glop.sh diff --git a/arm.sh b/arm.sh new file mode 100755 index 0000000000..c0770dfea8 --- /dev/null +++ b/arm.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -euo pipefail + +#export TOOLCHAIN=NATIVE +#export TARGET=x86_64 +#export QEMU_ARCH=DISABLED + +export TOOLCHAIN=LINARO +export TARGET=aarch64-linux-gnu +export QEMU_ARCH=aarch64 + +./tools/cross_compile_glop.sh diff --git a/tools/cross_compile_glop.sh b/tools/cross_compile_glop.sh new file mode 100755 index 0000000000..2d7bffa15d --- /dev/null +++ b/tools/cross_compile_glop.sh @@ -0,0 +1,252 @@ +#!/usr/bin/env bash + +set -euo pipefail + +function extract() { + case $1 in + *.tar.bz2) tar xjf "$1" ;; + *.tar.xz) tar xJf "$1" ;; + *.tar.gz) tar xzf "$1" ;; + *) + echo "don't know how to extract '$1'..." + exit 1 + esac +} + +function unpackifnotexists() { + mkdir -p "${ARCHIVE_DIR}" + cd "${ARCHIVE_DIR}" || exit + local -r URL=$1 + local -r RELATIVE_DIR=$2 + local -r DESTINATION="${ARCHIVE_DIR}/${RELATIVE_DIR}" + if [[ ! -d "${DESTINATION}" ]] ; then + local -r ARCHIVE_NAME=$(basename "${URL}") + test -f "${ARCHIVE_NAME}" || wget "${URL}" + extract "${ARCHIVE_NAME}" + rm -f "${ARCHIVE_NAME}" + fi +} + +function installqemuifneeded() { + local VERSION=${QEMU_VERSION:=5.2.0} + local ARCHES=${QEMU_ARCHES:=arm aarch64 x86_64 mips64 mips64el} + local TARGETS=${QEMU_TARGETS:=$(echo "$ARCHES" | sed 's#$# #;s#\([^ ]*\) #\1-linux-user #g')} + + if echo "${VERSION} ${TARGETS}" | cmp --silent ${QEMU_INSTALL}/.build -; then + echo "qemu ${VERSION} up to date!" + return 0 + fi + + echo "VERSION: ${VERSION}" + echo "TARGETS: ${TARGETS}" + + rm -rf ${QEMU_INSTALL} + + # Checking for a tarball before downloading makes testing easier :-) + local QEMU_URL="http://wiki.qemu-project.org/download/qemu-${VERSION}.tar.xz" + local QEMU_DIR="qemu-${VERSION}" + unpackifnotexists ${QEMU_URL} ${QEMU_DIR} + cd ${QEMU_DIR} || exit + + ./configure \ + --prefix=${QEMU_INSTALL} \ + --target-list=${TARGETS} \ + --disable-docs \ + --disable-sdl \ + --disable-gtk \ + --disable-gnutls \ + --disable-gcrypt \ + --disable-nettle \ + --disable-curses \ + --static + + make -j4 + make install + + echo "$VERSION $TARGETS" > ${QEMU_INSTALL}/.build +} + +function assert_defined(){ + if [[ -z "${!1}" ]]; then + echo "Variable '${1}' must be defined" + exit 1 + fi +} + +function integrate() { + cd "${PROJECT_DIR}" + + # CMake Configuration + set -x + cmake -S. -B"${BUILD_DIR}" "${DEFAULT_CMAKE_ARGS[@]}" "${CMAKE_ADDITIONAL_ARGS[@]}" + + # CMake Build + #cmake --build "${BUILD_DIR}" --target host_tools -v + cmake --build "${BUILD_DIR}" --target all -j8 -v + set +x + # Running tests if needed + if [[ "${QEMU_ARCH}" == "DISABLED" ]]; then + return + fi + RUN_CMD="" + if [[ -n "${QEMU_ARCH}" ]]; then + installqemuifneeded + RUN_CMD="${QEMU_INSTALL}/bin/qemu-${QEMU_ARCH} ${QEMU_ARGS[*]}" + fi + CMAKE_TEST_FILES="${BUILD_DIR}/test/*_test" + for test_binary in ${CMAKE_TEST_FILES}; do + ${RUN_CMD} "${test_binary}" + done +} + +function expand_linaro_config() { + #ref: https://releases.linaro.org/components/toolchain/binaries/ + #local -r LINARO_VERSION=7.2-2017.11 + local -r LINARO_VERSION=7.5-2019.12 + local -r LINARO_ROOT_URL=https://releases.linaro.org/components/toolchain/binaries/${LINARO_VERSION} + + #local -r GCC_VERSION=7.2.1-2017.11 + local -r GCC_VERSION=7.5.0-2019.12 + local -r GCC_URL=${LINARO_ROOT_URL}/${TARGET}/gcc-linaro-${GCC_VERSION}-x86_64_${TARGET}.tar.xz + local -r GCC_RELATIVE_DIR="gcc-linaro-${GCC_VERSION}-x86_64_${TARGET}" + unpackifnotexists "${GCC_URL}" "${GCC_RELATIVE_DIR}" + + #local -r SYSROOT_VERSION=2.25-2017.11 + local -r SYSROOT_VERSION=2.25-2019.12 + local -r SYSROOT_URL=${LINARO_ROOT_URL}/${TARGET}/sysroot-glibc-linaro-${SYSROOT_VERSION}-${TARGET}.tar.xz + local -r SYSROOT_RELATIVE_DIR=sysroot-glibc-linaro-${SYSROOT_VERSION}-${TARGET} + unpackifnotexists "${SYSROOT_URL}" "${SYSROOT_RELATIVE_DIR}" + + local -r SYSROOT_DIR=${ARCHIVE_DIR}/${SYSROOT_RELATIVE_DIR} + local -r STAGING_DIR=${ARCHIVE_DIR}/${SYSROOT_RELATIVE_DIR}-stage + local -r GCC_DIR=${ARCHIVE_DIR}/${GCC_RELATIVE_DIR} + + # Write Toolchain + # ref: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-linux + cat >"$TOOLCHAIN_FILE" <