# Copyright 2023 The Cobalt 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.

config("cxx_config") {
  cflags = [ "-nostdinc" ]

  cflags_cc = [
    "-std=c++17",
    "-nostdinc++",
    "-fvisibility-inlines-hidden",
    "-fms-compatibility-version=19.00",
    "-Wall",
    "-Wextra",
    "-Wwrite-strings",
    "-Wno-long-long",
    "-Werror=return-type",
    "-Wno-user-defined-literals",
    "-Wno-bitwise-op-parentheses",
    "-Wno-shift-op-parentheses",
    "-Wno-error",
    "-Wno-unused-parameter",
    "-Wno-unused-command-line-argument",
    "-fPIC",
  ]

  defines = [
    "_LIBCPP_HAS_NO_FSTREAM",
    "_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION",

    "_LIBCPP_HAS_MUSL_LIBC",
    "_LIBCPP_HAS_THREAD_API_EXTERNAL",

    # Let the library headers know they are currently being used to build the
    # library.
    "_LIBCPP_BUILDING_LIBRARY",

    # This macro is used to build libcxxabi with libunwind.
    "LIBCXX_BUILDING_LIBCXXABI",
  ]

  include_dirs = [
    "include",
    "src",
    "//third_party/llvm-project/libcxxabi/include",
  ]
}

static_library("cxx") {
  sources = [
    "src/algorithm.cpp",
    "src/any.cpp",
    "src/bind.cpp",
    "src/chrono.cpp",
    "src/condition_variable.cpp",
    "src/condition_variable_destructor.cpp",
    "src/exception.cpp",
    "src/functional.cpp",
    "src/future.cpp",
    "src/hash.cpp",
    "src/ios.cpp",
    "src/ios.instantiations.cpp",
    "src/locale.cpp",
    "src/memory.cpp",
    "src/mutex.cpp",
    "src/mutex_destructor.cpp",
    "src/new.cpp",
    "src/optional.cpp",
    "src/regex.cpp",
    "src/shared_mutex.cpp",
    "src/stdexcept.cpp",
    "src/string.cpp",
    "src/strstream.cpp",
    "src/system_error.cpp",
    "src/thread.cpp",
    "src/typeinfo.cpp",
    "src/utility.cpp",
    "src/valarray.cpp",
    "src/variant.cpp",
    "src/vector.cpp",

    # src/atomic.cpp is omitted because this file breaks the build.

    # src/charconv.cpp is omitted because this file breaks the build. It
    # requires C++20's "std::bit_cast".

    # src/format.cpp is omitted because this experimental file breaks the build.

    # src/iostream.cpp is unneeded. It introduces "getc", "stdin", and "ungetc"
    # as API leaks.

    # src/random.cpp is unneeded. It introduces "close", "open" and "read" as
    # API leaks.

    # src/legacy_debug_handler.cpp, src/memory_resource.cpp, and
    # src/random_shuffle.cpp are unneeded. These require replacing C++20's
    # "constinit" with "_LIBCPP_CONSTINIT".

    # src/barrier.cpp, src/debug.cpp, src/legacy_pointer_safety.cpp, and
    # src/verbose_abort.cpp are unneeded.
  ]

  configs += [ ":cxx_config" ]

  deps = [
    "//starboard:starboard_headers_only",
    "//starboard/common",
    "//third_party/llvm-project/compiler-rt:compiler_rt",
    "//third_party/llvm-project/libcxxabi:cxxabi",
    "//third_party/musl:c",
  ]
  if (!build_with_separate_cobalt_toolchain) {
    deps += [ "//third_party/llvm-project/libunwind:unwind_evergreen" ]
  }
}
