# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

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

# Must be in a config because of how GN orders flags (otherwise -Wall will
# appear after this, and turn it back on).
config("clang_warnings") {
  if (is_clang) {
    # Upstream uses self-assignment to avoid warnings.
    cflags = [ "-Wno-self-assign" ]
  }
}

config("lzma_defines") {
  defines = [
    "_7ZIP_ST",
    "_7Z_NO_METHODS_FILTERS",
    "_LZMA_PROB32",
  ]
}

static_library("lzma_sdk") {
  sources = [
    "7z.h",
    "7zAlloc.c",
    "7zAlloc.h",
    "7zArcIn.c",
    "7zBuf.c",
    "7zBuf.h",
    "7zCrc.c",
    "7zCrc.h",
    "7zCrcOpt.c",
    "7zDec.c",
    "7zFile.c",
    "7zFile.h",
    "7zStream.c",
    "7zTypes.h",
    "Alloc.c",
    "Alloc.h",
    "Bcj2.c",
    "Bcj2.h",
    "Bra.c",
    "Bra.h",
    "Bra86.c",
    "Compiler.h",
    "CpuArch.c",
    "CpuArch.h",
    "Delta.c",
    "Delta.h",
    "DllSecur.c",
    "DllSecur.h",
    "LzFind.c",
    "LzFind.h",
    "LzHash.h",
    "Lzma2Dec.c",
    "Lzma2Dec.h",
    "LzmaDec.c",
    "LzmaDec.h",
    "LzmaEnc.c",
    "LzmaEnc.h",
    "LzmaLib.c",
    "LzmaLib.h",
    "Precomp.h",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",

    # Must be after no_chromium_code for warning flags to be ordered correctly.
    ":clang_warnings",
    ":lzma_defines",
  ]
  public_configs = [ ":lzma_sdk_config" ]
}

static_library("lzma_sdk_xz") {
  sources = [
    "BraIA64.c",
    "RotateDefs.h",
    "Sha256.c",
    "Sha256.h",
    "Xz.c",
    "Xz.h",
    "XzCrc64.c",
    "XzCrc64.h",
    "XzCrc64Opt.c",
    "XzDec.c",
  ]

  deps = [ ":lzma_sdk" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    "//build/config/compiler:no_chromium_code",

    # Must be after no_chromium_code for warning flags to be ordered correctly.
    ":clang_warnings",
    ":lzma_defines",
  ]
  public_configs = [ ":lzma_sdk_config" ]
}
