This is an automated email from the ASF dual-hosted git repository.

zhasheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git


The following commit(s) were added to refs/heads/master by this push:
     new 51340d8  Add compiled_with_cxx11_abi API  (#18836)
51340d8 is described below

commit 51340d8f40721e03938e0021c6cbb557a44dd90e
Author: Haibin Lin <[email protected]>
AuthorDate: Sat Aug 1 16:23:03 2020 -0700

    Add compiled_with_cxx11_abi API  (#18836)
    
    * draft
    
    * add impl
    
    * add test
    
    * set default val
    
    Co-authored-by: Ubuntu <[email protected]>
---
 CMakeLists.txt                         |  7 +++++++
 config/darwin.cmake                    |  1 +
 config/distribution/darwin_cpu.cmake   |  1 +
 config/distribution/linux_cpu.cmake    |  1 +
 config/distribution/linux_cu100.cmake  |  1 +
 config/distribution/linux_cu101.cmake  |  1 +
 config/distribution/linux_cu102.cmake  |  1 +
 config/distribution/linux_cu92.cmake   |  1 +
 config/distribution/linux_native.cmake |  1 +
 config/linux.cmake                     |  1 +
 config/linux_gpu.cmake                 |  1 +
 include/mxnet/c_api.h                  |  6 ++++++
 include/mxnet/libinfo.h                |  7 +++++++
 python/mxnet/library.py                | 12 ++++++++++++
 src/c_api/c_api.cc                     |  9 +++++++++
 src/libinfo.cc                         |  3 +++
 tests/python/unittest/test_runtime.py  |  3 +++
 17 files changed, 57 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e302ac7..c9e2e18 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -89,6 +89,7 @@ cmake_dependent_option(ENABLE_TESTCOVERAGE "Enable 
compilation with test coverag
 option(USE_INT64_TENSOR_SIZE "Use int64_t to represent the total number of 
elements in a tensor" OFF)
 option(BUILD_CYTHON_MODULES "Build cython modules." OFF)
 option(LOG_FATAL_THROW "Log exceptions but do not abort" ON)
+option(USE_CXX11_ABI "Build with GLIBCXX_USE_CXX11_ABI" ON)
 cmake_dependent_option(USE_SPLIT_ARCH_DLL "Build a separate DLL for each Cuda 
arch (Windows only)." ON "MSVC" OFF)
 cmake_dependent_option(USE_CCACHE "Attempt using CCache to wrap the 
compilation" ON "UNIX" OFF)
 
@@ -99,6 +100,12 @@ message(STATUS "CMAKE_SYSTEM_PROCESSOR 
${CMAKE_SYSTEM_PROCESSOR}")
 
 message(STATUS "CMAKE_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}")
 
+if(USE_CXX11_ABI)
+  add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
+else()
+  add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
+endif()
+
 if(USE_TVM_OP)
   add_definitions(-DMXNET_USE_TVM_OP=1)
 endif()
diff --git a/config/darwin.cmake b/config/darwin.cmake
index a65509f..12fd034 100644
--- a/config/darwin.cmake
+++ b/config/darwin.cmake
@@ -128,3 +128,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF)
 set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.")
 set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation 
support")
 set(USE_NVTX ON CACHE BOOL "Build with NVTX support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/config/distribution/darwin_cpu.cmake 
b/config/distribution/darwin_cpu.cmake
index ed295ef..f44e004 100644
--- a/config/distribution/darwin_cpu.cmake
+++ b/config/distribution/darwin_cpu.cmake
@@ -32,3 +32,4 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction 
support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
 set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/config/distribution/linux_cpu.cmake 
b/config/distribution/linux_cpu.cmake
index 4579b42..83bb1b0 100644
--- a/config/distribution/linux_cpu.cmake
+++ b/config/distribution/linux_cpu.cmake
@@ -30,3 +30,4 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction 
support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
 set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/config/distribution/linux_cu100.cmake 
b/config/distribution/linux_cu100.cmake
index 357ccd4..b787c06 100644
--- a/config/distribution/linux_cu100.cmake
+++ b/config/distribution/linux_cu100.cmake
@@ -32,6 +32,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction 
support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
 set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
 
 set(CUDACXX "/usr/local/cuda-10.0/bin/nvcc" CACHE STRING "Cuda compiler")
 set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures")
diff --git a/config/distribution/linux_cu101.cmake 
b/config/distribution/linux_cu101.cmake
index 29fdda2..298b2a5 100644
--- a/config/distribution/linux_cu101.cmake
+++ b/config/distribution/linux_cu101.cmake
@@ -34,6 +34,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction 
support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
 set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
 
 set(CUDACXX "/usr/local/cuda-10.1/bin/nvcc" CACHE STRING "Cuda compiler")
 set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures")
diff --git a/config/distribution/linux_cu102.cmake 
b/config/distribution/linux_cu102.cmake
index 4e7e050..80ef232 100644
--- a/config/distribution/linux_cu102.cmake
+++ b/config/distribution/linux_cu102.cmake
@@ -32,6 +32,7 @@ set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction 
support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
 set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
 
 set(CUDACXX "/usr/local/cuda-10.2/bin/nvcc" CACHE STRING "Cuda compiler")
 set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures")
diff --git a/config/distribution/linux_cu92.cmake 
b/config/distribution/linux_cu92.cmake
index 8499421..4c767a2 100644
--- a/config/distribution/linux_cu92.cmake
+++ b/config/distribution/linux_cu92.cmake
@@ -31,6 +31,7 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator 
build system.")
 set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
 
 set(CUDACXX "/usr/local/cuda-9.2/bin/nvcc" CACHE STRING "Cuda compiler")
 set(MXNET_CUDA_ARCH "3.0;5.0;6.0;7.0" CACHE STRING "Cuda architectures")
diff --git a/config/distribution/linux_native.cmake 
b/config/distribution/linux_native.cmake
index 09fb495..1be84ac 100644
--- a/config/distribution/linux_native.cmake
+++ b/config/distribution/linux_native.cmake
@@ -29,3 +29,4 @@ set(USE_TVM_OP OFF CACHE BOOL "Enable use of TVM operator 
build system.")
 set(USE_SSE ON CACHE BOOL "Build with x86 SSE instruction support")
 set(USE_F16C OFF CACHE BOOL "Build with x86 F16C instruction support")
 set(USE_LIBJPEG_TURBO ON CACHE BOOL "Build with libjpeg-turbo")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/config/linux.cmake b/config/linux.cmake
index 84eecc2..9104da1 100644
--- a/config/linux.cmake
+++ b/config/linux.cmake
@@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF)
 set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.")
 set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation 
support")
 set(USE_NVTX ON CACHE BOOL "Build with NVTX support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/config/linux_gpu.cmake b/config/linux_gpu.cmake
index 0dad433..baef45e 100644
--- a/config/linux_gpu.cmake
+++ b/config/linux_gpu.cmake
@@ -127,3 +127,4 @@ set(USE_NCCL "Use NVidia NCCL with CUDA" OFF)
 set(NCCL_ROOT "" CACHE BOOL "NCCL install path. Supports autodetection.")
 set(ENABLE_CUDA_RTC ON CACHE BOOL "Build with CUDA runtime compilation 
support")
 set(USE_NVTX ON CACHE BOOL "Build with NVTX support")
+set(USE_CXX11_ABI ON CACHE BOOL "Build with GLIBCXX_USE_CXX11_ABI")
diff --git a/include/mxnet/c_api.h b/include/mxnet/c_api.h
index 04d8639..2aa0086 100644
--- a/include/mxnet/c_api.h
+++ b/include/mxnet/c_api.h
@@ -253,6 +253,12 @@ MXNET_DLL int MXLoadLib(const char *path, unsigned 
verbose);
 MXNET_DLL int MXLibInfoFeatures(const struct LibFeature **libFeature, size_t 
*size);
 
 /*!
+ * \brief return whether the mxnet library is compiled with cxx11 abi
+ * \return whether mxnet is built with cxx11 abi
+ */
+MXNET_DLL int MXLibInfoCompiledWithCXX11ABI(bool* result);
+
+/*!
  * \brief Seed all global random number generators in mxnet.
  * \param seed the random number seed.
  * \return 0 when success, -1 when failure happens.
diff --git a/include/mxnet/libinfo.h b/include/mxnet/libinfo.h
index dd77900..b1098b0 100644
--- a/include/mxnet/libinfo.h
+++ b/include/mxnet/libinfo.h
@@ -131,6 +131,12 @@
 #define MXNET_USE_TVM_OP 0
 #endif
 
+#ifndef _GLIBCXX_USE_CXX11_ABI
+#define MXNET_GLIBCXX_USE_CXX11_ABI 0
+#else
+#define MXNET_GLIBCXX_USE_CXX11_ABI _GLIBCXX_USE_CXX11_ABI
+#endif
+
 namespace mxnet {
 namespace features {
 // Check compile flags such as CMakeLists.txt
@@ -204,6 +210,7 @@ struct LibInfo {
   const std::array<LibFeature, MAX_FEATURES>& getFeatures() {
     return m_lib_features;
   }
+  bool cxx11_abi();
  private:
   std::array<LibFeature, MAX_FEATURES> m_lib_features;
   static std::unique_ptr<LibInfo>  m_inst;
diff --git a/python/mxnet/library.py b/python/mxnet/library.py
index e0c60d4..9ce3f7b 100644
--- a/python/mxnet/library.py
+++ b/python/mxnet/library.py
@@ -72,3 +72,15 @@ def load(path, verbose=True):
     for op in dir(mx_sym_op):
         func = getattr(mx_sym_op, op)
         setattr(mx_sym, op, func)
+
+def compiled_with_cxx11_abi():
+    """Check if the library is compiled with cxx11 ABI.
+
+    Returns
+    -------
+    bool
+        Whether the library is compiled with cxx11 ABI.
+    """
+    ret = ctypes.c_bool()
+    check_call(_LIB.MXLibInfoCompiledWithCXX11ABI(ctypes.byref(ret)))
+    return ret.value
diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc
index 3d73ceb..011994b 100644
--- a/src/c_api/c_api.cc
+++ b/src/c_api/c_api.cc
@@ -1299,6 +1299,15 @@ int MXLibInfoFeatures(const struct LibFeature 
**lib_features, size_t *size) {
   API_END();
 }
 
+int MXLibInfoCompiledWithCXX11ABI(bool* result) {
+  using namespace features;
+  API_BEGIN();
+  LibInfo* lib_info = LibInfo::getInstance();
+  *result = lib_info->cxx11_abi();
+  API_END();
+}
+
+
 int MXRandomSeed(int seed) {
   API_BEGIN();
   mxnet::RandomSeed(seed);
diff --git a/src/libinfo.cc b/src/libinfo.cc
index d14aaf5..ce7f126 100644
--- a/src/libinfo.cc
+++ b/src/libinfo.cc
@@ -126,6 +126,9 @@ LibInfo *LibInfo::getInstance() {
         m_inst = std::make_unique<LibInfo>();
     return m_inst.get();
 }
+bool LibInfo::cxx11_abi() {
+  return MXNET_GLIBCXX_USE_CXX11_ABI;
+}
 
 std::unique_ptr<LibInfo> LibInfo::m_inst = nullptr;
 
diff --git a/tests/python/unittest/test_runtime.py 
b/tests/python/unittest/test_runtime.py
index f181155..d117ac0 100644
--- a/tests/python/unittest/test_runtime.py
+++ b/tests/python/unittest/test_runtime.py
@@ -49,3 +49,6 @@ def test_is_enabled_not_existing():
     with pytest.raises(RuntimeError):
         features.is_enabled('this girl is on fire')
 
+def test_cxx11_abi():
+    abi = mx.library.compiled_with_cxx11_abi()
+    assert abi or not abi

Reply via email to