From f47266d965e2505708d48007c04f94ea81140f2a Mon Sep 17 00:00:00 2001 From: Tom Finegan Date: Tue, 28 Mar 2017 18:00:09 -0700 Subject: [PATCH] Add basic armv7 linux support to the cmake build. Requires new cmake toolchain file armv7-linux-gcc.cmake: $ cmake path/to/aom -DCMAKE_TOOLCHAIN_FILE=path/to/aom/build/cmake/toolchains/armv7-linux-gcc.cmake Above requires arm-linux-gnueabihf-gcc toolchain is installed and its bin dir added to PATH. BUG=https://bugs.chromium.org/p/aomedia/issues/detail?id=76 Change-Id: Id2d0022fd5b4615fef7ea0ef38980cbdfd957c0e --- build/cmake/aom_configure.cmake | 4 ++ build/cmake/toolchains/armv7-linux-gcc.cmake | 40 ++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 build/cmake/toolchains/armv7-linux-gcc.cmake diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake index 1664330b0..6000062f3 100644 --- a/build/cmake/aom_configure.cmake +++ b/build/cmake/aom_configure.cmake @@ -97,6 +97,10 @@ elseif ("${AOM_TARGET_CPU}" MATCHES "arm") if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin") set(AS_EXECUTABLE as) set(AOM_AS_FLAGS -arch ${AOM_TARGET_CPU} -isysroot ${CMAKE_OSX_SYSROOT}) + elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux") + if (NOT AS_EXECUTABLE) + message(FATAL_ERROR "Assembler missing for ${AOM_TARGET_CPU}-Linux.") + endif () endif () if (NOT AS_EXECUTABLE) message(FATAL_ERROR diff --git a/build/cmake/toolchains/armv7-linux-gcc.cmake b/build/cmake/toolchains/armv7-linux-gcc.cmake new file mode 100644 index 000000000..b723631c8 --- /dev/null +++ b/build/cmake/toolchains/armv7-linux-gcc.cmake @@ -0,0 +1,40 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_ 1) + +set(CMAKE_SYSTEM_NAME "Linux") + +# TODO(tomfinegan): Allow control of compiler prefix (aka $CROSS). +set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) +set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) +set(AS_EXECUTABLE arm-linux-gnueabihf-as) + +# TODO(tomfinegan): Handle soft float. +set(CMAKE_C_COMPILER_ARG1 "-march=armv7-a -mfloat-abi=hard -mfpu=neon") +set(CMAKE_CXX_COMPILER_ARG1 "-march=armv7-a -mfloat-abi=hard -mfpu=neon") +set(AOM_AS_FLAGS + --defsym ARCHITECTURE=7 -march=armv7-a -mfloat-abi=hard -mfpu=neon) + +set(CMAKE_SYSTEM_PROCESSOR "armv7") + +# No intrinsics flag required for armv7-linux-gcc. +set(AOM_NEON_INTRIN_FLAG "") + +# Assembler sources must be converted for armv7-linux-gcc targets. +set(AOM_ADS2GAS_REQUIRED 1) +set(AOM_ADS2GAS "${CMAKE_CURRENT_SOURCE_DIR}/build/make/ads2gas.pl") +set(AOM_GAS_EXT "S") + +# No runtime cpu detect for armv7-linux-gcc. +set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE BOOL "") + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_