# 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/libbase"
libcutils_src = "../aosp/system/core/libcutils"
libfmq_src = "../aosp/system/libfmq"
libhidl_src = "../aosp/system/libhidl"
liblog_src = "../aosp/system/logging/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",
    "${libfmq_src}/base",
  ]
  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/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",
  ]
}
