# 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 += [
      "-frtti",
      "-O0",
    ]
  } else if (is_devel) {
    cflags += [
      "-frtti",
      "-O2",
    ]
  } else {
    cflags += [
      "-fno-rtti",
      "-gline-tables-only",
    ]
  }

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

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

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

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