mirror of
https://github.com/google/cpu_features.git
synced 2025-04-28 15:33:37 +02:00
Update cross compilation scripts.
This commit is contained in:
parent
54e27126e6
commit
5a9819ce82
@ -19,15 +19,13 @@ matrix:
|
|||||||
compiler: clang
|
compiler: clang
|
||||||
- os: linux
|
- os: linux
|
||||||
env:
|
env:
|
||||||
CROSS_COMPILE=1
|
LINARO_URL=https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabihf/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz
|
||||||
TOOLCHAIN_NAME=gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf
|
|
||||||
TARGET=arm-linux-gnueabihf
|
TARGET=arm-linux-gnueabihf
|
||||||
QEMU_ARCHES=arm
|
QEMU_ARCHES=arm
|
||||||
QEMU_ARCH=arm
|
QEMU_ARCH=arm
|
||||||
- os: linux
|
- os: linux
|
||||||
env:
|
env:
|
||||||
CROSS_COMPILE=1
|
LINARO_URL=https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabihf/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz
|
||||||
TOOLCHAIN_NAME=gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu
|
|
||||||
TARGET=aarch64-linux-gnu
|
TARGET=aarch64-linux-gnu
|
||||||
QEMU_ARCHES=aarch64
|
QEMU_ARCHES=aarch64
|
||||||
QEMU_ARCH=aarch64
|
QEMU_ARCH=aarch64
|
||||||
|
@ -1,44 +1,119 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
export BUILD_DIR=cmake_build
|
set -e
|
||||||
export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON -H. -B${BUILD_DIR}"
|
set -x
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Ensures qemu is compiled in $HOME/qemu.
|
||||||
|
# Input:
|
||||||
|
# - QEMU_VERSION, the version of qemu to use.
|
||||||
|
# - QEMU_ARCHES, the list of architectures qemu should support.
|
||||||
|
function setup_qemu() {
|
||||||
|
local VERSION=${QEMU_VERSION:=2.11.0}
|
||||||
|
local ARCHES=${QEMU_ARCHES:=arm aarch64 i386 x86_64 mipsel}
|
||||||
|
local TARGETS=${QEMU_TARGETS:=$(echo $ARCHES | sed 's#$# #;s#\([^ ]*\) #\1-softmmu \1-linux-user #g')}
|
||||||
|
|
||||||
|
if echo "$VERSION $TARGETS" | cmp --silent $HOME/qemu/.build -; then
|
||||||
|
echo "qemu $VERSION up to date!"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "VERSION: $VERSION"
|
||||||
|
echo "TARGETS: $TARGETS"
|
||||||
|
|
||||||
|
cd $HOME
|
||||||
|
rm -rf qemu
|
||||||
|
|
||||||
|
# Checking for a tarball before downloading makes testing easier :-)
|
||||||
|
test -f "qemu-$VERSION.tar.xz" || wget "http://wiki.qemu-project.org/download/qemu-$VERSION.tar.xz"
|
||||||
|
tar -xJf "qemu-$VERSION.tar.xz"
|
||||||
|
cd "qemu-$VERSION"
|
||||||
|
|
||||||
|
./configure \
|
||||||
|
--prefix="$HOME/qemu" \
|
||||||
|
--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" > $HOME/qemu/.build
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Ensures the linaro toolchain is available in $HOME/toolchains.
|
||||||
|
# Input:
|
||||||
|
# - LINARO_URL, the url of the of the x86_64 gcc tarball.
|
||||||
|
function get_linaro_toolchain_folder() {
|
||||||
|
local LINARO_URL_NO_HTTPS=${LINARO_URL#https:}
|
||||||
|
local ARCHIVE_NAME=${LINARO_URL_NO_HTTPS##/*/}
|
||||||
|
local TOOLCHAIN_NAME=${ARCHIVE_NAME%.tar.*}
|
||||||
|
local TOOLCHAIN_HOME=${HOME}/toolchains
|
||||||
|
local TOOLCHAIN_FOLDER="${TOOLCHAIN_HOME}/${TOOLCHAIN_NAME}"
|
||||||
|
if [[ ! -d "${TOOLCHAIN_FOLDER}" ]] ; then
|
||||||
|
mkdir -p "${TOOLCHAIN_HOME}"
|
||||||
|
cd "${TOOLCHAIN_HOME}"
|
||||||
|
wget ${LINARO_URL}
|
||||||
|
tar -xJf ${ARCHIVE_NAME}
|
||||||
|
rm ${ARCHIVE_NAME}
|
||||||
|
fi
|
||||||
|
echo ${TOOLCHAIN_FOLDER}
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
SCRIPT_FOLDER=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_FOLDER=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
||||||
PROJECT_FOLDER=${SCRIPT_FOLDER}/..
|
PROJECT_FOLDER="${SCRIPT_FOLDER}/.."
|
||||||
cd ${PROJECT_FOLDER}
|
cd ${PROJECT_FOLDER}
|
||||||
|
|
||||||
if [[ -n "${CROSS_COMPILE}" ]]; then
|
BUILD_DIR="${PROJECT_FOLDER}/cmake_build"
|
||||||
|
CMAKE_PATH="${PATH}"
|
||||||
|
CMAKE_ARGS="-H. -B${BUILD_DIR}"
|
||||||
|
CMAKE_ARGS+=" -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Setup toolchain if necessary.
|
||||||
|
#
|
||||||
|
if [[ -n "${LINARO_URL}" ]]; then
|
||||||
# Cross compilation
|
# Cross compilation
|
||||||
: "${TOOLCHAIN_NAME:?Need to set TOOLCHAIN_NAME non-empty}"
|
|
||||||
: "${TARGET:?Need to set TARGET non-empty}"
|
: "${TARGET:?Need to set TARGET non-empty}"
|
||||||
: "${QEMU_ARCH:?Need to set QEMU_ARCH non-empty}"
|
TOOLCHAIN=`get_linaro_toolchain_folder`
|
||||||
${SCRIPT_FOLDER}/setup_qemu.sh
|
CMAKE_TOOLCHAIN_FILE=cmake/${TARGET}.cmake
|
||||||
${SCRIPT_FOLDER}/setup_toolchain.sh
|
|
||||||
export TOOLCHAIN=${HOME}/toolchains/${TOOLCHAIN_NAME}
|
|
||||||
export PATH=${TOOLCHAIN}/bin:${HOME}/qemu/bin:${PATH}
|
|
||||||
export CMAKE_TOOLCHAIN_FILE=cmake/${TARGET}.cmake
|
|
||||||
if [[ ! -f ${CMAKE_TOOLCHAIN_FILE} ]]; then
|
if [[ ! -f ${CMAKE_TOOLCHAIN_FILE} ]]; then
|
||||||
echo "Missing cmake toolchain file : $CMAKE_TOOLCHAIN_FILE"
|
echo "Missing cmake toolchain file : $CMAKE_TOOLCHAIN_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Generate makefile
|
CMAKE_ARGS+=" -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
|
||||||
cmake ${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
CMAKE_PATH="${TOOLCHAIN}/bin:${PATH}"
|
||||||
# Compile
|
fi
|
||||||
cmake --build ${BUILD_DIR} --target all
|
|
||||||
|
# Generate makefile
|
||||||
|
PATH=${CMAKE_PATH} cmake ${CMAKE_ARGS}
|
||||||
|
# Compile
|
||||||
|
PATH=${CMAKE_PATH} cmake --build ${BUILD_DIR} --target all
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tests
|
||||||
|
#
|
||||||
|
if [[ -n "${QEMU_ARCH}" ]]; then
|
||||||
# Run tests
|
# Run tests
|
||||||
export QEMU=qemu-${QEMU_ARCH}
|
QEMU_PATH="${HOME}/qemu/bin:${PATH}"
|
||||||
export QEMU_LD_PREFIX=${TOOLCHAIN}/${TARGET}/libc
|
: "${QEMU_ARCH:?Need to set QEMU_ARCH non-empty}"
|
||||||
|
setup_qemu
|
||||||
|
QEMU="qemu-${QEMU_ARCH} -L ${TOOLCHAIN}/${TARGET}/libc"
|
||||||
for test_binary in ${BUILD_DIR}/test/*_test; do
|
for test_binary in ${BUILD_DIR}/test/*_test; do
|
||||||
${QEMU} ${test_binary}
|
PATH=${QEMU_PATH} ${QEMU} ${test_binary}
|
||||||
done
|
done
|
||||||
# Run demo program
|
# Run demo program
|
||||||
${QEMU} ${BUILD_DIR}/list_cpu_features
|
PATH=${QEMU_PATH} ${QEMU} ${BUILD_DIR}/list_cpu_features
|
||||||
else
|
else
|
||||||
# Native compilation
|
|
||||||
# Generate makefile
|
|
||||||
cmake ${CMAKE_ARGS}
|
|
||||||
# Compile
|
|
||||||
cmake --build ${BUILD_DIR} --target all
|
|
||||||
# Run tests
|
# Run tests
|
||||||
CTEST_OUTPUT_ON_FAILURE=1 cmake --build ${BUILD_DIR} --target test
|
CTEST_OUTPUT_ON_FAILURE=1 cmake --build ${BUILD_DIR} --target test
|
||||||
# Run demo program
|
# Run demo program
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
VERSION=${QEMU_VERSION:=2.11.0}
|
|
||||||
ARCHES=${QEMU_ARCHES:=arm aarch64 i386 x86_64 mipsel}
|
|
||||||
TARGETS=${QEMU_TARGETS:=$(echo $ARCHES | sed 's#$# #;s#\([^ ]*\) #\1-softmmu \1-linux-user #g')}
|
|
||||||
|
|
||||||
if echo "$VERSION $TARGETS" | cmp --silent $HOME/qemu/.build -; then
|
|
||||||
echo "qemu $VERSION up to date!"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "VERSION: $VERSION"
|
|
||||||
echo "TARGETS: $TARGETS"
|
|
||||||
|
|
||||||
cd $HOME
|
|
||||||
rm -rf qemu
|
|
||||||
|
|
||||||
# Checking for a tarball before downloading makes testing easier :-)
|
|
||||||
test -f "qemu-$VERSION.tar.xz" || wget "http://wiki.qemu-project.org/download/qemu-$VERSION.tar.xz"
|
|
||||||
tar -xJf "qemu-$VERSION.tar.xz"
|
|
||||||
cd "qemu-$VERSION"
|
|
||||||
|
|
||||||
./configure \
|
|
||||||
--prefix="$HOME/qemu" \
|
|
||||||
--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" > $HOME/qemu/.build
|
|
@ -1,23 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
: "${TOOLCHAIN_NAME:?Need to set TOOLCHAIN_NAME non-empty}"
|
|
||||||
: "${TARGET:?Need to set TARGET non-empty}"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ -d "$HOME/toolchains/${TOOLCHAIN_NAME}/${TARGET}" ]] ; then
|
|
||||||
echo "toolchain ${TOOLCHAIN_NAME} ${TARGET} exists!"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
export ARCHIVE_NAME=${TOOLCHAIN_NAME}.tar.xz
|
|
||||||
|
|
||||||
echo "TOOLCHAIN: $TOOLCHAIN_NAME"
|
|
||||||
echo "TARGET : $TARGET"
|
|
||||||
|
|
||||||
mkdir -p $HOME/toolchains
|
|
||||||
cd $HOME/toolchains
|
|
||||||
|
|
||||||
test -f "${ARCHIVE_NAME}" || wget https://releases.linaro.org/components/toolchain/binaries/latest/${TARGET}/${ARCHIVE_NAME}
|
|
||||||
tar -xJf ${ARCHIVE_NAME}
|
|
||||||
rm ${ARCHIVE_NAME}
|
|
Loading…
x
Reference in New Issue
Block a user