mirror of
https://github.com/google/cpu_features.git
synced 2025-04-27 23:22:31 +02:00
Add Mips compilation support
This commit is contained in:
parent
c1de7c935e
commit
6446b42567
11
.travis.yml
11
.travis.yml
@ -57,19 +57,24 @@ matrix:
|
||||
env:
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=aarch64_be-linux-gnu
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH=DISABLED
|
||||
# Toolchains for big-endian, hard-float, 32-bit ARMv7 (and earlier) for GNU/Linux systems
|
||||
- os: linux
|
||||
env:
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=armeb-linux-gnueabihf
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH=DISABLED
|
||||
# Toolchains for big-endian, soft-float, 32-bit ARMv7 (and earlier) for GNU/Linux systems
|
||||
- os: linux
|
||||
env:
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=armeb-linux-gnueabi
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH=DISABLED
|
||||
- os: linux
|
||||
env:
|
||||
TOOLCHAIN=CODESCAPE
|
||||
TARGET=mips-mti-linux-gnu
|
||||
QEMU_ARCH=DISABLED
|
||||
|
||||
script:
|
||||
- cmake --version
|
||||
|
34
cmake/mips32-linux-gcc.cmake
Normal file
34
cmake/mips32-linux-gcc.cmake
Normal file
@ -0,0 +1,34 @@
|
||||
set(CMAKE_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_SYSTEM_PROCESSOR "mips32")
|
||||
|
||||
if (ENABLE_DSPR2 AND ENABLE_MSA)
|
||||
message(FATAL_ERROR "ENABLE_DSPR2 and ENABLE_MSA cannot be combined.")
|
||||
endif ()
|
||||
|
||||
if (ENABLE_DSPR2)
|
||||
set(HAVE_DSPR2 1 CACHE BOOL "" FORCE)
|
||||
set(MIPS_CFLAGS "-mdspr2")
|
||||
set(MIPS_CXXFLAGS "-mdspr2")
|
||||
elseif (ENABLE_MSA)
|
||||
set(HAVE_MSA 1 CACHE BOOL "" FORCE)
|
||||
set(MIPS_CFLAGS "-mmsa")
|
||||
set(MIPS_CXXFLAGS "-mmsa")
|
||||
endif ()
|
||||
|
||||
if ("${MIPS_CPU}" STREQUAL "")
|
||||
set(MIPS_CFLAGS "${MIPS_CFLAGS} -mips32r2")
|
||||
set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} -mips32r2")
|
||||
elseif ("${MIPS_CPU}" STREQUAL "p5600")
|
||||
set(P56_FLAGS "-mips32r5 -mload-store-pairs -msched-weight -mhard-float -mfp64")
|
||||
set(MIPS_CFLAGS "${MIPS_CFLAGS} ${P56_FLAGS}")
|
||||
set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} ${P56_FLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-mfp64 ${CMAKE_EXE_LINKER_FLAGS}")
|
||||
endif ()
|
||||
|
||||
set(CMAKE_C_COMPILER ${CROSS}gcc)
|
||||
set(CMAKE_CXX_COMPILER ${CROSS}g++)
|
||||
set(AS_EXECUTABLE ${CROSS}as)
|
||||
set(CMAKE_C_COMPILER_ARG1 "-EL ${MIPS_CFLAGS}")
|
||||
set(CMAKE_CXX_COMPILER_ARG1 "-EL ${MIPS_CXXFLAGS}")
|
||||
|
||||
set(THREADS_PTHREAD_ARG "2" CACHE STRING "Forcibly set by CMakeLists.txt." FORCE)
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT_FOLDER=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
||||
PROJECT_FOLDER="${SCRIPT_FOLDER}/.."
|
||||
PROJECT_FOLDER=`realpath "${SCRIPT_FOLDER}/.."`
|
||||
ARCHIVE_FOLDER=~/archives
|
||||
QEMU_INSTALL=${ARCHIVE_FOLDER}/qemu
|
||||
DEFAULT_CMAKE_ARGS=" -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON"
|
||||
@ -29,10 +29,9 @@ function unpackifnotexists() {
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function installqemuifneeded() {
|
||||
local VERSION=${QEMU_VERSION:=2.11.1}
|
||||
local ARCHES=${QEMU_ARCHES:=arm aarch64 i386 x86_64 mipsel}
|
||||
local ARCHES=${QEMU_ARCHES:=arm aarch64 i386 x86_64 mips mipsel}
|
||||
local TARGETS=${QEMU_TARGETS:=$(echo $ARCHES | sed 's#$# #;s#\([^ ]*\) #\1-linux-user #g')}
|
||||
|
||||
if echo "${VERSION} ${TARGETS}" | cmp --silent ${QEMU_INSTALL}/.build -; then
|
||||
@ -70,88 +69,102 @@ function installqemuifneeded() {
|
||||
}
|
||||
|
||||
function assert_defined(){
|
||||
: ${1?Needs to be defined}
|
||||
local VALUE=${1}
|
||||
: ${VALUE?"${1} needs to be defined"}
|
||||
}
|
||||
|
||||
function integrate_cross() {
|
||||
assert_defined ${GCC_URL}
|
||||
assert_defined ${GCC_RELATIVE_FOLDER}
|
||||
assert_defined ${SYSROOT_URL}
|
||||
assert_defined ${SYSROOT_RELATIVE_FOLDER}
|
||||
|
||||
unpackifnotexists ${GCC_URL} ${GCC_RELATIVE_FOLDER}
|
||||
unpackifnotexists ${SYSROOT_URL} ${SYSROOT_RELATIVE_FOLDER}
|
||||
|
||||
local CMAKE_ARGS=${DEFAULT_CMAKE_ARGS}
|
||||
|
||||
# Update cmake args for cross compilation.
|
||||
local SYSROOT_FOLDER=${ARCHIVE_FOLDER}/${SYSROOT_RELATIVE_FOLDER}
|
||||
local GCC_FOLDER=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}
|
||||
CMAKE_ARGS+=" -DCMAKE_SYSROOT=${SYSROOT_FOLDER}"
|
||||
CMAKE_ARGS+=" -DCMAKE_C_COMPILER=${GCC_FOLDER}/bin/${TARGET}-gcc"
|
||||
CMAKE_ARGS+=" -DCMAKE_CXX_COMPILER=${GCC_FOLDER}/bin/${TARGET}-g++"
|
||||
|
||||
function integrate() {
|
||||
cd ${PROJECT_FOLDER}
|
||||
cmake -H. -B${BUILD_DIR} ${CMAKE_ARGS}
|
||||
cmake --build ${BUILD_DIR} --target all
|
||||
cmake -H. -B${BUILD_DIR} ${DEFAULT_CMAKE_ARGS} ${CMAKE_ADDITIONAL_ARGS}
|
||||
cmake --build ${BUILD_DIR} --target all -- -j `nproc`
|
||||
|
||||
if [[ -n "${QEMU_ARCH}" ]]; then
|
||||
installqemuifneeded
|
||||
QEMU="${QEMU_INSTALL}/bin/qemu-${QEMU_ARCH} -L ${SYSROOT_FOLDER}"
|
||||
# Run tests
|
||||
for test_binary in ${BUILD_DIR}/test/*_test; do ${QEMU} ${test_binary}; done
|
||||
# Run demo program
|
||||
${QEMU} ${BUILD_DIR}/list_cpu_features
|
||||
if [[ "${QEMU_ARCH}" == "DISABLED" ]]; then
|
||||
QEMU="true || "
|
||||
else
|
||||
installqemuifneeded
|
||||
QEMU="${QEMU_INSTALL}/bin/qemu-${QEMU_ARCH} ${QEMU_ARGS}"
|
||||
fi
|
||||
else
|
||||
QEMU=""
|
||||
fi
|
||||
}
|
||||
|
||||
function integrate_native() {
|
||||
local CMAKE_ARGS=${DEFAULT_CMAKE_ARGS}
|
||||
|
||||
cd ${PROJECT_FOLDER}
|
||||
cmake -H. -B${BUILD_DIR} ${CMAKE_ARGS}
|
||||
cmake --build ${BUILD_DIR} --target all
|
||||
|
||||
# Run tests
|
||||
for test_binary in ${BUILD_DIR}/test/*_test; do ${test_binary}; done
|
||||
for test_binary in ${BUILD_DIR}/test/*_test; do ${QEMU} ${test_binary}; done
|
||||
# Run demo program
|
||||
${BUILD_DIR}/list_cpu_features
|
||||
${QEMU} ${BUILD_DIR}/list_cpu_features
|
||||
}
|
||||
|
||||
function expand_linaro_config() {
|
||||
assert_defined ${TARGET}
|
||||
assert_defined TARGET
|
||||
local LINARO_ROOT_URL=https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11
|
||||
GCC_URL=${LINARO_ROOT_URL}/${TARGET}/gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}.tar.xz
|
||||
GCC_RELATIVE_FOLDER=gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}
|
||||
SYSROOT_URL=${LINARO_ROOT_URL}/${TARGET}/sysroot-glibc-linaro-2.25-2017.11-${TARGET}.tar.xz
|
||||
SYSROOT_RELATIVE_FOLDER=sysroot-glibc-linaro-2.25-2017.11-${TARGET}
|
||||
|
||||
local GCC_URL=${LINARO_ROOT_URL}/${TARGET}/gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}.tar.xz
|
||||
local GCC_RELATIVE_FOLDER=gcc-linaro-7.2.1-2017.11-x86_64_${TARGET}
|
||||
unpackifnotexists ${GCC_URL} ${GCC_RELATIVE_FOLDER}
|
||||
|
||||
local SYSROOT_URL=${LINARO_ROOT_URL}/${TARGET}/sysroot-glibc-linaro-2.25-2017.11-${TARGET}.tar.xz
|
||||
local SYSROOT_RELATIVE_FOLDER=sysroot-glibc-linaro-2.25-2017.11-${TARGET}
|
||||
unpackifnotexists ${SYSROOT_URL} ${SYSROOT_RELATIVE_FOLDER}
|
||||
|
||||
local SYSROOT_FOLDER=${ARCHIVE_FOLDER}/${SYSROOT_RELATIVE_FOLDER}
|
||||
local GCC_FOLDER=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}
|
||||
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_SYSROOT=${SYSROOT_FOLDER}"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_C_COMPILER=${GCC_FOLDER}/bin/${TARGET}-gcc"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_CXX_COMPILER=${GCC_FOLDER}/bin/${TARGET}-g++"
|
||||
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY"
|
||||
|
||||
QEMU_ARGS+=" -L ${SYSROOT_FOLDER}"
|
||||
QEMU_ARGS+=" -E LD_LIBRARY_PATH=/lib"
|
||||
}
|
||||
|
||||
function expand_codescape_config() {
|
||||
http://codescape-mips-sdk.imgtec.com/components/toolchain/2016.05-03/Codescape.GNU.Tools.Package.2016.05-03.for.MIPS.MTI.Linux.CentOS-5.x86_64.tar.gz
|
||||
assert_defined ${TARGET}
|
||||
local LINARO_ROOT_URL=https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11
|
||||
assert_defined TARGET
|
||||
local FLAVOUR=${QEMU_ARCH}-r2-hard
|
||||
local DATE=2016.05-03
|
||||
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
|
||||
|
||||
local GCC_URL=${CODESCAPE_URL}
|
||||
local GCC_RELATIVE_FOLDER=mips-mti-linux-gnu/${DATE}
|
||||
unpackifnotexists ${GCC_URL} ${GCC_RELATIVE_FOLDER}
|
||||
|
||||
local SYSROOT_URL=${CODESCAPE_URL}
|
||||
local SYSROOT_FOLDER=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}/sysroot/${FLAVOUR}
|
||||
unpackifnotexists ${SYSROOT_URL} ${SYSROOT_RELATIVE_FOLDER}
|
||||
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DENABLE_MSA=1"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DMIPS_CPU=p5600"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_TOOLCHAIN_FILE=cmake/mips32-linux-gcc.cmake"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCROSS=mips-mti-linux-gnu-"
|
||||
CMAKE_ADDITIONAL_ARGS+=" -DCMAKE_FIND_ROOT_PATH=${ARCHIVE_FOLDER}/${GCC_RELATIVE_FOLDER}"
|
||||
|
||||
QEMU_ARGS+=" -L ${SYSROOT_FOLDER}"
|
||||
QEMU_ARGS+=" -E LD_LIBRARY_PATH=/lib"
|
||||
QEMU_ARGS+=" -cpu P5600"
|
||||
}
|
||||
|
||||
function expand_environment_and_integrate() {
|
||||
assert_defined ${PROJECT_FOLDER}
|
||||
assert_defined ${TARGET}
|
||||
assert_defined PROJECT_FOLDER
|
||||
assert_defined TARGET
|
||||
|
||||
BUILD_DIR="${PROJECT_FOLDER}/cmake_build/${TARGET}"
|
||||
mkdir -p ${BUILD_DIR}
|
||||
|
||||
|
||||
CMAKE_ADDITIONAL_ARGS=""
|
||||
QEMU_ARGS=""
|
||||
|
||||
case ${TOOLCHAIN} in
|
||||
LINARO)
|
||||
expand_linaro_config
|
||||
integrate_cross
|
||||
;;
|
||||
NATIVE)
|
||||
integrate_native
|
||||
;;
|
||||
*) echo "Unknown toolchain '${TOOLCHAIN}'..."
|
||||
LINARO) expand_linaro_config ;;
|
||||
CODESCAPE) expand_codescape_config ;;
|
||||
NATIVE) QEMU_ARCH="" ;;
|
||||
*)
|
||||
echo "Unknown toolchain '${TOOLCHAIN}'..."
|
||||
exit 1
|
||||
esac
|
||||
integrate
|
||||
}
|
||||
|
||||
if [ "${CONTINUOUS_INTEGRATION}" = "true" ]; then
|
||||
|
@ -32,21 +32,28 @@ function set_arm-linux-gnueabi() {
|
||||
function set_aarch64_be-linux-gnu() {
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=aarch64_be-linux-gnu
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH="DISABLED"
|
||||
}
|
||||
|
||||
# Toolchains for big-endian, hard-float, 32-bit ARMv7 (and earlier) for GNU/Linux systems
|
||||
function set_armeb-linux-gnueabihf() {
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=armeb-linux-gnueabihf
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH="DISABLED"
|
||||
}
|
||||
|
||||
# Toolchains for big-endian, soft-float, 32-bit ARMv7 (and earlier) for GNU/Linux systems
|
||||
function set_armeb-linux-gnueabi() {
|
||||
TOOLCHAIN=LINARO
|
||||
TARGET=armeb-linux-gnueabi
|
||||
QEMU_ARCH=""
|
||||
QEMU_ARCH="DISABLED"
|
||||
}
|
||||
|
||||
|
||||
function set_mips() {
|
||||
TOOLCHAIN=CODESCAPE
|
||||
TARGET=mips-mti-linux-gnu
|
||||
QEMU_ARCH="DISABLED"
|
||||
}
|
||||
|
||||
function set_native() {
|
||||
@ -64,8 +71,13 @@ ENVIRONMENTS="
|
||||
set_armeb-linux-gnueabihf
|
||||
set_armeb-linux-gnueabi
|
||||
set_native
|
||||
set_mips
|
||||
"
|
||||
|
||||
# ENVIRONMENTS="
|
||||
# set_mips
|
||||
# "
|
||||
|
||||
for SET_ENVIRONMENT in ${ENVIRONMENTS}; do
|
||||
${SET_ENVIRONMENT}
|
||||
expand_environment_and_integrate
|
||||
|
Loading…
x
Reference in New Issue
Block a user