# 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 += [
    # 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
    "-fno-delete-null-pointer-checks",  # see b/288107039

    # 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",
  ]
  if (!is_native_target_build) {
    ldflags += [ "-Wl,--wrap=stat" ]
  }
}

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",
  ]
}
