#
#  Copyright (C) 2015 Google, Inc.
#
#  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("default_include_dirs") {
  include_dirs = [
    "//third_party/libhardware/include/",
  ]
}

config("linux") {
  # TODO(keybuk): AndroidConfig.h or equivalent

  cflags = [
    #TODO(jpawlowski): uncomment once we have no warnings on linux build
    #    "-Wall",
    #    "-Werror",
    "-g",
    "-O0",
    "-fpic",
    "-fdata-sections",
    "-ffunction-sections",
    "-fvisibility=hidden",
  ]

  cflags_c = [ "-std=c99" ]

  cflags_cc = [
#TODO(jpawlowski): we should use same c++ version as Android, which is c++11,
# but we use some c++14 features. Uncomment when this get fixed in code.:
    "-std=c++14",
    "-fno-exceptions",
    "-fpermissive",
  ]

  defines = [
    "_FORTIFY_SOURCE=2",
    "_GNU_SOURCE",
    "HAS_NO_BDROID_BUILDCFG",
    "LOG_NDEBUG=1",
    "EXPORT_SYMBOL=__attribute__((visibility(\"default\")))",
    "KERNEL_MISSING_CLOCK_BOOTTIME_ALARM=TRUE",

    # This is a macro to that can be used by android hardware/libhardware
    # to not include dependencies on core project. This is a temporary
    # workaround until we get rid of dependency on hardware.
    "_HW_DONT_INCLUDE_CORE_=1",

    # This is a macro to that can be used by source code to detect if the
    # current build is done by GN or via Android.mk. This is a temporary
    # workaround until we can remove all Android-specific dependencies.
    "OS_GENERIC",
  ]
}

config("pic") {
  cflags = [ "-fPIC" ]
}

config("gc") {
  ldflags = [ "-Wl,--gc-sections" ]
}
