# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

static_library("opus") {
  sources = [
    "celt/_kiss_fft_guts.h",
    "celt/arch.h",
    "celt/bands.c",
    "celt/bands.h",
    "celt/celt.c",
    "celt/celt.h",
    "celt/celt_decoder.c",
    "celt/celt_encoder.c",
    "celt/celt_lpc.c",
    "celt/celt_lpc.h",
    "celt/cwrs.c",
    "celt/cwrs.h",
    "celt/ecintrin.h",
    "celt/entcode.c",
    "celt/entcode.h",
    "celt/entdec.c",
    "celt/entdec.h",
    "celt/entenc.c",
    "celt/entenc.h",
    "celt/fixed_c5x.h",
    "celt/fixed_c6x.h",
    "celt/fixed_debug.h",
    "celt/fixed_generic.h",
    "celt/float_cast.h",
    "celt/kiss_fft.c",
    "celt/kiss_fft.h",
    "celt/laplace.c",
    "celt/laplace.h",
    "celt/mathops.c",
    "celt/mathops.h",
    "celt/mdct.c",
    "celt/mdct.h",
    "celt/mfrngcod.h",
    "celt/modes.c",
    "celt/modes.h",
    "celt/os_support.h",
    "celt/pitch.c",
    "celt/pitch.h",
    "celt/quant_bands.c",
    "celt/quant_bands.h",
    "celt/rate.c",
    "celt/rate.h",
    "celt/stack_alloc.h",
    "celt/static_modes_fixed.h",
    "celt/static_modes_float.h",
    "celt/vq.c",
    "celt/vq.h",

    "include/opus.h",
    "include/opus_defines.h",
    "include/opus_types.h",
    "include/opus_multistream.h",

    "src/analysis.h",
    "src/mlp.h",
    "src/opus_private.h",
    "src/tansig_table.h",

    "silk/A2NLSF.c",
    "silk/ana_filt_bank_1.c",
    "silk/API.h",
    "silk/biquad_alt.c",
    "silk/bwexpander.c",
    "silk/bwexpander_32.c",
    "silk/check_control_input.c",
    "silk/CNG.c",
    "silk/code_signs.c",
    "silk/control.h",
    "silk/control_audio_bandwidth.c",
    "silk/control_codec.c",
    "silk/control_SNR.c",
    "silk/debug.c",
    "silk/debug.h",
    "silk/decoder_set_fs.c",
    "silk/decode_core.c",
    "silk/decode_frame.c",
    "silk/decode_indices.c",
    "silk/decode_parameters.c",
    "silk/decode_pitch.c",
    "silk/decode_pulses.c",
    "silk/dec_API.c",
    "silk/define.h",
    "silk/encode_indices.c",
    "silk/encode_pulses.c",
    "silk/enc_API.c",
    "silk/errors.h",
    "silk/gain_quant.c",
    "silk/HP_variable_cutoff.c",
    "silk/init_decoder.c",
    "silk/init_encoder.c",
    "silk/Inlines.h",
    "silk/inner_prod_aligned.c",
    "silk/interpolate.c",
    "silk/lin2log.c",
    "silk/log2lin.c",
    "silk/LPC_analysis_filter.c",
    "silk/LPC_fit.c",
    "silk/LPC_inv_pred_gain.c",
    "silk/LP_variable_cutoff.c",
    "silk/macros.h",
    "silk/MacroCount.h",
    "silk/MacroDebug.h",
    "silk/main.h",
    "silk/NLSF2A.c",
    "silk/NLSF_decode.c",
    "silk/NLSF_del_dec_quant.c",
    "silk/NLSF_encode.c",
    "silk/NLSF_stabilize.c",
    "silk/NLSF_unpack.c",
    "silk/NLSF_VQ.c",
    "silk/NLSF_VQ_weights_laroia.c",
    "silk/NSQ.c",
    "silk/NSQ_del_dec.c",
    "silk/pitch_est_defines.h",
    "silk/pitch_est_tables.c",
    "silk/PLC.c",
    "silk/PLC.h",
    "silk/process_NLSFs.c",
    "silk/quant_LTP_gains.c",
    "silk/resampler.c",
    "silk/resampler_down2.c",
    "silk/resampler_down2_3.c",
    "silk/resampler_private.h",
    "silk/resampler_private_AR2.c",
    "silk/resampler_private_down_FIR.c",
    "silk/resampler_private_IIR_FIR.c",
    "silk/resampler_private_up2_HQ.c",
    "silk/resampler_rom.c",
    "silk/resampler_rom.h",
    "silk/resampler_structs.h",
    "silk/shell_coder.c",
    "silk/sigm_Q15.c",
    "silk/sort.c",
    "silk/stereo_decode_pred.c",
    "silk/stereo_encode_pred.c",
    "silk/stereo_find_predictor.c",
    "silk/stereo_LR_to_MS.c",
    "silk/stereo_MS_to_LR.c",
    "silk/stereo_quant_pred.c",
    "silk/structs.h",
    "silk/sum_sqr_shift.c",
    "silk/tables.h",
    "silk/tables_gain.c",
    "silk/tables_LTP.c",
    "silk/tables_NLSF_CB_NB_MB.c",
    "silk/tables_NLSF_CB_WB.c",
    "silk/tables_other.c",
    "silk/tables_pitch_lag.c",
    "silk/tables_pulses_per_block.c",
    "silk/table_LSF_cos.c",
    "silk/tuning_parameters.h",
    "silk/typedef.h",
    "silk/VAD.c",
    "silk/VQ_WMat_EC.c",
    "src/analysis.c",
    "src/mlp.c",
    "src/mlp_data.c",
    "src/opus.c",
    "src/opus_decoder.c",
    "src/opus_encoder.c",
    "src/opus_multistream.c",
    "src/opus_multistream_decoder.c",
    "src/opus_multistream_encoder.c",
    "src/repacketizer.c",

    # Floating point decoding files
    "silk/float/autocorrelation_FLP.c",
    "silk/float/burg_modified_FLP.c",
    "silk/float/bwexpander_FLP.c",
    "silk/float/corrMatrix_FLP.c",
    "silk/float/encode_frame_FLP.c",
    "silk/float/energy_FLP.c",
    "silk/float/find_LPC_FLP.c",
    "silk/float/find_LTP_FLP.c",
    "silk/float/find_pitch_lags_FLP.c",
    "silk/float/find_pred_coefs_FLP.c",
    "silk/float/inner_product_FLP.c",
    "silk/float/k2a_FLP.c",
    "silk/float/LPC_analysis_filter_FLP.c",
    "silk/float/LPC_inv_pred_gain_FLP.c",
    "silk/float/LTP_analysis_filter_FLP.c",
    "silk/float/LTP_scale_ctrl_FLP.c",
    "silk/float/main_FLP.h",
    "silk/float/noise_shape_analysis_FLP.c",
    "silk/float/pitch_analysis_core_FLP.c",
    "silk/float/process_gains_FLP.c",
    "silk/float/regularize_correlations_FLP.c",
    "silk/float/residual_energy_FLP.c",
    "silk/float/scale_copy_vector_FLP.c",
    "silk/float/scale_vector_FLP.c",
    "silk/float/schur_FLP.c",
    "silk/float/SigProc_FLP.h",
    "silk/float/sort_FLP.c",
    "silk/float/structs_FLP.h",
    "silk/float/warped_autocorrelation_FLP.c",
    "silk/float/wrappers_FLP.c",

    "silk/float/apply_sine_window_FLP.c",
  ]

  if (sb_enable_opus_sse && (target_cpu == "x86" || target_cpu == "x64")) {
    sources += [
      "celt/x86/celt_lpc_sse4_1.c",
      "celt/x86/celt_lpc_sse.h",
      "celt/x86/pitch_sse.c",
      "celt/x86/pitch_sse.h",
      "celt/x86/pitch_sse2.c",
      "celt/x86/pitch_sse4_1.c",
      "celt/x86/vq_sse2.c",
      "celt/x86/vq_sse.h",
      "celt/x86/x86cpu.c",
      "celt/x86/x86cpu.h",
      "celt/x86/x86_celt_map.c",
      "silk/x86/main_sse.h",
      "silk/x86/NSQ_del_dec_sse4_1.c",
      "silk/x86/NSQ_sse4_1.c",
      "silk/x86/VAD_sse4_1.c",
      "silk/x86/VQ_WMat_EC_sse4_1.c",
      "silk/x86/x86_silk_map.c",
    ]
  } else if (target_cpu == "arm" || target_cpu == "arm64") {
    configs += [ ":opus_arm_defines" ]
  }

  configs += [ ":opus_internal" ]
  public_configs = [ ":opus_public" ]
}

config("opus_internal") {
  include_dirs = [
    "celt",
    "include",
    "silk",
    "silk/float",
    "starboard",
  ]
  defines = [ "HAVE_CONFIG_H" ]
}

config("opus_public") {
  include_dirs = [ "." ]
}

config("opus_arm_defines") {
  if (!is_starboard) {
    defines = [
      "OPUS_ARM_ASM",
      "OPUS_ARM_INLINE_ASM",
      "OPUS_ARM_INLINE_EDSP",
    ]
  }
}
