#
# 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/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/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_loopfilter_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/highbd_loopfilter_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/sad.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_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/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()
