#
#  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",
    "-Wno-write-strings",
  ]
}

config("undefined_behavior_shift") {
  cflags = [ "-fno-sanitize=shift" ]
}

config("undefined_behavior_signed_integer_overflow") {
  cflags = [ "-fno-sanitize=signed-integer-overflow" ]
}

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

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

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