Exported eager API TFE_* symbols in the dynamic library (#12785)
* Exported TFE_* symbols in the dynamic library. * Exported the eager API symbols for Windows too. * Added missing macros.
This commit is contained in:
parent
12a628a623
commit
4a24db2886
@ -20,6 +20,25 @@ limitations under the License.
|
|||||||
|
|
||||||
#include "tensorflow/c/c_api.h"
|
#include "tensorflow/c/c_api.h"
|
||||||
|
|
||||||
|
// Macro to control visibility of exported symbols in the shared library (.so,
|
||||||
|
// .dylib, .dll).
|
||||||
|
// This duplicates the TF_EXPORT macro definition in
|
||||||
|
// tensorflow/core/platform/macros.h in order to keep this .h file independent
|
||||||
|
// of any other includes.$a
|
||||||
|
#ifdef SWIG
|
||||||
|
#define TF_CAPI_EXPORT
|
||||||
|
#else
|
||||||
|
#if defined(COMPILER_MSVC)
|
||||||
|
#ifdef TF_COMPILE_LIBRARY
|
||||||
|
#define TF_CAPI_EXPORT __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define TF_CAPI_EXPORT __declspec(dllimport)
|
||||||
|
#endif // TF_COMPILE_LIBRARY
|
||||||
|
#else
|
||||||
|
#define TF_CAPI_EXPORT __attribute__((visibility("default")))
|
||||||
|
#endif // COMPILER_MSVC
|
||||||
|
#endif // SWIG
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -30,10 +49,10 @@ extern "C" {
|
|||||||
// TODO(ashankar): Merge with TF_Session?
|
// TODO(ashankar): Merge with TF_Session?
|
||||||
typedef struct TFE_Context TFE_Context;
|
typedef struct TFE_Context TFE_Context;
|
||||||
|
|
||||||
extern TFE_Context* TFE_NewContext(const TF_SessionOptions* opts,
|
TF_CAPI_EXPORT extern TFE_Context* TFE_NewContext(const TF_SessionOptions* opts,
|
||||||
TF_Status* status);
|
TF_Status* status);
|
||||||
extern void TFE_DeleteContext(TFE_Context* ctx, TF_Status* status);
|
TF_CAPI_EXPORT extern void TFE_DeleteContext(TFE_Context* ctx, TF_Status* status);
|
||||||
extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
|
TF_CAPI_EXPORT extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
|
||||||
TF_Status* status);
|
TF_Status* status);
|
||||||
|
|
||||||
// A handle to a tensor on a device.
|
// A handle to a tensor on a device.
|
||||||
@ -43,13 +62,14 @@ extern TF_DeviceList* TFE_ContextListDevices(TFE_Context* ctx,
|
|||||||
// placed in memory of different devices or remote address spaces.
|
// placed in memory of different devices or remote address spaces.
|
||||||
typedef struct TFE_TensorHandle TFE_TensorHandle;
|
typedef struct TFE_TensorHandle TFE_TensorHandle;
|
||||||
|
|
||||||
extern TFE_TensorHandle* TFE_NewTensorHandle(TF_Tensor* t, TF_Status* status);
|
TF_CAPI_EXPORT extern TFE_TensorHandle* TFE_NewTensorHandle(TF_Tensor* t,
|
||||||
extern void TFE_DeleteTensorHandle(TFE_TensorHandle* h);
|
TF_Status* status);
|
||||||
extern TF_DataType TFE_TensorHandleDataType(TFE_TensorHandle* h);
|
TF_CAPI_EXPORT extern void TFE_DeleteTensorHandle(TFE_TensorHandle* h);
|
||||||
extern int TFE_TensorHandleNumDims(TFE_TensorHandle* h);
|
TF_CAPI_EXPORT extern TF_DataType TFE_TensorHandleDataType(TFE_TensorHandle* h);
|
||||||
extern int64_t TFE_TensorHandleDim(TFE_TensorHandle* h, int dim_index);
|
TF_CAPI_EXPORT extern int TFE_TensorHandleNumDims(TFE_TensorHandle* h);
|
||||||
extern const char* TFE_TensorHandleDeviceName(TFE_TensorHandle* h);
|
TF_CAPI_EXPORT extern int64_t TFE_TensorHandleDim(TFE_TensorHandle* h, int dim_index);
|
||||||
extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
|
TF_CAPI_EXPORT extern const char* TFE_TensorHandleDeviceName(TFE_TensorHandle* h);
|
||||||
|
TF_CAPI_EXPORT extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
|
||||||
TF_Status* status);
|
TF_Status* status);
|
||||||
|
|
||||||
// Create a new TFE_TensorHandle with the same contents as 'h' but placed
|
// Create a new TFE_TensorHandle with the same contents as 'h' but placed
|
||||||
@ -58,7 +78,7 @@ extern TF_Tensor* TFE_TensorHandleResolve(TFE_TensorHandle* h,
|
|||||||
// that shares the underlying buffer. Otherwise, it currently requires at least
|
// that shares the underlying buffer. Otherwise, it currently requires at least
|
||||||
// one of the source or destination devices to be CPU (i.e., for the source or
|
// one of the source or destination devices to be CPU (i.e., for the source or
|
||||||
// destination tensor to be placed in host memory).
|
// destination tensor to be placed in host memory).
|
||||||
extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
|
TF_CAPI_EXPORT extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
|
||||||
TFE_Context* ctx,
|
TFE_Context* ctx,
|
||||||
const char* device_name,
|
const char* device_name,
|
||||||
TF_Status* status);
|
TF_Status* status);
|
||||||
@ -76,47 +96,47 @@ extern TFE_TensorHandle* TFE_TensorHandleCopyToDevice(TFE_TensorHandle* h,
|
|||||||
// the additional sanity checks there seem unnecessary;
|
// the additional sanity checks there seem unnecessary;
|
||||||
typedef struct TFE_Op TFE_Op;
|
typedef struct TFE_Op TFE_Op;
|
||||||
|
|
||||||
extern TFE_Op* TFE_NewOp(TFE_Context* ctx, const char* op_or_function_name,
|
TF_CAPI_EXPORT extern TFE_Op* TFE_NewOp(TFE_Context* ctx, const char* op_or_function_name,
|
||||||
TF_Status* status);
|
TF_Status* status);
|
||||||
extern void TFE_DeleteOp(TFE_Op* op);
|
TF_CAPI_EXPORT extern void TFE_DeleteOp(TFE_Op* op);
|
||||||
|
|
||||||
// TODO(ashankar): TFE_OpSetDevice and TFE_Execute should not have a TFE_Context
|
// TODO(ashankar): TFE_OpSetDevice and TFE_Execute should not have a TFE_Context
|
||||||
// parameter. Instead, the TFE_Context should be captured when creating the
|
// parameter. Instead, the TFE_Context should be captured when creating the
|
||||||
// TFE_Op.
|
// TFE_Op.
|
||||||
extern void TFE_OpSetDevice(TFE_Op* op, TFE_Context* ctx,
|
TF_CAPI_EXPORT extern void TFE_OpSetDevice(TFE_Op* op, TFE_Context* ctx,
|
||||||
const char* device_name, TF_Status* status);
|
const char* device_name, TF_Status* status);
|
||||||
|
|
||||||
extern void TFE_OpAddInput(TFE_Op* op, TFE_TensorHandle* h, TF_Status* status);
|
TF_CAPI_EXPORT extern void TFE_OpAddInput(TFE_Op* op, TFE_TensorHandle* h, TF_Status* status);
|
||||||
|
|
||||||
extern TF_AttrType TFE_OpGetAttrType(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern TF_AttrType TFE_OpGetAttrType(TFE_Op* op, const char* attr_name,
|
||||||
unsigned char* is_list, TF_Status* status);
|
unsigned char* is_list, TF_Status* status);
|
||||||
|
|
||||||
extern void TFE_OpSetAttrString(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrString(TFE_Op* op, const char* attr_name,
|
||||||
const char* value);
|
const char* value);
|
||||||
extern void TFE_OpSetAttrInt(TFE_Op* op, const char* attr_name, int64_t value);
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrInt(TFE_Op* op, const char* attr_name, int64_t value);
|
||||||
extern void TFE_OpSetAttrFloat(TFE_Op* op, const char* attr_name, float value);
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrFloat(TFE_Op* op, const char* attr_name, float value);
|
||||||
extern void TFE_OpSetAttrBool(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrBool(TFE_Op* op, const char* attr_name,
|
||||||
unsigned char value);
|
unsigned char value);
|
||||||
extern void TFE_OpSetAttrType(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrType(TFE_Op* op, const char* attr_name,
|
||||||
TF_DataType value);
|
TF_DataType value);
|
||||||
// If the number of dimensions is unknown, `num_dims` must be set to
|
// If the number of dimensions is unknown, `num_dims` must be set to
|
||||||
// -1 and `dims` can be null. If a dimension is unknown, the
|
// -1 and `dims` can be null. If a dimension is unknown, the
|
||||||
// corresponding entry in the `dims` array must be -1.
|
// corresponding entry in the `dims` array must be -1.
|
||||||
extern void TFE_OpSetAttrShape(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrShape(TFE_Op* op, const char* attr_name,
|
||||||
const int64_t* dims, const int num_dims,
|
const int64_t* dims, const int num_dims,
|
||||||
TF_Status* out_status);
|
TF_Status* out_status);
|
||||||
|
|
||||||
extern void TFE_OpSetAttrStringList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrStringList(TFE_Op* op, const char* attr_name,
|
||||||
const char** value, int num_values);
|
const char** value, int num_values);
|
||||||
extern void TFE_OpSetAttrIntList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrIntList(TFE_Op* op, const char* attr_name,
|
||||||
const int64_t* values, int num_values);
|
const int64_t* values, int num_values);
|
||||||
extern void TFE_OpSetAttrFloatList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrFloatList(TFE_Op* op, const char* attr_name,
|
||||||
const float* values, int num_values);
|
const float* values, int num_values);
|
||||||
extern void TFE_OpSetAttrBoolList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrBoolList(TFE_Op* op, const char* attr_name,
|
||||||
const unsigned char* values, int num_values);
|
const unsigned char* values, int num_values);
|
||||||
extern void TFE_OpSetAttrTypeList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrTypeList(TFE_Op* op, const char* attr_name,
|
||||||
const TF_DataType* values, int num_values);
|
const TF_DataType* values, int num_values);
|
||||||
extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
|
TF_CAPI_EXPORT extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
|
||||||
const int64_t** dims, const int* num_dims,
|
const int64_t** dims, const int* num_dims,
|
||||||
int num_values, TF_Status* out_status);
|
int num_values, TF_Status* out_status);
|
||||||
|
|
||||||
@ -128,12 +148,12 @@ extern void TFE_OpSetAttrShapeList(TFE_Op* op, const char* attr_name,
|
|||||||
//
|
//
|
||||||
// On return, 'num_retvals' will be set to the actual number of outputs
|
// On return, 'num_retvals' will be set to the actual number of outputs
|
||||||
// returned by the operation.
|
// returned by the operation.
|
||||||
extern void TFE_Execute(TFE_Op* op, TFE_TensorHandle** retvals,
|
TF_CAPI_EXPORT extern void TFE_Execute(TFE_Op* op, TFE_TensorHandle** retvals,
|
||||||
int* num_retvals, TF_Status* status);
|
int* num_retvals, TF_Status* status);
|
||||||
|
|
||||||
// Add a function (serialized FunctionDef protocol buffer) to ctx so
|
// Add a function (serialized FunctionDef protocol buffer) to ctx so
|
||||||
// that it can be invoked using TFE_Execute.
|
// that it can be invoked using TFE_Execute.
|
||||||
extern void TFE_ContextAddFunctionDef(TFE_Context* ctx,
|
TF_CAPI_EXPORT extern void TFE_ContextAddFunctionDef(TFE_Context* ctx,
|
||||||
const char* serialized_function_def,
|
const char* serialized_function_def,
|
||||||
size_t size, TF_Status* status);
|
size_t size, TF_Status* status);
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ VERS_1.0 {
|
|||||||
# Export symbols in c_api.h.
|
# Export symbols in c_api.h.
|
||||||
global:
|
global:
|
||||||
TF_*;
|
TF_*;
|
||||||
|
TFE_*;
|
||||||
|
|
||||||
# Hide everything else.
|
# Hide everything else.
|
||||||
local:
|
local:
|
||||||
|
@ -2,4 +2,5 @@
|
|||||||
*perftools*gputools*
|
*perftools*gputools*
|
||||||
*tf_*
|
*tf_*
|
||||||
TF_*
|
TF_*
|
||||||
|
TFE_*
|
||||||
*nsync_*
|
*nsync_*
|
||||||
|
@ -3,6 +3,7 @@ tensorflow {
|
|||||||
*tensorflow*;
|
*tensorflow*;
|
||||||
*perftools*gputools*;
|
*perftools*gputools*;
|
||||||
TF_*;
|
TF_*;
|
||||||
|
TFE_*;
|
||||||
*nsync_*;
|
*nsync_*;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
|
Loading…
Reference in New Issue
Block a user