#
# 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_convolve.h"
            "${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/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/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/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")

list(APPEND AOM_DSP_COMMON_ASM_SSE2
            "${AOM_ROOT}/aom_dsp/x86/aom_convolve_copy_sse2.asm"
            "${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_sse2.asm"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_sse2.asm"
            "${AOM_ROOT}/aom_dsp/x86/inv_wht_sse2.asm")

list(APPEND AOM_DSP_COMMON_INTRIN_SSE2
            "${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_intrapred_sse2.c"
            "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_sse2.c"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_sse2.c"
            "${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")

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/highbd_convolve_ssse3.c"
            "${AOM_ROOT}/aom_dsp/x86/intrapred_ssse3.c")

list(APPEND AOM_DSP_COMMON_INTRIN_SSE4_1
            "${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_subpixel_8t_intrin_avx2.c"
            "${AOM_ROOT}/aom_dsp/x86/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")

list(APPEND AOM_DSP_COMMON_INTRIN_NEON
            "${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/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_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/intrapred_msa.c"
            "${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.h"
              "${AOM_ROOT}/aom_dsp/bitreader_buffer.c"
              "${AOM_ROOT}/aom_dsp/bitreader_buffer.h"
              "${AOM_ROOT}/aom_dsp/daalaboolreader.c"
              "${AOM_ROOT}/aom_dsp/daalaboolreader.h"
              "${AOM_ROOT}/aom_dsp/entdec.c"
              "${AOM_ROOT}/aom_dsp/entdec.h"
              "${AOM_ROOT}/aom_dsp/grain_synthesis.c"
              "${AOM_ROOT}/aom_dsp/grain_synthesis.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.h"
              "${AOM_ROOT}/aom_dsp/bitwriter_buffer.c"
              "${AOM_ROOT}/aom_dsp/bitwriter_buffer.h"
              "${AOM_ROOT}/aom_dsp/daalaboolwriter.c"
              "${AOM_ROOT}/aom_dsp/daalaboolwriter.h"
              "${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/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/halfpix_variance_impl_sse2.asm"
              "${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"
              "${AOM_ROOT}/aom_dsp/x86/sad4d_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/sad_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/subpel_variance_sse2.asm"
              "${AOM_ROOT}/aom_dsp/x86/subtract_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/halfpix_variance_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"
              "${AOM_ROOT}/aom_dsp/x86/quantize_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/fwd_txfm_ssse3_x86_64.asm"
              "${AOM_ROOT}/aom_dsp/x86/ssim_opt_x86_64.asm")

  list(APPEND AOM_DSP_ENCODER_INTRIN_AVX2
              "${AOM_ROOT}/aom_dsp/x86/highbd_quantize_intrin_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sad4d_avx2.c"
              "${AOM_ROOT}/aom_dsp/x86/sad_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/variance_impl_avx2.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_AVX_ASM_X86_64
              "${AOM_ROOT}/aom_dsp/x86/quantize_avx_x86_64.asm")

  list(APPEND AOM_DSP_ENCODER_INTRIN_SSSE3
              "${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/jnt_variance_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/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/sad4d_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/sad_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/subpel_variance_neon.c"
              "${AOM_ROOT}/aom_dsp/arm/variance_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()
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>)
  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>)
  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>)
  endif()

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

    if(CONFIG_AV1_ENCODER)
      add_asm_library("aom_dsp_encoder_sse2" "AOM_DSP_ENCODER_ASM_SSE2" "aom")
      add_intrinsics_object_library("-msse2" "sse2" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SSE2" "aom")
    endif()
  endif()

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

    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" "aom")
      add_intrinsics_object_library("-mssse3" "ssse3" "aom_dsp_encoder"
                                    "AOM_DSP_ENCODER_INTRIN_SSSE3" "aom")
    endif()
  endif()

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

  if(HAVE_AVX AND "${AOM_TARGET_CPU}" STREQUAL "x86_64")
    if(CONFIG_AV1_ENCODER)
      add_asm_library("aom_dsp_encoder_avx" "AOM_DSP_ENCODER_AVX_ASM_X86_64"
                      "aom")
    endif()
  endif()

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

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

  if(HAVE_DSPR2)
    add_intrinsics_object_library("" "dspr2" "aom_dsp_common"
                                  "AOM_DSP_COMMON_INTRIN_DSPR2" "aom")
  endif()

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