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