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

load(
    ":buildflags.bzl",
    "buildflags",
)

package(default_visibility = ["//visibility:public"])

MINI_CHROMIUM_BASE_SOURCES = [
    "src/base/compiler_specific.h",
    "src/base/debug/alias.cc",
    "src/base/debug/alias.h",
    "src/base/files/file_path.cc",
    "src/base/files/file_util.h",
    "src/base/files/scoped_file.cc",
    "src/base/logging.cc",
    "src/base/memory/scoped_policy.h",
    "src/base/numerics/checked_math_impl.h",
    "src/base/numerics/clamped_math_impl.h",
    "src/base/numerics/safe_math_clang_gcc_impl.h",
    "src/base/numerics/safe_math_shared_impl.h",
    "src/base/process/memory.cc",
    "src/base/process/memory.h",
    "src/base/rand_util.cc",
    "src/base/strings/string_number_conversions.cc",
    "src/base/strings/stringprintf.cc",
    "src/base/strings/sys_string_conversions.h",
    "src/base/strings/utf_string_conversion_utils.cc",
    "src/base/strings/utf_string_conversion_utils.h",
    "src/base/strings/utf_string_conversions.cc",
    "src/base/synchronization/condition_variable.h",
    "src/base/synchronization/lock.cc",
    "src/base/synchronization/lock_impl.h",
    "src/base/template_util.h",
    "src/base/third_party/icu/icu_utf.cc",
    "src/base/third_party/icu/icu_utf.h",
    "src/base/threading/thread_local_storage.cc",
]

MINI_CHROMIUM_BASE_HEADERS = [
    "src/base/atomicops.h",
    "src/base/auto_reset.h",
    "src/base/bit_cast.h",
    "src/base/check.h",
    "src/base/check_op.h",
    "src/base/compiler_specific.h",
    "src/base/cxx17_backports.h",
    "src/base/files/file_path.h",
    "src/base/files/scoped_file.h",
    "src/base/format_macros.h",
    "src/base/logging.h",
    "src/base/memory/free_deleter.h",
    "src/base/memory/page_size.h",
    "src/base/metrics/histogram_functions.h",
    "src/base/metrics/histogram_macros.h",
    "src/base/metrics/persistent_histogram_allocator.h",
    "src/base/notreached.h",
    "src/base/numerics/checked_math.h",
    "src/base/numerics/clamped_math.h",
    "src/base/numerics/safe_conversions.h",
    "src/base/numerics/safe_math.h",
    "src/base/posix/eintr_wrapper.h",
    "src/base/rand_util.h",
    "src/base/scoped_clear_last_error.h",
    "src/base/scoped_generic.h",
    "src/base/strings/string_number_conversions.h",
    "src/base/strings/string_piece.h",
    "src/base/strings/string_util.h",
    "src/base/strings/stringprintf.h",
    "src/base/strings/utf_string_conversions.h",
    "src/base/synchronization/lock.h",
    "src/base/threading/thread_local_storage.h",
    "src/build/build_config.h",
    "src/build/buildflag.h",
    ":chromeos_buildflags",
]

MINI_CHROMIUM_BASE_POSIX_SOURCES = [
    "src/base/files/file_util_posix.cc",
    "src/base/memory/page_size_posix.cc",
    "src/base/posix/safe_strerror.cc",
    "src/base/strings/string_util_posix.h",
    "src/base/synchronization/condition_variable_posix.cc",
    "src/base/synchronization/lock_impl_posix.cc",
    "src/base/threading/thread_local_storage_posix.cc",
]

MINI_CHROMIUM_BASE_POSIX_HEADERS = [
    "src/base/posix/safe_strerror.h",
]

MINI_CHROMIUM_BASE_FUCHSIA_SOURCES = [
    "src/base/fuchsia/fuchsia_logging.cc",
]

MINI_CHROMIUM_BASE_FUCHSIA_HEADERS = [
    "src/base/fuchsia/fuchsia_logging.h",
]

cc_library(
    name = "base",
    srcs = MINI_CHROMIUM_BASE_SOURCES +
           select({
               "@platforms//os:osx": MINI_CHROMIUM_BASE_POSIX_SOURCES,
               "@platforms//os:fuchsia": MINI_CHROMIUM_BASE_FUCHSIA_SOURCES + MINI_CHROMIUM_BASE_POSIX_SOURCES,
               "//conditions:default": MINI_CHROMIUM_BASE_POSIX_SOURCES,
           }),
    hdrs = MINI_CHROMIUM_BASE_HEADERS +
           select({
               "@platforms//os:osx": MINI_CHROMIUM_BASE_POSIX_HEADERS,
               "@platforms//os:fuchsia": MINI_CHROMIUM_BASE_FUCHSIA_HEADERS + MINI_CHROMIUM_BASE_POSIX_HEADERS,
               "//conditions:default": MINI_CHROMIUM_BASE_POSIX_HEADERS,
           }),
    copts = select({
        "@platforms//os:osx": [
            "-DNOMINMAX",
            "-DUNICODE",
            "-DWIN32_LEAN_AND_MEAN",
            "-D_CRT_SECURE_NO_WARNINGS",
            "-D_HAS_EXCEPTIONS=0",
            "-D_UNICODE",
        ],
        "//conditions:default": [],
    }),
    includes = ["src"],
    linkopts = select({
        "@platforms//os:osx": [
            "-framework ApplicationServices",
            "-framework CoreFoundation",
            "-framework Foundation",
            "-framework IOKit",
            "-framework Security",
        ],
        "//conditions:default": [],
    }),
    textual_hdrs = [
        "src/base/atomicops_internals_atomicword_compat.h",
        "src/base/atomicops_internals_portable.h",
        "src/base/numerics/safe_conversions_impl.h",
        "src/base/numerics/safe_math_arm_impl.h",
        "src/base/numerics/safe_conversions_arm_impl.h",
        "src/base/sys_byteorder.h",
    ],
    deps = select(
        {
            "@platforms//os:fuchsia": ["@fuchsia_sdk//pkg/syslog"],
            "//conditions:default": [],
        },
    ),
)

buildflags(
    name = "chromeos_buildflags",
    out = "src/build/chromeos_buildflags.h",
    flags = {
        "IS_CHROMEOS_ASH": "0",
        "IS_CHROMEOS_LACROS": "0",
    },
)
