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

config("platform_configuration") {
  configs = [ "//starboard/build/config/sabi" ]
  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",

    # Mimic build/cmake/android.toolchain.cmake in the Android NDK.
    "-Wl,--exclude-libs,libunwind.a",
  ]
  cflags = []

  if (current_toolchain == host_toolchain) {
    cflags += [ "-O2" ]
  }
  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" ]
  }

  if (current_toolchain != host_toolchain) {
    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",
      "-fno-exceptions",
      "-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",
    ]
    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") {
  cflags = [ "-fPIE" ]
  ldflags = [ "-pie" ]
}

config("library_config") {
  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",
  ]
}
