# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//common-mk/pkg_config.gni")

# The majority of this code is a fork of upstream repo's in AOSP.
# We are selectively pulling in the pieces of those libs and building
# them into a shared library to use in our system, and to make those
# symbols visible from the lib, we use //common-mk:visibility_default.
# The linter suggests we should explicitly export the symbols we need,
# but in this case we are achieving that by only pulling in the files we
# need, and additionally, upstream will not want to accept us annotating
# all of their code for our fairly specific purpose of build architecture.
# So we disable the linter in this case.

# gnlint: disable=GnLintVisibilityFlags

arect_src = "../aosp/frameworks/native/libs/arect"
libbase_src = "../aosp/system/core/base"
libcutils_src = "../aosp/system/core/libcutils"
libfmq_src = "../aosp/system/libfmq"
libhidl_src = "../aosp/system/libhidl"
liblog_src = "../aosp/system/core/liblog"
libutils_src = "../aosp/system/core/libutils"
native_src = "../aosp/frameworks/native"
nativewindow_src = "${native_src}/libs/nativewindow"

group("all") {
  deps = [
    ":libnnapi-support",
    ":libnnapi-support_pc",
  ]
  if (use.test) {
    deps += [
      ":libbase_testrunner",
      ":libcutils_testrunner",
      ":libfmq_testrunner",
      ":libhidl_testrunner",
      ":libhwbuf_testrunner",
      ":liblog_testrunner",
      ":libutils_testrunner",
    ]
  }
}

config("target_defaults") {
  cflags = [
    "-Wall",
    "-Werror",
    "-Wextra",
  ]
  cflags_cc = [ "-std=c++17" ]
  include_dirs = [
    "includes",
    "${libbase_src}/include",
    "${libcutils_src}/include",
    "${liblog_src}/include",
    "${libutils_src}/include",
  ]
  defines = [
    "__ANDROID_API__=30",  # Android R
  ]
}

shared_library("libnnapi-support") {
  configs += [ ":target_defaults" ]
  deps = [
    ":libbase",
    ":libcutils",
    ":libfmq",
    ":libhidl",
    ":libhwbuf",
    ":liblog",
    ":libnative",
    ":libutils",
    ":neuralnetworks",
  ]
}

generate_pkg_config("libnnapi-support_pc") {
  deps = [ ":libnnapi-support" ]
  output_name = "libnnapi-support"
  description = "Support libraries for Neural Networks API"
  version = "0.1"
  libs = [ "-lnnapi-support" ]
}

static_library("libbase") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  sources = [
    "${libbase_src}/chrono_utils.cpp",
    "${libbase_src}/errors_unix.cpp",
    "${libbase_src}/file.cpp",
    "${libbase_src}/liblog_symbols.cpp",
    "${libbase_src}/logging.cpp",
    "${libbase_src}/mapped_file.cpp",
    "${libbase_src}/parsebool.cpp",
    "${libbase_src}/process.cpp",
    "${libbase_src}/properties.cpp",
    "${libbase_src}/stringprintf.cpp",
    "${libbase_src}/strings.cpp",
    "${libbase_src}/test_utils.cpp",
    "${libbase_src}/threads.cpp",
  ]
}

if (use.test) {
  executable("libbase_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [
      "${libbase_src}/include",
      "${liblog_src}/include",
    ]
    cflags_cc = [
      # For logging_test.cc
      "-Wno-unreachable-code",
    ]
    deps = [
      ":libbase",
      ":liblog",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "${libbase_src}/chrono_utils_test.cpp",
      "${libbase_src}/endian_test.cpp",
      "${libbase_src}/errors_test.cpp",
      "${libbase_src}/logging_test.cpp",
      "${libbase_src}/macros_test.cpp",
      "${libbase_src}/mapped_file_test.cpp",
      "${libbase_src}/no_destructor_test.cpp",
      "${libbase_src}/parsebool_test.cpp",
      "${libbase_src}/parsedouble_test.cpp",
      "${libbase_src}/parseint_test.cpp",
      "${libbase_src}/process_test.cpp",
      "${libbase_src}/properties_test.cpp",
      "${libbase_src}/scopeguard_test.cpp",
      "${libbase_src}/stringprintf_test.cpp",
      "${libbase_src}/strings_test.cpp",
      "libbase/tests/properties_test.cpp",
    ]
  }
}

