#
# Copyright 2020 The Android Open-Source Project
#
# 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.
#

#
# This makefile exports
#
# NATIVE_BRIDGE_PRODUCT_PACKAGES: Add this to PRODUCT_PACKAGES for your project to facilitate
# native bridge support.
#
# NATIVE_BRIDGE_MODIFIED_GUEST_LIBS: List of modified guest libraries that require host counterpart.
#

NATIVE_BRIDGE_PRODUCT_PACKAGES := \
    libnative_bridge_vdso.native_bridge \
    native_bridge_guest_app_process.native_bridge \
    native_bridge_guest_linker.native_bridge

# TODO(b/141167717): using "bootstrap" to make APEX libraries compatible with native bridge:
#
# If library is APEX-enabled:
#
#   Then "libraryname" is not installed in the  /system/lib since it's
#   supposed to be installed into APEX.
#
#   However, "libraryname.bootstrap" goes into /system/lib/bootstrap.
#
#   Native bridge isn't compatible with APEX yet thus "libraryname.native_bridge"
#   is not installed anywhere at all.
#
#   However, "libraryname.bootstrap.native_bridge" gets installed into
#   /system/lib/$GUEST_ARCH/ - as we need for native bridge.
#
# Note: this doesn't affect native libraries at all.

# Original guest libraries.
NATIVE_BRIDGE_ORIG_GUEST_LIBS := \
    libandroidicu.bootstrap \
    libcompiler_rt \
    libcrypto \
    libcutils \
    libdl.bootstrap \
    libdl_android.bootstrap \
    libicu.bootstrap \
    liblog \
    libm.bootstrap \
    libsqlite \
    libssl \
    libstdc++ \
    libsync \
    libutils \
    libz

NATIVE_BRIDGE_PRODUCT_PACKAGES += \
    libclcore.bc \
    libclcore_neon.bc

NATIVE_BRIDGE_ORIG_GUEST_LIBS += \
    libRS \
    libRSDriver \
    libnative_bridge_guest_libRSSupport

# These native libraries are needed to pass CtsJniTestCases, we do not use them in any way and
# once/if build system allows us to build dummy arm libraries they can be replaced with empty ones.
#NATIVE_BRIDGE_ORIG_GUEST_LIBS += \
#    libart \
#    libvorbisidec

# These libraries need special support on the native bridge implementation side.
NATIVE_BRIDGE_MODIFIED_GUEST_LIBS := \
    libaaudio \
    libamidi \
    libandroid \
    libandroid_runtime \
    libbinder_ndk \
    libc \
    libcamera2ndk \
    libEGL \
    libGLESv1_CM \
    libGLESv2 \
    libGLESv3 \
    libicui18n \
    libicuuc \
    libjnigraphics \
    libmediandk \
    libnativehelper \
    libnativewindow \
    libneuralnetworks \
    libOpenMAXAL \
    libOpenSLES \
    libvulkan \
    libwebviewchromium_plat_support

# Original guest libraries are built for native_bridge
NATIVE_BRIDGE_PRODUCT_PACKAGES += \
    $(addsuffix .native_bridge,$(NATIVE_BRIDGE_ORIG_GUEST_LIBS))

# Modified guest libraries are built for native_bridge and
# have special build target prefix
NATIVE_BRIDGE_PRODUCT_PACKAGES += \
    $(addprefix libnative_bridge_guest_,$(addsuffix .native_bridge,$(NATIVE_BRIDGE_MODIFIED_GUEST_LIBS)))

NATIVE_BRIDGE_ORIG_GUEST_LIBS :=
