#
# Copyright (c) 2021, Alliance for Open Media. All rights reserved
#
# This source code is subject to the terms of the BSD 3-Clause Clear License and
# the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
# License was not distributed with this source code in the LICENSE file, you can
# obtain it at aomedia.org/license/software-license/bsd-3-c-c/.  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 aomedia.org/license/patent-license/.
#
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/fft.c"
  "${AOM_ROOT}/aom_dsp/fft_common.h"
  "${AOM_ROOT}/aom_dsp/grain_synthesis.c"
  "${AOM_ROOT}/aom_dsp/grain_synthesis.h"
  "${AOM_ROOT}/aom_dsp/intrapred.c"
  "${AOM_ROOT}/aom_dsp/intrapred_common.h"
  "${AOM_ROOT}/aom_dsp/loopfilter.c"
  "${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/sad.c"
  "${AOM_ROOT}/aom_dsp/subtract.c"
  "${AOM_ROOT}/aom_dsp/txfm_common.h"
  "${AOM_ROOT}/aom_dsp/x86/convolve_common_intrin.h"
  "${AOM_ROOT}/aom_dsp/avg.c")

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/aom_subpixel_8t_sse2.asm"
  "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_bilinear_sse2.asm"
  "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_asm_sse2.asm"
  "${AOM_ROOT}/aom_dsp/x86/highbd_sad_sse2.asm"
  "${AOM_ROOT}/aom_dsp/x86/inv_wht_sse2.asm")

list(
  APPEND
  AOM_DSP_COMMON_INTRIN_SSE2
  "${AOM_ROOT}/aom_dsp/x86/aom_convolve_copy_sse2.c"
  "${AOM_ROOT}/aom_dsp/x86/aom_asm_stubs.c"
  "${AOM_ROOT}/aom_dsp/x86/convolve.h"
  "${AOM_ROOT}/aom_dsp/x86/convolve_sse2.h"
  "${AOM_ROOT}/aom_dsp/x86/fft_sse2.c"
  "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_sse2.c"
  "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.c"
  "${AOM_ROOT}/aom_dsp/x86/highbd_subtract_sse2.c"
  "${AOM_ROOT}/aom_dsp/x86/intrapred_x86.h"
  "${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/avg_intrin_sse2.c"
  "${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/highbd_convolve_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")

list(
  APPEND
  AOM_DSP_COMMON_INTRIN_AVX2
  "${AOM_ROOT}/aom_dsp/x86/aom_convolve_copy_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/fft_avx2.c"
  "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_avx2.c"
  "${AOM_ROOT}/aom_dsp/x86/intrapred_avx2.c"
  "${AOM_ROOT}/aom_dsp/x86/blend_a64_mask_avx2.c"
  "${AOM_ROOT}/aom_dsp/x86/avg_intrin_avx2.c"
  "${AOM_ROOT}/aom_dsp/x86/bitdepth_conversion_avx2.h")

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

list(
  APPEND
  AOM_DSP_COMMON_INTRIN_DSPR2
  "${AOM_ROOT}/aom_dsp/mips/aom_convolve_copy_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/common_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/common_dspr2.h"
  "${AOM_ROOT}/aom_dsp/mips/convolve2_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/convolve2_horiz_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/convolve2_vert_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/convolve8_horiz_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/convolve8_vert_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/convolve_common_dspr2.h"
  "${AOM_ROOT}/aom_dsp/mips/intrapred16_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/intrapred4_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/intrapred8_dspr2.c"
  "${AOM_ROOT}/aom_dsp/mips/inv_txfm_dspr2.h")

list(
  APPEND
  AOM_DSP_COMMON_INTRIN_MSA
  "${AOM_ROOT}/aom_dsp/mips/aom_convolve8_horiz_msa.c"
  "${AOM_ROOT}/aom_dsp/mips/aom_convolve8_vert_msa.c"
  "${AOM_ROOT}/aom_dsp/mips/aom_convolve_copy_msa.c"
  "${AOM_ROOT}/aom_dsp/mips/aom_convolve_msa.h"
  "${AOM_ROOT}/aom_dsp/mips/macros_msa.h")

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/binary_codes_writer.c"
    "${AOM_ROOT}/aom_dsp/binary_codes_writer.h"
    "${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/fwd_txfm.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/psnr.c"
    "${AOM_ROOT}/aom_dsp/psnr.h"
    "${AOM_ROOT}/aom_dsp/quantize.c"
    "${AOM_ROOT}/aom_dsp/quantize.h"
    "${AOM_ROOT}/aom_dsp/sad4d.c"
    "${AOM_ROOT}/aom_dsp/sse.c"
    "${AOM_ROOT}/aom_dsp/sad_av1.c"
    "${AOM_ROOT}/aom_dsp/sum_squares.c"
    "${AOM_ROOT}/aom_dsp/variance.c"
    "${AOM_ROOT}/aom_dsp/variance.h")

  list(
    APPEND
    AOM_DSP_ENCODER_ASM_SSE2
    "${AOM_ROOT}/aom_dsp/x86/highbd_sad4d_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/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/highbd_quantize_intrin_sse2.c"
    "${AOM_ROOT}/aom_dsp/x86/highbd_variance_sse2.c"
    "${AOM_ROOT}/aom_dsp/x86/quantize_sse2.c"
    "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_sse2.c"
    "${AOM_ROOT}/aom_dsp/x86/highbd_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_X86_64
       "${AOM_ROOT}/aom_dsp/x86/quantize_ssse3_x86_64.asm")

  list(
    APPEND
    AOM_DSP_ENCODER_INTRIN_AVX2
    "${AOM_ROOT}/aom_dsp/x86/masked_sad_intrin_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/highbd_quantize_intrin_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/adaptive_quantize_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/highbd_adaptive_quantize_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/sad4d_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/sad_highbd_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/sad_impl_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/variance_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/highbd_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/blk_sse_sum_avx2.c"
    "${AOM_ROOT}/aom_dsp/x86/sum_squares_avx2.c")

  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_sad4d_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/jnt_sad_ssse3.c")

  list(
    APPEND
    AOM_DSP_ENCODER_INTRIN_SSE4_1
    "${AOM_ROOT}/aom_dsp/x86/highbd_variance_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_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/sse_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/sum_squares_neon.c")

  list(
    APPEND
    AOM_DSP_ENCODER_INTRIN_MSA
    "${AOM_ROOT}/aom_dsp/mips/sad_msa.c"
    "${AOM_ROOT}/aom_dsp/mips/subtract_msa.c"
    "${AOM_ROOT}/aom_dsp/mips/variance_msa.c"
    "${AOM_ROOT}/aom_dsp/mips/sub_pixel_variance_msa.c")

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

  if(CONFIG_TUNE_VMAF)
    list(APPEND AOM_DSP_ENCODER_SOURCES "${AOM_ROOT}/aom_dsp/vmaf.c"
         "${AOM_ROOT}/aom_dsp/vmaf.h")
  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_dummy_source_file("aom_av1" "c" "dummy_source_file")
  add_library(aom_dsp OBJECT "${dummy_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
  # dummy source file to the aom_dsp target.
  add_dummy_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()
  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_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_DSPR2)
    add_intrinsics_object_library("" "dspr2" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_DSPR2")
  endif()

  if(HAVE_MSA)
    add_intrinsics_object_library("" "msa" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_MSA")
    if(CONFIG_AV1_ENCODER)
      add_intrinsics_object_library("" "msa" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_MSA")
    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()
