Add arm64 iOS support to the cmake build. BUG=https://bugs.chromium.org/p/aomedia/issues/detail?id=76 Change-Id: I6c246c0a5399e34e0eeeadc98de21cbf5b850af6
diff --git a/aom_dsp/aom_dsp.cmake b/aom_dsp/aom_dsp.cmake index 75319f9..f48683d 100644 --- a/aom_dsp/aom_dsp.cmake +++ b/aom_dsp/aom_dsp.cmake
@@ -98,6 +98,27 @@ "${AOM_ROOT}/aom_dsp/arm/subtract_neon.c" "${AOM_ROOT}/aom_dsp/arm/variance_neon.c") +if ("${AOM_TARGET_CPU}" STREQUAL "arm64") + set(AOM_DSP_COMMON_INTRIN_NEON + ${AOM_DSP_COMMON_INTRIN_NEON} + "${AOM_ROOT}/aom_dsp/arm/aom_convolve8_avg_neon.c" + "${AOM_ROOT}/aom_dsp/arm/aom_convolve8_neon.c" + "${AOM_ROOT}/aom_dsp/arm/aom_convolve_avg_neon.c" + "${AOM_ROOT}/aom_dsp/arm/aom_convolve_copy_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct16x16_1_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct16x16_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct32x32_1_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct32x32_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct4x4_1_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct4x4_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct8x8_1_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/idct8x8_add_neon.c" + "${AOM_ROOT}/aom_dsp/arm/intrapred_neon.c" + "${AOM_ROOT}/aom_dsp/arm/loopfilter_16_neon.c" + "${AOM_ROOT}/aom_dsp/arm/loopfilter_4_neon.c" + "${AOM_ROOT}/aom_dsp/arm/loopfilter_8_neon.c") +endif () + if (CONFIG_AOM_HIGHBITDEPTH) set(AOM_DSP_COMMON_ASM_SSE2 ${AOM_DSP_COMMON_ASM_SSE2}
diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake index 1afae34..70b9be0 100644 --- a/build/cmake/aom_configure.cmake +++ b/build/cmake/aom_configure.cmake
@@ -57,8 +57,9 @@ elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86") set(AOM_TARGET_CPU "x86") - elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7s") - set(AOM_TARGET_CPU "armv7s") + elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7s" OR + "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64") + set(AOM_TARGET_CPU "${CMAKE_SYSTEM_PROCESSOR}") endif () endif ()
diff --git a/build/cmake/targets/arm64.cmake b/build/cmake/targets/arm64.cmake new file mode 100644 index 0000000..5fa153f --- /dev/null +++ b/build/cmake/targets/arm64.cmake
@@ -0,0 +1,25 @@ +## +## 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. +## +set(AOM_ARCH "arm64") +set(ARCH_ARM 1) + +# Assembly flavors available for the target. +set(HAVE_NEON 1) + +# RTCD versions of assembly flavor flags ("yes" means on in rtcd.pl, not 1). +set(RTCD_ARCH_ARM "yes") +set(RTCD_HAVE_NEON "yes") + +foreach (config_var ${AOM_CONFIG_VARS}) + if (${${config_var}}) + set(RTCD_${config_var} yes) + endif () +endforeach ()
diff --git a/build/cmake/targets/rtcd_templates/arm64.rtcd.cmake b/build/cmake/targets/rtcd_templates/arm64.rtcd.cmake new file mode 100644 index 0000000..a2b12a3 --- /dev/null +++ b/build/cmake/targets/rtcd_templates/arm64.rtcd.cmake
@@ -0,0 +1,124 @@ +## +## 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. +## +ARCH_ARM=${RTCD_ARCH_ARM} +HAVE_NEON=${RTCD_HAVE_NEON} + +CONFIG_ACCOUNTING=${RTCD_CONFIG_ACCOUNTING} +CONFIG_INSPECTION=${RTCD_CONFIG_INSPECTION} +CONFIG_ADAPT_SCAN=${RTCD_CONFIG_ADAPT_SCAN} +CONFIG_ALT_INTRA=${RTCD_CONFIG_ALT_INTRA} +CONFIG_ANS=${RTCD_CONFIG_ANS} +CONFIG_AOM_HIGHBITDEPTH=${RTCD_CONFIG_AOM_HIGHBITDEPTH} +CONFIG_AOM_QM=${RTCD_CONFIG_AOM_QM} +CONFIG_AV1=${RTCD_CONFIG_AV1} +CONFIG_AV1_DECODER=${RTCD_CONFIG_AV1_DECODER} +CONFIG_AV1_ENCODER=${RTCD_CONFIG_AV1_ENCODER} +CONFIG_BIG_ENDIAN=${RTCD_CONFIG_BIG_ENDIAN} +CONFIG_BITSTREAM_DEBUG=${RTCD_CONFIG_BITSTREAM_DEBUG} +CONFIG_CB4X4=${RTCD_CONFIG_CB4X4} +CONFIG_CDEF=${RTCD_CONFIG_CDEF} +CONFIG_CHROMA_2X2=${RTCD_CONFIG_CHROMA_2X2} +CONFIG_CODEC_SRCS=${RTCD_CONFIG_CODEC_SRCS} +CONFIG_COEFFICIENT_RANGE_CHECKING=${RTCD_CONFIG_COEFFICIENT_RANGE_CHECKING} +CONFIG_COEF_INTERLEAVE=${RTCD_CONFIG_COEF_INTERLEAVE} +CONFIG_COMPOUND_SEGMENT=${RTCD_CONFIG_COMPOUND_SEGMENT} +CONFIG_CONVOLVE_ROUND=${RTCD_CONFIG_CONVOLVE_ROUND} +CONFIG_DAALA_DIST=${RTCD_CONFIG_DAALA_DIST} +CONFIG_DAALA_EC=${RTCD_CONFIG_DAALA_EC} +CONFIG_DEBUG=${RTCD_CONFIG_DEBUG} +CONFIG_DEBUG_LIBS=${RTCD_CONFIG_DEBUG_LIBS} +CONFIG_DECODERS=${RTCD_CONFIG_DECODERS} +CONFIG_DECODE_PERF_TESTS=${RTCD_CONFIG_DECODE_PERF_TESTS} +CONFIG_DELTA_Q=${RTCD_CONFIG_DELTA_Q} +CONFIG_DEPENDENCY_TRACKING=${RTCD_CONFIG_DEPENDENCY_TRACKING} +CONFIG_DEPENDENT_HORZTILES=${RTCD_CONFIG_DEPENDENT_HORZTILES} +CONFIG_DUAL_FILTER=${RTCD_CONFIG_DUAL_FILTER} +CONFIG_EC_ADAPT=${RTCD_CONFIG_EC_ADAPT} +CONFIG_EC_MULTISYMBOL=${RTCD_CONFIG_EC_MULTISYMBOL} +CONFIG_EMULATE_HARDWARE=${RTCD_CONFIG_EMULATE_HARDWARE} +CONFIG_ENCODERS=${RTCD_CONFIG_ENCODERS} +CONFIG_ENCODE_PERF_TESTS=${RTCD_CONFIG_ENCODE_PERF_TESTS} +CONFIG_ENTROPY=${RTCD_CONFIG_ENTROPY} +CONFIG_ENTROPY_STATS=${RTCD_CONFIG_ENTROPY_STATS} +CONFIG_ERROR_CONCEALMENT=${RTCD_CONFIG_ERROR_CONCEALMENT} +CONFIG_EXPERIMENTAL=${RTCD_CONFIG_EXPERIMENTAL} +CONFIG_EXTERNAL_BUILD=${RTCD_CONFIG_EXTERNAL_BUILD} +CONFIG_EXT_INTER=${RTCD_CONFIG_EXT_INTER} +CONFIG_EXT_INTRA=${RTCD_CONFIG_EXT_INTRA} +CONFIG_EXT_PARTITION=${RTCD_CONFIG_EXT_PARTITION} +CONFIG_EXT_PARTITION_TYPES=${RTCD_CONFIG_EXT_PARTITION_TYPES} +CONFIG_EXT_REFS=${RTCD_CONFIG_EXT_REFS} +CONFIG_EXT_TILE=${RTCD_CONFIG_EXT_TILE} +CONFIG_EXT_TX=${RTCD_CONFIG_EXT_TX} +CONFIG_FILTER_7BIT=${RTCD_CONFIG_FILTER_7BIT} +CONFIG_FILTER_INTRA=${RTCD_CONFIG_FILTER_INTRA} +CONFIG_FP_MB_STATS=${RTCD_CONFIG_FP_MB_STATS} +CONFIG_FRAME_SIZE=${RTCD_CONFIG_FRAME_SIZE} +CONFIG_GCC=${RTCD_CONFIG_GCC} +CONFIG_GCOV=${RTCD_CONFIG_GCOV} +CONFIG_GLOBAL_MOTION=${RTCD_CONFIG_GLOBAL_MOTION} +CONFIG_GPROF=${RTCD_CONFIG_GPROF} +CONFIG_INSTALL_BINS=${RTCD_CONFIG_INSTALL_BINS} +CONFIG_INSTALL_DOCS=${RTCD_CONFIG_INSTALL_DOCS} +CONFIG_INSTALL_LIBS=${RTCD_CONFIG_INSTALL_LIBS} +CONFIG_INSTALL_SRCS=${RTCD_CONFIG_INSTALL_SRCS} +CONFIG_INTERNAL_STATS=${RTCD_CONFIG_INTERNAL_STATS} +CONFIG_INTRA_INTERP=${RTCD_CONFIG_INTRA_INTERP} +CONFIG_LIBYUV=${RTCD_CONFIG_LIBYUV} +CONFIG_LOOPFILTERING_ACROSS_TILES=${RTCD_CONFIG_LOOPFILTERING_ACROSS_TILES} +CONFIG_LOOP_RESTORATION=${RTCD_CONFIG_LOOP_RESTORATION} +CONFIG_LOWBITDEPTH=${RTCD_CONFIG_LOWBITDEPTH} +CONFIG_LV_MAP=${RTCD_CONFIG_LV_MAP} +CONFIG_MASKED_TX=${RTCD_CONFIG_MASKED_TX} +CONFIG_MOTION_VAR=${RTCD_CONFIG_MOTION_VAR} +CONFIG_MSVS=${RTCD_CONFIG_MSVS} +CONFIG_MULTITHREAD=${RTCD_CONFIG_MULTITHREAD} +CONFIG_MV_COMPRESS=${RTCD_CONFIG_MV_COMPRESS} +CONFIG_NCOBMC=${RTCD_CONFIG_NCOBMC} +CONFIG_NEW_QUANT=${RTCD_CONFIG_NEW_QUANT} +CONFIG_NEW_TOKENSET=${RTCD_CONFIG_NEW_TOKENSET} +CONFIG_ONTHEFLY_BITPACKING=${RTCD_CONFIG_ONTHEFLY_BITPACKING} +CONFIG_OS_SUPPORT=${RTCD_CONFIG_OS_SUPPORT} +CONFIG_PALETTE=${RTCD_CONFIG_PALETTE} +CONFIG_PALETTE_THROUGHPUT=${RTCD_CONFIG_PALETTE_THROUGHPUT} +CONFIG_PARALLEL_DEBLOCKING=${RTCD_CONFIG_PARALLEL_DEBLOCKING} +CONFIG_PIC=${RTCD_CONFIG_PIC} +CONFIG_POSTPROC=${RTCD_CONFIG_POSTPROC} +CONFIG_POSTPROC_VISUALIZER=${RTCD_CONFIG_POSTPROC_VISUALIZER} +CONFIG_PVQ=${RTCD_CONFIG_PVQ} +CONFIG_RAWBITS=${RTCD_CONFIG_RAWBITS} +CONFIG_RD_DEBUG=${RTCD_CONFIG_RD_DEBUG} +CONFIG_REALTIME_ONLY=${RTCD_CONFIG_REALTIME_ONLY} +CONFIG_RECT_TX=${RTCD_CONFIG_RECT_TX} +CONFIG_REFERENCE_BUFFER=${RTCD_CONFIG_REFERENCE_BUFFER} +CONFIG_REF_ADAPT=${RTCD_CONFIG_REF_ADAPT} +CONFIG_REF_MV=${RTCD_CONFIG_REF_MV} +CONFIG_RUNTIME_CPU_DETECT=${RTCD_CONFIG_RUNTIME_CPU_DETECT} +CONFIG_RVCT=${RTCD_CONFIG_RVCT} +CONFIG_SHARED=${RTCD_CONFIG_SHARED} +CONFIG_SIZE_LIMIT=${RTCD_CONFIG_SIZE_LIMIT} +CONFIG_SMALL=${RTCD_CONFIG_SMALL} +CONFIG_SPATIAL_RESAMPLING=${RTCD_CONFIG_SPATIAL_RESAMPLING} +CONFIG_STATIC=${RTCD_CONFIG_STATIC} +CONFIG_STATIC_MSVCRT=${RTCD_CONFIG_STATIC_MSVCRT} +CONFIG_SUB8X8_MC=${RTCD_CONFIG_SUB8X8_MC} +CONFIG_SUPERTX=${RTCD_CONFIG_SUPERTX} +CONFIG_TEMPMV_SIGNALING=${RTCD_CONFIG_TEMPMV_SIGNALING} +CONFIG_TILE_GROUPS=${RTCD_CONFIG_TILE_GROUPS} +CONFIG_TPL_MV=${RTCD_CONFIG_TPL_MV} +CONFIG_TRIPRED=${RTCD_CONFIG_TRIPRED} +CONFIG_TX64X64=${RTCD_CONFIG_TX64X64} +CONFIG_UNIT_TESTS=${RTCD_CONFIG_UNIT_TESTS} +CONFIG_UNPOISON_PARTITION_CTX=${RTCD_CONFIG_UNPOISON_PARTITION_CTX} +CONFIG_VAR_TX=${RTCD_CONFIG_VAR_TX} +CONFIG_WARPED_MOTION=${RTCD_CONFIG_WARPED_MOTION} +CONFIG_WEBM_IO=${RTCD_CONFIG_WEBM_IO} +CONFIG_XIPHRC=${RTCD_CONFIG_XIPHRC}
diff --git a/build/cmake/toolchains/arm-ios-common.cmake b/build/cmake/toolchains/arm-ios-common.cmake new file mode 100644 index 0000000..1e98928 --- /dev/null +++ b/build/cmake/toolchains/arm-ios-common.cmake
@@ -0,0 +1,36 @@ +## +## 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_ARM_IOS_COMMON_CMAKE_) +set(AOM_BUILD_CMAKE_ARM_IOS_COMMON_CMAKE_ 1) + +set(CMAKE_SYSTEM_NAME "Darwin") +set(CMAKE_OSX_SYSROOT iphoneos) +set(CMAKE_C_COMPILER clang) +set(CMAKE_C_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_CXX_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") + +if (NOT AOM_MIN_IOS_VERSION) + set(AOM_MIN_IOS_VERSION 9.1) +endif () +set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${AOM_MIN_IOS_VERSION}) + +# Assembler sources must be converted for ARM iOS targets. +set(AOM_ADS2GAS_REQUIRED 1) +set(AOM_ADS2GAS "${CMAKE_CURRENT_SOURCE_DIR}/build/make/ads2gas_apple.pl") +set(AOM_GAS_EXT "S") + +# No runtime cpu detect for arm*-ios targets. +set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE BOOL "") + +# TODO(tomfinegan): Handle bit code embedding. + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_
diff --git a/build/cmake/toolchains/arm64-ios.cmake b/build/cmake/toolchains/arm64-ios.cmake new file mode 100644 index 0000000..434809d --- /dev/null +++ b/build/cmake/toolchains/arm64-ios.cmake
@@ -0,0 +1,24 @@ +## +## 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_IOS_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_ 1) + +if (XCODE) + # TODO(tomfinegan): Handle arm builds in Xcode. + message(FATAL_ERROR "This toolchain does not support Xcode.") +endif () + +set(CMAKE_SYSTEM_PROCESSOR "arm64") +set(CMAKE_OSX_ARCHITECTURES "arm64") + +include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_
diff --git a/build/cmake/toolchains/armv7s-ios.cmake b/build/cmake/toolchains/armv7s-ios.cmake index a81f5ae..08a0a37 100644 --- a/build/cmake/toolchains/armv7s-ios.cmake +++ b/build/cmake/toolchains/armv7s-ios.cmake
@@ -8,27 +8,18 @@ ## 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_ARMV7S_IOS_CMAKE_) -set(AOM_BUILD_CMAKE_ARMV7S_IOS_CMAKE_ 1) +if (NOT AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_ 1) if (XCODE) # TODO(tomfinegan): Handle arm builds in Xcode. message(FATAL_ERROR "This toolchain does not support Xcode.") endif () -set(CMAKE_SYSTEM_NAME "Darwin") set(CMAKE_SYSTEM_PROCESSOR "armv7s") set(CMAKE_OSX_ARCHITECTURES "armv7s") -set(CMAKE_OSX_SYSROOT iphoneos) -set(CMAKE_C_COMPILER clang) -set(CMAKE_C_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") -set(CMAKE_CXX_COMPILER clang++) -set(CMAKE_CXX_COMPILER_ARG1 "-arch ${CMAKE_SYSTEM_PROCESSOR}") -if (NOT AOM_MIN_IOS_VERSION) - set(AOM_MIN_IOS_VERSION 9.1) -endif () -set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${AOM_MIN_IOS_VERSION}) +include("${CMAKE_CURRENT_LIST_DIR}/arm-ios-common.cmake") # No intrinsics flag required for armv7s-ios. set(AOM_NEON_INTRIN_FLAG "") @@ -36,13 +27,8 @@ # No runtime cpu detect for armv7s-ios. set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE BOOL "") -# Assembler sources must be converted for ARM iOS targets. -set(AOM_ADS2GAS_REQUIRED 1) -set(AOM_ADS2GAS "${CMAKE_CURRENT_SOURCE_DIR}/build/make/ads2gas_apple.pl") -set(AOM_GAS_EXT "S") - # RTCD generation requires --disable-media for armv7s-ios. set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-media) string(STRIP AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS}) -endif () # AOM_BUILD_CMAKE_ARMV7S_IOS_CMAKE_ +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_