#
#  Copyright 2015 Google, Inc.
#
#  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.
#

config("sbc_decoder_includes_config") {
  include_dirs = [ "decoder/include" ]
}

source_set("sbc_decoder") {
  sources = [
    "decoder/srce/alloc.c",
    "decoder/srce/bitalloc.c",
    "decoder/srce/bitalloc-sbc.c",
    "decoder/srce/bitstream-decode.c",
    "decoder/srce/decoder-oina.c",
    "decoder/srce/decoder-private.c",
    "decoder/srce/decoder-sbc.c",
    "decoder/srce/dequant.c",
    "decoder/srce/framing.c",
    "decoder/srce/framing-sbc.c",
    "decoder/srce/oi_codec_version.c",
    "decoder/srce/synthesis-8-generated.c",
    "decoder/srce/synthesis-dct8.c",
    "decoder/srce/synthesis-sbc.c",
  ]

  public_configs = [":sbc_decoder_includes_config"]

  # TODO(46738): UBSan has found an instance of undefined behavior in this target.
  # Disable UBSan for this target temporarily until it is migrated into CI/CQ.
  configs += [ "//build/config:temporarily_disable_ubsan_do_not_use" ]
}



config("sbc_encoder_includes_config") {
  include_dirs = ["encoder/include"]
}

source_set("sbc_encoder") {
  sources = [
    "encoder/srce/sbc_analysis.c",
    "encoder/srce/sbc_dct.c",
    "encoder/srce/sbc_dct_coeffs.c",
    "encoder/srce/sbc_enc_bit_alloc_mono.c",
    "encoder/srce/sbc_enc_bit_alloc_ste.c",
    "encoder/srce/sbc_enc_coeffs.c",
    "encoder/srce/sbc_encoder.c",
    "encoder/srce/sbc_packing.c",
  ]

  public_configs = [":sbc_encoder_includes_config"]

  # TODO(46738): UBSan has found an instance of undefined behavior in this target.
  # Disable UBSan for this target temporarily until it is migrated into CI/CQ.
  configs += [ "//build/config:temporarily_disable_ubsan_do_not_use" ]
}

static_library("sbc") {
  deps = [
    ":sbc_decoder",
    ":sbc_encoder",
  ]
}