static_library("libcutils") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  include_dirs = [ "${libcutils_src}/include" ]
  libs = [ "rt" ]
  deps = [ ":liblog" ]
  sources = [
    "${libcutils_src}/config_utils.cpp",
    "${libcutils_src}/hashmap.cpp",
    "${libcutils_src}/load_file.cpp",
    "${libcutils_src}/native_handle.cpp",
    "${libcutils_src}/threads.cpp",
    "${libcutils_src}/trace-host.cpp",
    "libcutils/ashmem_chromeos.cpp",
  ]
}

if (use.test) {
  executable("libcutils_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [ "${libcutils_src}/include" ]
    deps = [
      ":libcutils",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "${libcutils_src}/ashmem_test.cpp",
      "${libcutils_src}/native_handle_test.cpp",
    ]
  }
}

static_library("libfmq") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  deps = [
    ":libcutils",
    ":libutils",
  ]
  include_dirs = [ "${libfmq_src}/include" ]
  sources = [
    "${libfmq_src}/EventFlag.cpp",
    "${libfmq_src}/FmqInternal.cpp",
  ]
}

if (use.test) {
  executable("libfmq_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [
      "${libfmq_src}/include",
      "${libhidl_src}/base/include",
    ]
    deps = [
      ":libfmq",
      ":libhidl",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [ "${libfmq_src}/tests/fmq_unit_tests.cpp" ]
  }
}

static_library("libhidl") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  include_dirs = [
    "${libbase_src}/include",
    "${libhidl_src}/adapter/include",
    "${libhidl_src}/base/include",
    "${libhidl_src}/libhidlmemory/include",
    "${libhidl_src}/transport/allocator/1.0/default",
    "${libhidl_src}/transport/memory/1.0/default",
    "${libhidl_src}/transport/include",
    "libhidl",
  ]
  deps = [
    ":libbase",
    ":libutils",
  ]
  sources = [
    "${libhidl_src}/base/HidlInternal.cpp",
    "${libhidl_src}/base/HidlSupport.cpp",
    "${libhidl_src}/base/Status.cpp",
    "${libhidl_src}/libhidlmemory/mapping.cpp",
    "${libhidl_src}/transport/HidlTransportUtils.cpp",
    "${libhidl_src}/transport/allocator/1.0/default/AshmemAllocator.cpp",
    "${libhidl_src}/transport/memory/1.0/default/AshmemMapper.cpp",
    "${libhidl_src}/transport/memory/1.0/default/AshmemMemory.cpp",
    "libhidl/adapter/HidlAdapterUtil.cpp",
    "libhidl/allocator/IAllocator.cpp",
    "libhidl/allocator/ashmem_allocator.cpp",
    "libhidl/base/IBase.cpp",
    "libhidl/memory/IMapper.cpp",
    "libhidl/memory/IMemory.cpp",
    "libhidl/memory/ashmem_mapper.cpp",
  ]
}

if (use.test) {
  executable("libhidl_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [
      "${libhidl_src}/include",
      "${libhidl_src}/base/include",
    ]
    deps = [
      ":libcutils",
      ":libhidl",
      ":liblog",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "libhidl/tests/ashmem_allocator_test.cpp",
      "libhidl/tests/ashmem_mapper_test.cpp",
      "libhidl/tests/hidl_support_test.cpp",
    ]
  }
}

static_library("libhwbuf") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  include_dirs = [
    "${arect_src}/include",
    "${nativewindow_src}/include",
  ]
  deps = []
  sources = [ "hardware_buffer/AHardwareBuffer.cpp" ]
}

if (use.test) {
  executable("libhwbuf_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [
      "${arect_src}/include",
      "${nativewindow_src}/include",
    ]
    deps = [
      ":libhwbuf",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [ "hardware_buffer/AHardwareBufferTest.cpp" ]
  }
}

static_library("liblog") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  include_dirs = [ "${liblog_src}/include" ]
  deps = [ ":libbase" ]
  sources = [
    "${liblog_src}/log_event_list.cpp",
    "${liblog_src}/log_event_write.cpp",
    "${liblog_src}/log_time.cpp",
    "${liblog_src}/logger_write.cpp",
    "${liblog_src}/logprint.cpp",
    "${liblog_src}/properties.cpp",
  ]
}

if (use.test) {
  executable("liblog_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [ "${liblog_src}/include" ]
    deps = [
      ":libbase",
      ":liblog",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "${liblog_src}/tests/liblog_default_tag.cpp",
      "${liblog_src}/tests/log_time_test.cpp",
    ]
  }
}

