From 48d1ed81ce3ed518f05bfe9fff82de2fd4b16458 Mon Sep 17 00:00:00 2001 From: Tom Finegan Date: Wed, 29 Mar 2017 10:56:18 -0700 Subject: [PATCH] Add basic arm64 linux support to the cmake build. Requires new cmake toolchain file arm64-linux-gcc.cmake: $ cmake path/to/aom -DCMAKE_TOOLCHAIN_FILE=path/to/aom/build/cmake/toolchains/arm64-linux-gcc.cmake Above requires aarch64-linux-gnu-gcc toolchain is installed and its bin dir added to PATH. BUG=https://bugs.chromium.org/p/aomedia/issues/detail?id=76 Change-Id: I6c7e297a67415008583b7ac2cd8aea528787e6d0 --- build/cmake/aom_configure.cmake | 5 ++-- build/cmake/toolchains/arm64-linux-gcc.cmake | 31 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 build/cmake/toolchains/arm64-linux-gcc.cmake diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake index 6000062f3..c5476d3d4 100644 --- a/build/cmake/aom_configure.cmake +++ b/build/cmake/aom_configure.cmake @@ -98,9 +98,8 @@ elseif ("${AOM_TARGET_CPU}" MATCHES "arm") 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 () + # arm linux assembler settings controlled by + # build/cmake/toolchains/arm*-linux*.cmake endif () if (NOT AS_EXECUTABLE) message(FATAL_ERROR diff --git a/build/cmake/toolchains/arm64-linux-gcc.cmake b/build/cmake/toolchains/arm64-linux-gcc.cmake new file mode 100644 index 000000000..dd0df53f7 --- /dev/null +++ b/build/cmake/toolchains/arm64-linux-gcc.cmake @@ -0,0 +1,31 @@ +## +## 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_ARM64_LINUX_GCC_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_ 1) + +set(CMAKE_SYSTEM_NAME "Linux") + +# TODO(tomfinegan): Allow control of compiler prefix (aka $CROSS). +set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) +set(AS_EXECUTABLE arm-linux-gnueabihf-as) +set(CMAKE_C_COMPILER_ARG1 "-march=armv8-a") +set(CMAKE_CXX_COMPILER_ARG1 "-march=armv8-a") +set(AOM_AS_FLAGS "-march=armv8-a") +set(CMAKE_SYSTEM_PROCESSOR "arm64") + +# No intrinsics flag required for arm64-linux-gcc. +set(AOM_NEON_INTRIN_FLAG "") + +# No runtime cpu detect for arm64-linux-gcc. +set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE BOOL "") + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_