#
#  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" ]
}

config("sbc_warnings") {
  cflags = [
    "-Wno-conversion",
    "-Wno-implicit-fallthrough",
  ]
}

source_set("sbc_decoder") {
  sources = [
    "decoder/srce/alloc.c",
    "decoder/srce/bitalloc-sbc.c",
    "decoder/srce/bitalloc.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-sbc.c",
    "decoder/srce/framing.c",
    "decoder/srce/oi_codec_version.c",
    "decoder/srce/synthesis-8-generated.c",
    "decoder/srce/synthesis-dct8.c",
    "decoder/srce/synthesis-sbc.c",
  ]

  configs += [ ":sbc_warnings" ]
  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",
  ]

  configs += [ ":sbc_warnings" ]
  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",
  ]
}
