# Copyright 2017 The Crashpad Authors. All rights reserved.
#
# 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.

import("../../build/crashpad_buildconfig.gni")

if (crashpad_is_in_chromium || crashpad_is_in_fuchsia || crashpad_is_in_dart) {
  zlib_source = "external"
} else if (!crashpad_is_win && !crashpad_is_fuchsia) {
  zlib_source = "system"
} else {
  zlib_source = "embedded"
}

config("zlib_config") {
  if (zlib_source == "external") {
    defines = [ "CRASHPAD_ZLIB_SOURCE_EXTERNAL" ]
  } else if (zlib_source == "system") {
    defines = [ "CRASHPAD_ZLIB_SOURCE_SYSTEM" ]
  } else if (zlib_source == "embedded") {
    defines = [ "CRASHPAD_ZLIB_SOURCE_EMBEDDED" ]
    include_dirs = [ "zlib" ]
  }
}

if (zlib_source == "external") {
  group("zlib") {
    public_configs = [ ":zlib_config" ]
    public_deps = [ "//third_party/zlib" ]
  }
} else if (zlib_source == "system") {
  source_set("zlib") {
    public_configs = [ ":zlib_config" ]
    libs = [ "z" ]
  }
} else if (zlib_source == "embedded") {
  static_library("zlib") {
    sources = [
      "zlib/adler32.c",
      "zlib/compress.c",
      "zlib/crc32.c",
      "zlib/crc32.h",
      "zlib/deflate.c",
      "zlib/deflate.h",
      "zlib/gzclose.c",
      "zlib/gzguts.h",
      "zlib/gzlib.c",
      "zlib/gzread.c",
      "zlib/gzwrite.c",
      "zlib/infback.c",
      "zlib/inffast.c",
      "zlib/inffast.h",
      "zlib/inffixed.h",
      "zlib/inflate.c",
      "zlib/inflate.h",
      "zlib/inftrees.c",
      "zlib/inftrees.h",
      "zlib/names.h",
      "zlib/trees.c",
      "zlib/trees.h",
      "zlib/uncompr.c",
      "zlib/zconf.h",
      "zlib/zlib.h",
      "zlib/zlib_crashpad.h",
      "zlib/zutil.c",
      "zlib/zutil.h",
    ]

    cflags = []
    defines = [ "HAVE_STDARG_H" ]
    public_configs = [ ":zlib_config" ]

    if (crashpad_is_win) {
      cflags += [
        "/wd4131",  # uses old-style declarator
        "/wd4244",  # conversion from 't1' to 't2', possible loss of data
        "/wd4245",  # conversion from 't1' to 't2', signed/unsigned mismatch
        "/wd4267",  # conversion from 'size_t' to 't', possible loss of data
        "/wd4324",  # structure was padded due to alignment specifier
        "/wd4702",  # unreachable code
      ]
      if (current_cpu == "arm64" && !crashpad_is_clang) {
        # Select code path for clang in zlib to avoid using MSVC x86/x64
        # intrinsics for Windows ARM64.
        # TODO: https://crashpad.chromium.org/bug/267
        defines += [ "__clang__" ]
      }
    } else {
      defines += [
        "HAVE_HIDDEN",
        "HAVE_UNISTD_H",
      ]
    }

    configs -= [
      "//third_party/mini_chromium/mini_chromium/build:Wimplicit_fallthrough",
    ]

    if (current_cpu == "x86" || current_cpu == "x64") {
      sources += [
        "zlib/crc_folding.c",
        "zlib/fill_window_sse.c",
        "zlib/x86.c",
        "zlib/x86.h",
      ]
      if (!crashpad_is_win || crashpad_is_clang) {
        cflags += [
          "-msse4.2",
          "-mpclmul",
        ]
      }
      if (crashpad_is_clang) {
        cflags += [ "-Wno-incompatible-pointer-types" ]
      }
    } else {
      sources += [ "zlib/simd_stub.c" ]
    }
  }
}
