# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

{
  'targets': [
    {
      'target_name': 'ilbc',
      'type': 'static_library',
      'dependencies': [
        '<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
        'audio_encoder_interface',
      ],
      'sources': [
        'abs_quant.c',
        'abs_quant_loop.c',
        'audio_decoder_ilbc.cc',
        'audio_decoder_ilbc.h',
        'audio_encoder_ilbc.cc',
        'audio_encoder_ilbc.h',
        'augmented_cb_corr.c',
        'bw_expand.c',
        'cb_construct.c',
        'cb_mem_energy.c',
        'cb_mem_energy_augmentation.c',
        'cb_mem_energy_calc.c',
        'cb_search.c',
        'cb_search_core.c',
        'cb_update_best_index.c',
        'chebyshev.c',
        'comp_corr.c',
        'constants.c',
        'create_augmented_vec.c',
        'decode.c',
        'decode_residual.c',
        'decoder_interpolate_lsf.c',
        'do_plc.c',
        'encode.c',
        'energy_inverse.c',
        'enh_upsample.c',
        'enhancer.c',
        'enhancer_interface.c',
        'filtered_cb_vecs.c',
        'frame_classify.c',
        'gain_dequant.c',
        'gain_quant.c',
        'get_cd_vec.c',
        'get_lsp_poly.c',
        'get_sync_seq.c',
        'hp_input.c',
        'hp_output.c',
        'ilbc.c',
        'ilbc.h',
        'index_conv_dec.c',
        'index_conv_enc.c',
        'init_decode.c',
        'init_encode.c',
        'interpolate.c',
        'interpolate_samples.c',
        'lpc_encode.c',
        'lsf_check.c',
        'lsf_interpolate_to_poly_dec.c',
        'lsf_interpolate_to_poly_enc.c',
        'lsf_to_lsp.c',
        'lsf_to_poly.c',
        'lsp_to_lsf.c',
        'my_corr.c',
        'nearest_neighbor.c',
        'pack_bits.c',
        'poly_to_lsf.c',
        'poly_to_lsp.c',
        'refiner.c',
        'simple_interpolate_lsf.c',
        'simple_lpc_analysis.c',
        'simple_lsf_dequant.c',
        'simple_lsf_quant.c',
        'smooth.c',
        'smooth_out_data.c',
        'sort_sq.c',
        'split_vq.c',
        'state_construct.c',
        'state_search.c',
        'swap_bytes.c',
        'unpack_bits.c',
        'vq3.c',
        'vq4.c',
        'window32_w32.c',
        'xcorr_coef.c',
        'abs_quant.h',
        'abs_quant_loop.h',
        'augmented_cb_corr.h',
        'bw_expand.h',
        'cb_construct.h',
        'cb_mem_energy.h',
        'cb_mem_energy_augmentation.h',
        'cb_mem_energy_calc.h',
        'cb_search.h',
        'cb_search_core.h',
        'cb_update_best_index.h',
        'chebyshev.h',
        'comp_corr.h',
        'constants.h',
        'create_augmented_vec.h',
        'decode.h',
        'decode_residual.h',
        'decoder_interpolate_lsf.h',
        'do_plc.h',
        'encode.h',
        'energy_inverse.h',
        'enh_upsample.h',
        'enhancer.h',
        'enhancer_interface.h',
        'filtered_cb_vecs.h',
        'frame_classify.h',
        'gain_dequant.h',
        'gain_quant.h',
        'get_cd_vec.h',
        'get_lsp_poly.h',
        'get_sync_seq.h',
        'hp_input.h',
        'hp_output.h',
        'defines.h',
        'index_conv_dec.h',
        'index_conv_enc.h',
        'init_decode.h',
        'init_encode.h',
        'interpolate.h',
        'interpolate_samples.h',
        'lpc_encode.h',
        'lsf_check.h',
        'lsf_interpolate_to_poly_dec.h',
        'lsf_interpolate_to_poly_enc.h',
        'lsf_to_lsp.h',
        'lsf_to_poly.h',
        'lsp_to_lsf.h',
        'my_corr.h',
        'nearest_neighbor.h',
        'pack_bits.h',
        'poly_to_lsf.h',
        'poly_to_lsp.h',
        'refiner.h',
        'simple_interpolate_lsf.h',
        'simple_lpc_analysis.h',
        'simple_lsf_dequant.h',
        'simple_lsf_quant.h',
        'smooth.h',
        'smooth_out_data.h',
        'sort_sq.h',
        'split_vq.h',
        'state_construct.h',
        'state_search.h',
        'swap_bytes.h',
        'unpack_bits.h',
        'vq3.h',
        'vq4.h',
        'window32_w32.h',
        'xcorr_coef.h',
     ], # sources
    }, # ilbc
  ], # targets
  'conditions': [
    ['include_tests==1', {
      'targets': [
        {
          'target_name': 'ilbc_test',
          'type': 'executable',
          'dependencies': [
            'ilbc',
          ],
          'sources': [
            'test/iLBC_test.c',
          ],
        }, # ilbc_test
      ], # targets
    }], # include_tests
  ], # conditions
}
