a1de0d1ea66ff2e1e8471d392087c829606fbe9f
[iec.git] / src / type3_AndroidCloud / anbox-master / external / cpu_features / scripts / run_integration.sh
1 #!/bin/bash
2
3 readonly SCRIPT_FOLDER=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
4 readonly PROJECT_FOLDER="${SCRIPT_FOLDER}/.."
5 readonly ARCHIVE_FOLDER=~/cpu_features_archives
6 readonly QEMU_INSTALL=${ARCHIVE_FOLDER}/qemu
7 readonly DEFAULT_CMAKE_ARGS=" -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON"
8
9 function extract() {
10   case $1 in
11     *.tar.bz2)   tar xjf "$1"    ;;
12     *.tar.xz)    tar xJf "$1"    ;;
13     *.tar.gz)    tar xzf "$1"    ;;
14     *)
15       echo "don't know how to extract '$1'..."
16       exit 1
17   esac
18 }
19
20 function unpackifnotexists() {
21   mkdir -p "${ARCHIVE_FOLDER}"
22   cd "${ARCHIVE_FOLDER}" || exit
23   local URL=$1
24   local RELATIVE_FOLDER=$2
25   local DESTINATION="${ARCHIVE_FOLDER}/${RELATIVE_FOLDER}"
26   if [[  ! -d "${DESTINATION}" ]] ; then
27     local ARCHIVE_NAME=$(echo ${URL} | sed 's/.*\///')
28     test -f "${ARCHIVE_NAME}" || wget -q "${URL}"
29     extract "${ARCHIVE_NAME}"
30   fi
31 }
32
33 function installqemuifneeded() {
34   local VERSION=${QEMU_VERSION:=2.11.1}
35   local ARCHES=${QEMU_ARCHES:=arm aarch64 i386 x86_64 mips mipsel}
36   local TARGETS=${QEMU_TARGETS:=$(echo "$ARCHES" | sed 's#$# #;s#\([^ ]*\) #\1-linux-user #g')}
37
38   if echo "${VERSION} ${TARGETS}" | cmp --silent ${QEMU_INSTALL}/.build -; then
39     echo "qemu ${VERSION} up to date!"
40     return 0
41   fi
42
43   echo "VERSION: ${VERSION}"
44   echo "TARGETS: ${TARGETS}"
45
46   rm -rf ${QEMU_INSTALL}
47
48   # Checking for a tarball before downloading makes testing easier :-)
49   local QEMU_URL="http://wiki.qemu-project.org/download/qemu-${VERSION}.tar.xz"
50   local QEMU_FOLDER="qemu-${VERSION}"
51   unpackifnotexists ${QEMU_URL} ${QEMU_FOLDER}
52   cd ${QEMU_FOLDER} || exit
53
54   ./configure \
55     --prefix="${QEMU_INSTALL}" \
56     --target-list="${TARGETS}" \
57     --disable-docs \
58     --disable-sdl \
59     --disable-gtk \
60     --disable-gnutls \
61     --disable-gcrypt \
62     --disable-nettle \
63     --disable-curses \
64     --static
65
66   make -j4
67   make install
68
69   echo "$VERSION $TARGETS" > ${QEMU_INSTALL}/.build
70 }
71
72 function assert_defined(){
73   local VALUE=${1}
74   : "${VALUE?"${1} needs to be defined"}"
75 }
76
77 function integrate() {
78   cd "${PROJECT_FOLDER}" || exit
79   cmake -H. -B"${BUILD_DIR}" ${DEFAULT_CMAKE_ARGS} ${CMAKE_ADDITIONAL_ARGS}
80   cmake --build "${BUILD_DIR}" --target all
81
82   if [[ -n "${QEMU_ARCH}" ]]; then
83     if [[ "${QEMU_ARCH}" == "DISABLED" ]]; then
84       QEMU="true || "
85     else
86       installqemuifneeded
87       QEMU="${QEMU_INSTALL}/bin/qemu-${QEMU_ARCH} ${QEMU_ARGS}"
88     fi
89   else
90     QEMU=""
91   fi
92   # Run tests
93   for test_binary in ${BUILD_DIR}/test/*_test; do ${QEMU} ${test_binary}; done
94   # Run demo program
95   ${QEMU} "${BUILD_DIR}/list_cpu_features"
96 }
97
98 function expand_linaro_config() {
99   assert_defined TARGET
100   local LINARO_ROOT_URL=https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11
101
102   local GCC_URL=${LINARO_ROOT_URL}/${TARGET}/gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}.tar.xz
103   local GCC_RELATIVE_FOLDER="gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}"
104   unpackifnotexists "${GCC_URL}" "${GCC_RELATIVE_FOLDER}"
105
106   local SYSROOT_URL=${LINARO_ROOT_URL}/${TARGET}/sysroot-glibc-linaro-2.25-2017.11-${TARGET}.tar.xz
107   local SYSROOT_RELATIVE_FOLDER=sysroot-glibc-linaro-2.25-2017.11-${TARGET}
108   unpackifnotexists "${SYSROOT_URL}" "${SYSROOT_RELATIVE_FOLDER}"
109
110   local SYSROOT_FOLDER=${ARCHIVE_FOLDER}/${SYSROOT_RELATIVE_FOLDER}
111   local GCC_FOLDER=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}
112
113   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_SYSROOT=${SYSROOT_FOLDER}"
114   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_C_COMPILER=${GCC_FOLDER}/bin/${TARGET}-gcc"
115   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_CXX_COMPILER=${GCC_FOLDER}/bin/${TARGET}-g++"
116
117   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER"
118   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY"
119   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY"
120
121   QEMU_ARGS+=" -L ${SYSROOT_FOLDER}"
122   QEMU_ARGS+=" -E LD_LIBRARY_PATH=/lib"
123 }
124
125 function expand_codescape_config() {
126   assert_defined TARGET
127   local FLAVOUR=${QEMU_ARCH}-r2-hard
128   local DATE=2016.05-03
129   local CODESCAPE_URL=http://codescape-mips-sdk.imgtec.com/components/toolchain/${DATE}/Codescape.GNU.Tools.Package.${DATE}.for.MIPS.MTI.Linux.CentOS-5.x86_64.tar.gz
130   local GCC_URL=${CODESCAPE_URL}
131   local GCC_RELATIVE_FOLDER=${TARGET}/${DATE}
132   unpackifnotexists "${GCC_URL}" "${GCC_RELATIVE_FOLDER}"
133
134   local SYSROOT_URL=${CODESCAPE_URL}
135   local SYSROOT_FOLDER=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}/sysroot/${FLAVOUR}
136   unpackifnotexists "${SYSROOT_URL}" "${SYSROOT_RELATIVE_FOLDER}"
137
138   CMAKE_ADDITIONAL_ARGS+=" -DENABLE_MSA=1"
139   CMAKE_ADDITIONAL_ARGS+=" -DMIPS_CPU=p5600"
140   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_TOOLCHAIN_FILE=cmake/mips32-linux-gcc.cmake"
141   CMAKE_ADDITIONAL_ARGS+=" -DCROSS=${TARGET}-"
142   CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}"
143
144   QEMU_ARGS+=" -L ${SYSROOT_FOLDER}"
145   QEMU_ARGS+=" -E LD_LIBRARY_PATH=/lib"
146   QEMU_ARGS+=" -cpu P5600"
147 }
148
149 function expand_environment_and_integrate() {
150   assert_defined PROJECT_FOLDER
151   assert_defined TARGET
152
153   BUILD_DIR="${PROJECT_FOLDER}/cmake_build/${TARGET}"
154   mkdir -p "${BUILD_DIR}"
155
156   CMAKE_ADDITIONAL_ARGS=""
157   QEMU_ARGS=""
158
159   case ${TOOLCHAIN} in
160     LINARO)    expand_linaro_config     ;;
161     CODESCAPE) expand_codescape_config  ;;
162     NATIVE)    QEMU_ARCH=""             ;;
163     *)
164               echo "Unknown toolchain '${TOOLCHAIN}'..."
165               exit 1
166   esac
167   integrate
168 }
169
170 if [ "${CONTINUOUS_INTEGRATION}" = "true" ]; then
171   QEMU_ARCHES=${QEMU_ARCH}
172   expand_environment_and_integrate
173 fi