#
# 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(AOM_AOM_DSP_AOM_DSP_CMAKE_)
  return()
endif() # AOM_AOM_DSP_AOM_DSP_CMAKE_
set(AOM_AOM_DSP_AOM_DSP_CMAKE_ 1)

list(APPEND AOM_DSP_COMMON_SOURCES
            "${AOM_ROOT}/aom_dsp/aom_convolve.c"
            "${AOM_ROOT}/aom_dsp/aom_dsp_common.h"
            "${AOM_ROOT}/aom_dsp/aom_filter.h"
            "${AOM_ROOT}/aom_dsp/aom_simd.h"
            "${AOM_ROOT}/aom_dsp/aom_simd_inline.h"
            "${AOM_ROOT}/aom_dsp/bitreader_buffer.c"
            "${AOM_ROOT}/aom_dsp/bitreader_buffer.h"
            "${AOM_ROOT}/aom_dsp/bitwriter_buffer.c"
            "${AOM_ROOT}/aom_dsp/bitwriter_buffer.h"
            "${AOM_ROOT}/aom_dsp/blend.h"
            "${AOM_ROOT}/aom_dsp/blend_a64_hmask.c"
            "${AOM_ROOT}/aom_dsp/blend_a64_mask.c"
            "${AOM_ROOT}/aom_dsp/blend_a64_vmask.c"
            "${AOM_ROOT}/aom_dsp/entcode.c"
            "${AOM_ROOT}/aom_dsp/entcode.h"
            "${AOM_ROOT}/aom_dsp/grain_params.h"
            "${AOM_ROOT}/aom_dsp/intrapred.c"
            "${AOM_ROOT}/aom_dsp/intrapred_common.h"
            "${AOM_ROOT}/aom_dsp/loopfilter.c"
            "${AOM_ROOT}/aom_dsp/odintrin.c"
            "${AOM_ROOT}/aom_dsp/odintrin.h"
            "${AOM_ROOT}/aom_dsp/prob.h"
            "${AOM_ROOT}/aom_dsp/recenter.h"
            "${AOM_ROOT}/aom_dsp/simd/v128_intrinsics.h"
            "${AOM_ROOT}/aom_dsp/simd/v128_intrinsics_c.h"
            "${AOM_ROOT}/aom_dsp/simd/v256_intrinsics.h"
            "${AOM_ROOT}/aom_dsp/simd/v256_intrinsics_c.h"
            "${AOM_ROOT}/aom_dsp/simd/v64_intrinsics.h"
            "${AOM_ROOT}/aom_dsp/simd/v64_intrinsics_c.h"
            "${AOM_ROOT}/aom_dsp/txfm_common.h"
            "${AOM_ROOT}/aom_dsp/x86/convolve_common_intrin.h")

list(APPEND AOM_DSP_COMMON_ASM_SSE2
            "${AOM_ROOT}/aom_dsp/x86/intrapred_asm_sse2.asm")
if(CONFIG_AV1_HIGHBITDEPTH)
  list(APPEND AOM_DSP_COMMON_ASM_SSE2
              "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_8t_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_bilinear_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_asm_sse2.asm")
endif()

list(APPEND AOM_DSP_COMMON_INTRIN_SSE2
            "${AOM_ROOT}/aom_dsp/x86/aom_convolve_copy_sse2.c"
            "${AOM_ROOT}/aom_dsp/x86/convolve.h"
            "${AOM_ROOT}/aom_dsp/x86/convolve_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_sse2.c"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_x86.h"
            "${AOM_ROOT}/aom_dsp/x86/loopfilter_sse2.c"
            "${AOM_ROOT}/aom_dsp/x86/lpf_common_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/mem_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/transpose_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/txfm_common_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/sum_squares_sse2.h"
            "${AOM_ROOT}/aom_dsp/x86/bitdepth_conversion_sse2.h")

list(APPEND AOM_DSP_COMMON_ASM_SSSE3
            "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_8t_ssse3.asm"
            "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_bilinear_ssse3.asm")

