# 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/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",
  ]
}
