# Copyright 2021 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.

import("//starboard/android/shared/toolchain/toolchain.gni")

config("platform_configuration") {
  configs = [ "//starboard/build/config/sabi" ]
  cflags = []

  defines = []
  ldflags = [
    # The NDK default "ld" is actually the gold linker for all architectures
    # except arm64 (aarch64) where it"s the bfd linker. Don"t use either of
    # those, rather use lld everywhere. See release notes for NDK 19:
    # https://developer.android.com/ndk/downloads/revision_history
    "-fuse-ld=lld",
  ]
  if (is_debug) {
    cflags += [ "-O0" ]
    configs += [ "//build/config/compiler:rtti" ]
  } else if (is_devel) {
    cflags += [ "-O2" ]
    configs += [ "//build/config/compiler:rtti" ]
  } else {
    cflags += [ "-gline-tables-only" ]
  }

  libs = [
    "EGL",
    "GLESv2",
    "OpenSLES",
    "android",
    "log",
    "mediandk",
  ]

  if (!cobalt_fastbuild && (is_debug || is_devel)) {
    cflags += [ "-g" ]
  }

  if (use_asan) {
    cflags += [
      "-fsanitize=address",
      "-fno-omit-frame-pointer",
    ]
    ldflags += [
      "-fsanitize=address",

      # Force linking of the helpers in sanitizer_options.cc
      "-Wl,-u_sanitizer_options_link_helper",
    ]
    defines += [ "ADDRESS_SANITIZER" ]
  } else if (use_tsan) {
    cflags += [
      "-fsanitize=thread",
      "-fno-omit-frame-pointer",
    ]
    ldflags += [ "-fsanitize=thread" ]
    defines += [ "THREAD_SANITIZER" ]
  }

  cflags_cc = [ "-std=c++14" ]
  cflags += [
    # libwebp uses the cpufeatures library to detect ARM NEON support
    "-I${android_ndk_path}/sources/android/cpufeatures",

    # Mimic build/cmake/android.toolchain.cmake in the Android NDK.
    "-ffunction-sections",
    "-funwind-tables",
    "-fstack-protector-strong",
    "-no-canonical-prefixes",

    # Other flags
    "-fsigned-char",
    "-fno-limit-debug-info",
    "-fcolor-diagnostics",
    "-fno-strict-aliasing",  # See http://crbug.com/32204

    # Default visibility is hidden to enable dead stripping.
    "-fvisibility=hidden",

    # Any warning will stop the build.
    "-Werror",

    # Disable errors for the warning till the Android NDK r19 is fixed.
    # The warning is trigger when compiling .c files and complains for
    # "-stdlib=libc++" which is added by the NDK.
    "-Wno-error=unused-command-line-argument",

    # Don"t warn about register variables (in base and net)
    "-Wno-deprecated-register",

    # Don"t warn about deprecated ICU methods (in googleurl and net)
    "-Wno-deprecated-declarations",

    # Skia doesn"t use overrides.
    "-Wno-inconsistent-missing-override",

    # shifting a negative signed value is undefined
    "-Wno-shift-negative-value",

    # Don"t warn for implicit sign conversions. (in v8 and protobuf)
    "-Wno-sign-conversion",

    # TODO: b/287129945 - Fix compiler warnings
    "-Wno-implicit-const-int-float-conversion",

    # TODO: b/287320271 - Fix compiler warnings
    "-Wno-deprecated-copy",

    # TODO: b/287324882 - Fix compiler warnings
    "-Wno-unused-but-set-variable",
  ]
  defines += [
    # Enable compile-time decisions based on the ABI
    "ANDROID_ABI=$android_abi",

    # -DANDROID is an argument to some ifdefs in the NDK"s eglplatform.h
    "ANDROID",

    # Cobalt on Linux flag
    "COBALT_LINUX",

    # So that we get the PRI* macros from inttypes.h
    "__STDC_FORMAT_MACROS",

    # Enable GNU extensions to get prototypes like ffsl.
    "_GNU_SOURCE=1",

    # Undefining __linux__ causes the system headers to make wrong
    # assumptions about which C-library is used on the platform.
    "__BIONIC__",

    # Undefining __linux__ leaves libc++ without a threads implementation.
    # TODO: See if there"s a way to make libcpp threading use Starboard.
    "_LIBCPP_HAS_THREAD_API_PTHREAD",
  ]
  ldflags += [
    # Use the static LLVM libc++.
    "-static-libstdc++",

    # Mimic build/cmake/android.toolchain.cmake in the Android NDK, but
    # force build-id to sha1, so that older lldb versions can still find
    # debugsymbols, see https://github.com/android-ndk/ndk/issues/885
    "-Wl,--build-id=sha1",
    "-Wl,--warn-shared-textrel",
    "-Wl,--fatal-warnings",
    "-Wl,--gc-sections",
    "-Wl,-z,nocopyreloc",

    # Wrapper synchronizes punch-out video bounds with the UI frame.
    "-Wl,--wrap=eglSwapBuffers",
  ]
}

config("size") {
  cflags = [ "-Os" ]
}

config("speed") {
  cflags = [ "-O2" ]
}

config("executable_config") {
  if (is_starboardized_toolchain) {
    cflags = [ "-fPIE" ]
    ldflags = [ "-pie" ]
  }
}

config("library_config") {
  if (is_starboardized_toolchain) {
    cflags = [ "-fPIC" ]
  }
}

config("pedantic_warnings") {
  cflags = [
    "-Wall",
    "-Wextra",
    "-Wunreachable-code",

    # Don't get pedantic about warnings from base macros. These must be
    # disabled after the -Wall above, so this has to be done here rather
    # than in the platform's target toolchain.
    # TODO: Rebase base and use static_assert instead of COMPILE_ASSERT
    "-Wno-unused-local-typedef",  # COMPILE_ASSERT
    "-Wno-missing-field-initializers",  # LAZY_INSTANCE_INITIALIZER

    # It's OK not to use some input parameters. Note that the order
    # matters: Wall implies Wunused-parameter and Wno-unused-parameter
    # has no effect if specified before Wall.
    "-Wno-unused-parameter",
  ]
}