static_library("libnative") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  include_dirs = [ "${native_src}/include" ]
  deps = [ ":libcutils" ]
  sources = [ "native/shared_memory.cpp" ]
}

static_library("libutils") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  deps = [ ":liblog" ]
  include_dirs = [
    "${libbase_src}/include",
    "${libcutils_src}/include",
    "${libutils_src}/include",
  ]
  sources = [
    "${libutils_src}/Errors.cpp",
    "${libutils_src}/JenkinsHash.cpp",
    "${libutils_src}/NativeHandle.cpp",
    "${libutils_src}/RefBase.cpp",
    "${libutils_src}/SharedBuffer.cpp",
    "${libutils_src}/StrongPointer.cpp",
    "${libutils_src}/SystemClock.cpp",
    "${libutils_src}/Timers.cpp",
    "${libutils_src}/VectorImpl.cpp",
    "${libutils_src}/misc.cpp",
  ]
}

if (use.test) {
  executable("libutils_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [ "${libutils_src}/include" ]
    deps = [
      ":libutils",
      "//common-mk/testrunner:testrunner",
    ]
    sources = [
      "${libutils_src}/Mutex_test.cpp",
      "${libutils_src}/RefBase_test.cpp",
      "${libutils_src}/SharedBuffer_test.cpp",
      "${libutils_src}/StrongPointer_test.cpp",
      "${libutils_src}/SystemClock_test.cpp",
      "${libutils_src}/Vector_test.cpp",
    ]
  }
}

static_library("neuralnetworks") {
  configs += [
    "//common-mk:pic",
    "//common-mk:visibility_default",
    ":target_defaults",
  ]
  cflags_cc = [
    # All of the HIDL generated interfaces are missing override directives.
    "-Wno-inconsistent-missing-override",
  ]
  deps = [
    ":libcutils",
    ":libhidl",
    ":liblog",
  ]
  include_dirs = [
    "${libhidl_src}/base/include",
    "${libhidl_src}/adapter/include",
    "${libhidl_src}/transport/include",
  ]
  sources = [
    "neuralnetworks/1.0/ADevice.cpp",
    "neuralnetworks/1.0/AExecutionCallback.cpp",
    "neuralnetworks/1.0/APreparedModel.cpp",
    "neuralnetworks/1.0/APreparedModelCallback.cpp",
    "neuralnetworks/1.0/Device.cpp",
    "neuralnetworks/1.0/ExecutionCallback.cpp",
    "neuralnetworks/1.0/PreparedModel.cpp",
    "neuralnetworks/1.0/PreparedModelCallback.cpp",
    "neuralnetworks/1.1/ADevice.cpp",
    "neuralnetworks/1.1/Device.cpp",
    "neuralnetworks/1.2/ABurstCallback.cpp",
    "neuralnetworks/1.2/ABurstContext.cpp",
    "neuralnetworks/1.2/ADevice.cpp",
    "neuralnetworks/1.2/AExecutionCallback.cpp",
    "neuralnetworks/1.2/APreparedModel.cpp",
    "neuralnetworks/1.2/APreparedModelCallback.cpp",
    "neuralnetworks/1.2/BurstCallback.cpp",
    "neuralnetworks/1.2/BurstContext.cpp",
    "neuralnetworks/1.2/Device.cpp",
    "neuralnetworks/1.2/ExecutionCallback.cpp",
    "neuralnetworks/1.2/PreparedModel.cpp",
    "neuralnetworks/1.2/PreparedModelCallback.cpp",
    "neuralnetworks/1.2/types.cpp",
    "neuralnetworks/1.3/ABuffer.cpp",
    "neuralnetworks/1.3/ADevice.cpp",
    "neuralnetworks/1.3/AExecutionCallback.cpp",
    "neuralnetworks/1.3/AFencedExecutionCallback.cpp",
    "neuralnetworks/1.3/APreparedModel.cpp",
    "neuralnetworks/1.3/APreparedModelCallback.cpp",
    "neuralnetworks/1.3/Buffer.cpp",
    "neuralnetworks/1.3/Device.cpp",
    "neuralnetworks/1.3/ExecutionCallback.cpp",
    "neuralnetworks/1.3/FencedExecutionCallback.cpp",
    "neuralnetworks/1.3/PreparedModel.cpp",
    "neuralnetworks/1.3/PreparedModelCallback.cpp",
    "neuralnetworks/1.3/types.cpp",
  ]
}
