#
# Copyright (C) 2017 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 lists the entry points visible to applications that use the
# Neural Networks lib. Other entry points present in the library won't be
# usable.

LIBNEURALNETWORKS {
  global:
    ANeuralNetworks_getDefaultLoopTimeout; # introduced=30
    ANeuralNetworks_getDeviceCount; # introduced=Q
    ANeuralNetworks_getDevice; # introduced=Q
    ANeuralNetworks_getMaximumLoopTimeout; # introduced=30
    ANeuralNetworks_getRuntimeFeatureLevel; # introduced=31
    ANeuralNetworksDevice_getName; # introduced=Q
    ANeuralNetworksDevice_getType; # introduced=Q
    ANeuralNetworksDevice_getVersion; # introduced=Q
    ANeuralNetworksDevice_getFeatureLevel; # introduced=Q
    ANeuralNetworksDevice_wait; # introduced=30
    ANeuralNetworksMemory_createFromAHardwareBuffer; # introduced=Q
    ANeuralNetworksMemory_createFromDesc; # introduced=30
    ANeuralNetworksMemory_createFromFd;
    ANeuralNetworksMemory_copy; # introduced=30
    ANeuralNetworksMemory_free;
    ANeuralNetworksMemoryDesc_addInputRole; # introduced=30
    ANeuralNetworksMemoryDesc_addOutputRole; # introduced=30
    ANeuralNetworksMemoryDesc_create; # introduced=30
    ANeuralNetworksMemoryDesc_finish; # introduced=30
    ANeuralNetworksMemoryDesc_free; # introduced=30
    ANeuralNetworksMemoryDesc_setDimensions; # introduced=30
    ANeuralNetworksModel_create;
    ANeuralNetworksModel_free;
    ANeuralNetworksModel_finish;
    ANeuralNetworksModel_addOperand;
    ANeuralNetworksModel_setOperandSymmPerChannelQuantParams; # introduced=Q
    ANeuralNetworksModel_setOperandValue;
    ANeuralNetworksModel_setOperandValueFromMemory;
    ANeuralNetworksModel_setOperandValueFromModel; # introduced=30
    ANeuralNetworksModel_addOperation;
    ANeuralNetworksModel_identifyInputsAndOutputs;
    ANeuralNetworksModel_relaxComputationFloat32toFloat16;
    ANeuralNetworksModel_getSupportedOperationsForDevices; # introduced=Q
    ANeuralNetworksCompilation_create;
    ANeuralNetworksCompilation_createForDevices; # introduced=Q
    ANeuralNetworksCompilation_free;
    ANeuralNetworksCompilation_setCaching; # introduced=Q
    ANeuralNetworksCompilation_setPreference;
    ANeuralNetworksCompilation_finish;
    ANeuralNetworksCompilation_setPriority; # introduced=30
    ANeuralNetworksCompilation_setTimeout; # introduced=30
    ANeuralNetworksCompilation_getPreferredMemoryAlignmentForInput; # introduced=31
    ANeuralNetworksCompilation_getPreferredMemoryPaddingForInput; # introduced=31
    ANeuralNetworksCompilation_getPreferredMemoryAlignmentForOutput; # introduced=31
    ANeuralNetworksCompilation_getPreferredMemoryPaddingForOutput; # introduced=31
    ANeuralNetworksBurst_create; # introduced=Q
    ANeuralNetworksBurst_free; # introduced=Q
    ANeuralNetworksExecution_burstCompute; # introduced=Q
    ANeuralNetworksExecution_compute; # introduced=Q
    ANeuralNetworksExecution_create;
    ANeuralNetworksExecution_enableInputAndOutputPadding; # introduced=31
    ANeuralNetworksExecution_free;
    ANeuralNetworksExecution_getDuration; # introduced=Q
    ANeuralNetworksExecution_setInput;
    ANeuralNetworksExecution_setInputFromMemory;
    ANeuralNetworksExecution_setMeasureTiming; # introduced=Q
    ANeuralNetworksExecution_setOutput;
    ANeuralNetworksExecution_setOutputFromMemory;
    ANeuralNetworksExecution_setReusable; # introduced=31
    ANeuralNetworksExecution_startCompute;
    ANeuralNetworksExecution_startComputeWithDependencies; # introduced=30
    ANeuralNetworksExecution_getOutputOperandDimensions; # introduced=Q
    ANeuralNetworksExecution_getOutputOperandRank; # introduced=Q
    ANeuralNetworksExecution_setTimeout; # introduced=30
    ANeuralNetworksExecution_setLoopTimeout; # introduced=30
    ANeuralNetworksEvent_createFromSyncFenceFd; # introduced=30
    ANeuralNetworksEvent_getSyncFenceFd; # introduced=30
    ANeuralNetworksEvent_wait;
    ANeuralNetworksEvent_free;
  local:
    *;
};

LIBNEURALNETWORKS_PLATFORM {
  global:
    ANeuralNetworksDevice_getExtensionSupport;
    ANeuralNetworksModel_getExtensionOperandType;
    ANeuralNetworksModel_getExtensionOperationType;
    ANeuralNetworksModel_setOperandExtensionData;
} LIBNEURALNETWORKS;