list(APPEND AOM_DSP_COMMON_INTRIN_SSSE3
            "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_8t_intrin_ssse3.c"
            "${AOM_ROOT}/aom_dsp/x86/convolve_ssse3.h"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_ssse3.c")

list(APPEND AOM_DSP_COMMON_INTRIN_SSE4_1
            "${AOM_ROOT}/aom_dsp/x86/blend_mask_sse4.h"
            "${AOM_ROOT}/aom_dsp/x86/blend_a64_hmask_sse4.c"
            "${AOM_ROOT}/aom_dsp/x86/blend_a64_mask_sse4.c"
            "${AOM_ROOT}/aom_dsp/x86/blend_a64_vmask_sse4.c"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_sse4.c"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_utils.h")

list(APPEND AOM_DSP_COMMON_INTRIN_AVX2
            "${AOM_ROOT}/aom_dsp/x86/aom_convolve_copy_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_8t_intrin_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/common_avx2.h"
            "${AOM_ROOT}/aom_dsp/x86/txfm_common_avx2.h"
            "${AOM_ROOT}/aom_dsp/x86/convolve_avx2.h"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/loopfilter_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/blend_a64_mask_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/bitdepth_conversion_avx2.h")

if(CONFIG_SVT_AV1)
  list(APPEND AOM_DSP_COMMON_INTRIN_AVX2
              "${AOM_ROOT}/third_party/SVT-AV1/convolve_2d_avx2.h"
              "${AOM_ROOT}/third_party/SVT-AV1/convolve_avx2.h"
              "${AOM_ROOT}/third_party/SVT-AV1/EbMemory_AVX2.h"
              "${AOM_ROOT}/third_party/SVT-AV1/EbMemory_SSE4_1.h"
              "${AOM_ROOT}/third_party/SVT-AV1/synonyms.h")
endif()

list(APPEND AOM_DSP_COMMON_INTRIN_NEON
            "${AOM_ROOT}/aom_dsp/arm/aom_convolve_copy_neon.c"
            "${AOM_ROOT}/aom_dsp/arm/aom_convolve8_neon.c"
            "${AOM_ROOT}/aom_dsp/arm/aom_scaled_convolve8_neon.c"
            "${AOM_ROOT}/aom_dsp/arm/loopfilter_neon.c"
            "${AOM_ROOT}/aom_dsp/arm/intrapred_neon.c"
            "${AOM_ROOT}/aom_dsp/arm/blend_a64_mask_neon.c")

list(APPEND AOM_DSP_COMMON_INTRIN_NEON_DOTPROD
            "${AOM_ROOT}/aom_dsp/arm/aom_convolve8_neon_dotprod.c"
            "${AOM_ROOT}/aom_dsp/arm/aom_scaled_convolve8_neon_dotprod.c")

list(APPEND AOM_DSP_COMMON_INTRIN_NEON_I8MM
            "${AOM_ROOT}/aom_dsp/arm/aom_convolve8_neon_i8mm.c"
            "${AOM_ROOT}/aom_dsp/arm/aom_scaled_convolve8_neon_i8mm.c")

if(CONFIG_AV1_HIGHBITDEPTH)
  list(APPEND AOM_DSP_COMMON_INTRIN_SSE2
              "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_sse2.c")

  list(APPEND AOM_DSP_COMMON_INTRIN_SSSE3
              "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_ssse3.c")

  list(APPEND AOM_DSP_COMMON_INTRIN_AVX2
              "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_avx2.c")

  list(APPEND AOM_DSP_COMMON_INTRIN_NEON
              "${AOM_ROOT}/aom_dsp/arm/highbd_blend_a64_hmask_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/highbd_blend_a64_mask_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/highbd_blend_a64_vmask_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/highbd_convolve8_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/highbd_intrapred_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/highbd_loopfilter_neon.c")

  list(APPEND AOM_DSP_COMMON_INTRIN_SVE
              "${AOM_ROOT}/aom_dsp/arm/highbd_convolve8_sve.c")
endif()

if(CONFIG_AV1_DECODER)
  list(APPEND AOM_DSP_DECODER_SOURCES
              "${AOM_ROOT}/aom_dsp/binary_codes_reader.c"
              "${AOM_ROOT}/aom_dsp/binary_codes_reader.h"
              "${AOM_ROOT}/aom_dsp/bitreader.c"
              "${AOM_ROOT}/aom_dsp/bitreader.h" "${AOM_ROOT}/aom_dsp/entdec.c"
              "${AOM_ROOT}/aom_dsp/entdec.h")
endif()

if(CONFIG_AV1_ENCODER)
  list(APPEND AOM_DSP_ENCODER_SOURCES
              "${AOM_ROOT}/aom_dsp/avg.c"
              "${AOM_ROOT}/aom_dsp/bitwriter.c"
              "${AOM_ROOT}/aom_dsp/bitwriter.h"
              "${AOM_ROOT}/aom_dsp/blk_sse_sum.c"
              "${AOM_ROOT}/aom_dsp/entenc.c"
              "${AOM_ROOT}/aom_dsp/entenc.h"
              "${AOM_ROOT}/aom_dsp/fft.c"
              "${AOM_ROOT}/aom_dsp/fft_common.h"
              "${AOM_ROOT}/aom_dsp/fwd_txfm.c"
              "${AOM_ROOT}/aom_dsp/psnr.c"
              "${AOM_ROOT}/aom_dsp/psnr.h"
              "${AOM_ROOT}/aom_dsp/quantize.c"
              "${AOM_ROOT}/aom_dsp/quantize.h"
              "${AOM_ROOT}/aom_dsp/sad.c"
              "${AOM_ROOT}/aom_dsp/sad_av1.c"
              "${AOM_ROOT}/aom_dsp/subtract.c"
              "${AOM_ROOT}/aom_dsp/sse.c"
              "${AOM_ROOT}/aom_dsp/ssim.c"
              "${AOM_ROOT}/aom_dsp/ssim.h"
              "${AOM_ROOT}/aom_dsp/sum_squares.c"
              "${AOM_ROOT}/aom_dsp/variance.c"
              "${AOM_ROOT}/aom_dsp/variance.h")

  if(CONFIG_HIGHWAY)
    list(APPEND AOM_DSP_ENCODER_SOURCES "${AOM_ROOT}/aom_dsp/reduce_sum_hwy.h"
                "${AOM_ROOT}/aom_dsp/sad_hwy.h")
  endif()

  # Flow estimation library and grain/noise table/model.
  if(NOT CONFIG_REALTIME_ONLY)
    list(APPEND AOM_DSP_ENCODER_SOURCES
                "${AOM_ROOT}/aom_dsp/pyramid.c"
                "${AOM_ROOT}/aom_dsp/binary_codes_writer.c"
                "${AOM_ROOT}/aom_dsp/binary_codes_writer.h"
                "${AOM_ROOT}/aom_dsp/flow_estimation/corner_detect.c"
                "${AOM_ROOT}/aom_dsp/flow_estimation/corner_match.c"
                "${AOM_ROOT}/aom_dsp/flow_estimation/disflow.c"
                "${AOM_ROOT}/aom_dsp/flow_estimation/flow_estimation.c"
                "${AOM_ROOT}/aom_dsp/grain_table.c"
                "${AOM_ROOT}/aom_dsp/grain_table.h"
                "${AOM_ROOT}/aom_dsp/noise_model.c"
                "${AOM_ROOT}/aom_dsp/noise_model.h"
                "${AOM_ROOT}/aom_dsp/noise_util.c"
                "${AOM_ROOT}/aom_dsp/noise_util.h"
                "${AOM_ROOT}/aom_dsp/flow_estimation/ransac.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_SSE4_1
                "${AOM_ROOT}/aom_dsp/flow_estimation/x86/corner_match_sse4.c"
                "${AOM_ROOT}/aom_dsp/flow_estimation/x86/disflow_sse4.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_AVX2
                "${AOM_ROOT}/aom_dsp/flow_estimation/x86/corner_match_avx2.c"
                "${AOM_ROOT}/aom_dsp/flow_estimation/x86/disflow_avx2.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_NEON
                "${AOM_ROOT}/aom_dsp/flow_estimation/arm/disflow_neon.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_SVE
                "${AOM_ROOT}/aom_dsp/flow_estimation/arm/disflow_sve.c")
  endif()

  list(APPEND AOM_DSP_ENCODER_ASM_SSE2 "${AOM_ROOT}/aom_dsp/x86/sad4d_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/sad_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/subtract_sse2.asm")

  list(APPEND AOM_DSP_ENCODER_ASM_SSE2_X86_64
              "${AOM_ROOT}/aom_dsp/x86/ssim_sse2_x86_64.asm")

  list(APPEND AOM_DSP_ENCODER_INTRIN_SSE2
              "${AOM_ROOT}/aom_dsp/x86/avg_intrin_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/fft_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/fwd_txfm_impl_sse2.h"
              "${AOM_ROOT}/aom_dsp/x86/fwd_txfm_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/fwd_txfm_sse2.h"
              "${AOM_ROOT}/aom_dsp/x86/quantize_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/quantize_x86.h"
              "${AOM_ROOT}/aom_dsp/x86/blk_sse_sum_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/sum_squares_sse2.c"
              "${AOM_ROOT}/aom_dsp/x86/variance_sse2.c")

  list(APPEND AOM_DSP_ENCODER_ASM_SSSE3
              "${AOM_ROOT}/aom_dsp/x86/subpel_variance_ssse3.asm")

  list(APPEND AOM_DSP_ENCODER_ASM_SSSE3_X86_64
              "${AOM_ROOT}/aom_dsp/x86/fwd_txfm_ssse3_x86_64.asm"
              "${AOM_ROOT}/aom_dsp/x86/quantize_ssse3_x86_64.asm")

  list(APPEND AOM_DSP_ENCODER_INTRIN_AVX2
              "${AOM_ROOT}/aom_dsp/x86/avg_intrin_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/fft_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/masked_sad_intrin_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/subtract_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/quantize_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sad4d_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sad_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sad_impl_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/variance_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sse_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/variance_impl_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/obmc_sad_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/obmc_variance_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/blk_sse_sum_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sum_squares_avx2.c")

  if(CONFIG_HIGHWAY)
    list(APPEND AOM_DSP_ENCODER_INTRIN_AVX2
                "${AOM_ROOT}/aom_dsp/x86/sad_hwy_avx2.cc")
    list(APPEND AOM_DSP_ENCODER_INTRIN_AVX512
                "${AOM_ROOT}/aom_dsp/x86/sad_hwy_avx512.cc")
    list(REMOVE_ITEM AOM_DSP_ENCODER_INTRIN_AVX2
                     "${AOM_ROOT}/aom_dsp/x86/sad_impl_avx2.c")
  endif()

  list(APPEND AOM_DSP_ENCODER_INTRIN_AVX
              "${AOM_ROOT}/aom_dsp/x86/aom_quantize_avx.c")

  list(APPEND AOM_DSP_ENCODER_INTRIN_SSSE3
              "${AOM_ROOT}/aom_dsp/x86/masked_sad_intrin_ssse3.h"
              "${AOM_ROOT}/aom_dsp/x86/masked_sad_intrin_ssse3.c"
              "${AOM_ROOT}/aom_dsp/x86/masked_variance_intrin_ssse3.h"
              "${AOM_ROOT}/aom_dsp/x86/masked_variance_intrin_ssse3.c"
              "${AOM_ROOT}/aom_dsp/x86/quantize_ssse3.c"
              "${AOM_ROOT}/aom_dsp/x86/variance_impl_ssse3.c"
              "${AOM_ROOT}/aom_dsp/x86/variance_ssse3.c")

  list(APPEND AOM_DSP_ENCODER_INTRIN_SSE4_1
              "${AOM_ROOT}/aom_dsp/x86/avg_intrin_sse4.c"
              "${AOM_ROOT}/aom_dsp/x86/sse_sse4.c"
              "${AOM_ROOT}/aom_dsp/x86/obmc_sad_sse4.c"
              "${AOM_ROOT}/aom_dsp/x86/obmc_variance_sse4.c")

  list(APPEND AOM_DSP_ENCODER_INTRIN_NEON
              "${AOM_ROOT}/aom_dsp/arm/avg_pred_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/fwd_txfm_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/sadxd_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/sad_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/masked_sad_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/subpel_variance_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/variance_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/hadamard_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/avg_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/obmc_variance_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/obmc_sad_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/sse_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/subtract_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/sum_squares_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/blk_sse_sum_neon.c")

  list(APPEND AOM_DSP_ENCODER_INTRIN_NEON_DOTPROD
              "${AOM_ROOT}/aom_dsp/arm/sad_neon_dotprod.c"
              "${AOM_ROOT}/aom_dsp/arm/sadxd_neon_dotprod.c"
              "${AOM_ROOT}/aom_dsp/arm/sse_neon_dotprod.c"
              "${AOM_ROOT}/aom_dsp/arm/sum_squares_neon_dotprod.c"
              "${AOM_ROOT}/aom_dsp/arm/variance_neon_dotprod.c")

  list(APPEND AOM_DSP_ENCODER_INTRIN_SVE "${AOM_ROOT}/aom_dsp/arm/avg_sve.c"
              "${AOM_ROOT}/aom_dsp/arm/blk_sse_sum_sve.c"
              "${AOM_ROOT}/aom_dsp/arm/sum_squares_sve.c")

  if(CONFIG_AV1_HIGHBITDEPTH)
    list(APPEND AOM_DSP_ENCODER_ASM_SSE2
                "${AOM_ROOT}/aom_dsp/x86/highbd_sad4d_sse2.asm"
                "${AOM_ROOT}/aom_dsp/x86/highbd_sad_sse2.asm"
                "${AOM_ROOT}/aom_dsp/x86/highbd_subpel_variance_impl_sse2.asm"
                "${AOM_ROOT}/aom_dsp/x86/highbd_variance_impl_sse2.asm")

    list(APPEND AOM_DSP_ENCODER_INTRIN_SSE2
                "${AOM_ROOT}/aom_dsp/x86/highbd_adaptive_quantize_sse2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_quantize_intrin_sse2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_subtract_sse2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_variance_sse2.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_AVX2
                "${AOM_ROOT}/aom_dsp/x86/highbd_adaptive_quantize_avx2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_quantize_intrin_avx2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_sad_avx2.c"
                "${AOM_ROOT}/aom_dsp/x86/highbd_variance_avx2.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_SSE4_1
                "${AOM_ROOT}/aom_dsp/x86/highbd_variance_sse4.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_NEON
                "${AOM_ROOT}/aom_dsp/arm/highbd_avg_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_avg_pred_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_hadamard_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_masked_sad_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_obmc_sad_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_obmc_variance_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_quantize_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_sad_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_sadxd_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_sse_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_subpel_variance_neon.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_variance_neon.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_NEON_DOTPROD
                "${AOM_ROOT}/aom_dsp/arm/highbd_variance_neon_dotprod.c")

    list(APPEND AOM_DSP_ENCODER_INTRIN_SVE
                "${AOM_ROOT}/aom_dsp/arm/highbd_sse_sve.c"
                "${AOM_ROOT}/aom_dsp/arm/highbd_variance_sve.c")
  endif()

  if(CONFIG_INTERNAL_STATS)
    list(APPEND AOM_DSP_ENCODER_SOURCES "${AOM_ROOT}/aom_dsp/fastssim.c"
                "${AOM_ROOT}/aom_dsp/psnrhvs.c")
  endif()

  if(CONFIG_TUNE_VMAF)
    list(APPEND AOM_DSP_ENCODER_SOURCES "${AOM_ROOT}/aom_dsp/vmaf.c"
                "${AOM_ROOT}/aom_dsp/vmaf.h")
  endif()

  if(CONFIG_TUNE_BUTTERAUGLI)
    list(APPEND AOM_DSP_ENCODER_SOURCES "${AOM_ROOT}/aom_dsp/butteraugli.c"
                "${AOM_ROOT}/aom_dsp/butteraugli.h")
  endif()

  if(CONFIG_REALTIME_ONLY)
    list(REMOVE_ITEM AOM_DSP_ENCODER_INTRIN_AVX2
                     "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_avx2.c"
                     "${AOM_ROOT}/aom_dsp/x86/highbd_adaptive_quantize_avx2.c"
                     "${AOM_ROOT}/aom_dsp/x86/obmc_sad_avx2.c"
                     "${AOM_ROOT}/aom_dsp/x86/obmc_variance_avx2.c")

    list(REMOVE_ITEM AOM_DSP_ENCODER_INTRIN_SSE4_1
                     "${AOM_ROOT}/aom_dsp/x86/obmc_sad_sse4.c"
                     "${AOM_ROOT}/aom_dsp/x86/obmc_variance_sse4.c")

    list(REMOVE_ITEM AOM_DSP_ENCODER_INTRIN_SSE2
                     "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_sse2.c"
                     "${AOM_ROOT}/aom_dsp/x86/highbd_adaptive_quantize_sse2.c")

    list(REMOVE_ITEM AOM_DSP_ENCODER_INTRIN_NEON
                     "${AOM_ROOT}/aom_dsp/arm/highbd_obmc_sad_neon.c"
                     "${AOM_ROOT}/aom_dsp/arm/highbd_obmc_variance_neon.c"
                     "${AOM_ROOT}/aom_dsp/arm/obmc_sad_neon.c"
                     "${AOM_ROOT}/aom_dsp/arm/obmc_variance_neon.c")
  endif()
endif()

# Creates aom_dsp build targets. Must not be called until after libaom target
# has been created.
function(setup_aom_dsp_targets)
  add_library(aom_dsp_common OBJECT ${AOM_DSP_COMMON_SOURCES})
  list(APPEND AOM_LIB_TARGETS aom_dsp_common)
  create_no_op_source_file("aom_av1" "c" "no_op_source_file")
  add_library(aom_dsp OBJECT "${no_op_source_file}")
  target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp_common>)
  if(BUILD_SHARED_LIBS)
    target_sources(aom_static PRIVATE $<TARGET_OBJECTS:aom_dsp_common>)
  endif()
  list(APPEND AOM_LIB_TARGETS aom_dsp)

  # Not all generators support libraries consisting only of object files. Add a
  # source file to the aom_dsp target.
  add_no_op_source_file_to_target("aom_dsp" "c")

  if(CONFIG_AV1_DECODER)
    add_library(aom_dsp_decoder OBJECT ${AOM_DSP_DECODER_SOURCES})
    list(APPEND AOM_LIB_TARGETS aom_dsp_decoder)
    target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp_decoder>)
    if(BUILD_SHARED_LIBS)
      target_sources(aom_static PRIVATE $<TARGET_OBJECTS:aom_dsp_decoder>)
    endif()
  endif()

  if(CONFIG_AV1_ENCODER)
    add_library(aom_dsp_encoder OBJECT ${AOM_DSP_ENCODER_SOURCES})
    list(APPEND AOM_LIB_TARGETS aom_dsp_encoder)
    target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp_encoder>)
    if(BUILD_SHARED_LIBS)
      target_sources(aom_static PRIVATE $<TARGET_OBJECTS:aom_dsp_encoder>)
    endif()
    if(CONFIG_TUNE_VMAF)
      target_include_directories(aom_dsp_encoder PRIVATE ${VMAF_INCLUDE_DIRS})
    endif()
  endif()

  if(HAVE_SSE2)
    add_asm_library("aom_dsp_common_sse2" "AOM_DSP_COMMON_ASM_SSE2")
    add_intrinsics_object_library("-msse2" "sse2" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_SSE2")

    if(CONFIG_AV1_ENCODER)
      if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
        list(APPEND AOM_DSP_ENCODER_ASM_SSE2 ${AOM_DSP_ENCODER_ASM_SSE2_X86_64})
      endif()
      add_asm_library("aom_dsp_encoder_sse2" "AOM_DSP_ENCODER_ASM_SSE2")
      add_intrinsics_object_library("-msse2" "sse2" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SSE2")
    endif()
  endif()

  if(HAVE_SSSE3)
    add_asm_library("aom_dsp_common_ssse3" "AOM_DSP_COMMON_ASM_SSSE3")
    add_intrinsics_object_library("-mssse3" "ssse3" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_SSSE3")

    if(CONFIG_AV1_ENCODER)
      if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
        list(APPEND AOM_DSP_ENCODER_ASM_SSSE3
                    ${AOM_DSP_ENCODER_ASM_SSSE3_X86_64})
      endif()
      add_asm_library("aom_dsp_encoder_ssse3" "AOM_DSP_ENCODER_ASM_SSSE3")
      add_intrinsics_object_library("-mssse3" "ssse3" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SSSE3")
    endif()
  endif()

  if(HAVE_SSE4_1)
    add_intrinsics_object_library("-msse4.1" "sse4_1" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_SSE4_1")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("-msse4.1" "sse4_1" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SSE4_1")
    endif()
  endif()

  if(HAVE_AVX)
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("-mavx" "avx" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_AVX")
    endif()
  endif()

  if(HAVE_AVX2)
    add_intrinsics_object_library("-mavx2" "avx2" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_AVX2")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("-mavx2" "avx2" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_AVX2")
    endif()
  endif()

  if(HAVE_AVX512 AND CONFIG_AV1_ENCODER AND CONFIG_HIGHWAY)
    add_intrinsics_object_library("-march=skylake-avx512" "avx512"
                                  "aom_dsp_encoder"
                                  "AOM_DSP_ENCODER_INTRIN_AVX512")
  endif()

  if(HAVE_NEON)
    add_intrinsics_object_library("${AOM_NEON_INTRIN_FLAG}" "neon"
                                  "aom_dsp_common" "AOM_DSP_COMMON_INTRIN_NEON")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("${AOM_NEON_INTRIN_FLAG}" "neon"
                                    "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_NEON")
    endif()
  endif()

  if(HAVE_NEON_DOTPROD)
    add_intrinsics_object_library("${AOM_NEON_DOTPROD_FLAG}" "neon_dotprod"
                                  "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_NEON_DOTPROD")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("${AOM_NEON_DOTPROD_FLAG}" "neon_dotprod"
                                    "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_NEON_DOTPROD")
    endif()
  endif()

  if(HAVE_NEON_I8MM)
    add_intrinsics_object_library("${AOM_NEON_I8MM_FLAG}" "neon_i8mm"
                                  "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_NEON_I8MM")
  endif()

  if(HAVE_SVE)
    add_intrinsics_object_library("${AOM_SVE_FLAG}" "sve" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_SVE")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("${AOM_SVE_FLAG}" "sve" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SVE")
    endif()
  endif()

  target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp>)
  if(BUILD_SHARED_LIBS)
    target_sources(aom_static PRIVATE $<TARGET_OBJECTS:aom_dsp>)
  endif()

  # Pass the new lib targets up to the parent scope instance of
  # $AOM_LIB_TARGETS.
  set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
endfunction()
