diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c86dd9d0f7d..c1b722c655ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,7 +89,6 @@ 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) @@ -100,12 +99,6 @@ 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 12fd034c07c9..a65509f0ba1c 100644 --- a/config/darwin.cmake +++ b/config/darwin.cmake @@ -128,4 +128,3 @@ 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 f44e004eb420..ed295efd33d2 100644 --- a/config/distribution/darwin_cpu.cmake +++ b/config/distribution/darwin_cpu.cmake @@ -32,4 +32,3 @@ 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 83bb1b07f53e..4579b42fce5c 100644 --- a/config/distribution/linux_cpu.cmake +++ b/config/distribution/linux_cpu.cmake @@ -30,4 +30,3 @@ 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 b787c0666a4c..357ccd457593 100644 --- a/config/distribution/linux_cu100.cmake +++ b/config/distribution/linux_cu100.cmake @@ -32,7 +32,6 @@ 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 298b2a5e21e2..29fdda2d6f0a 100644 --- a/config/distribution/linux_cu101.cmake +++ b/config/distribution/linux_cu101.cmake @@ -34,7 +34,6 @@ 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 80ef2320d599..4e7e0509e4f9 100644 --- a/config/distribution/linux_cu102.cmake +++ b/config/distribution/linux_cu102.cmake @@ -32,7 +32,6 @@ 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 4c767a2cc839..8499421f91ec 100644 --- a/config/distribution/linux_cu92.cmake +++ b/config/distribution/linux_cu92.cmake @@ -31,7 +31,6 @@ 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 1be84ac79937..09fb4956ae80 100644 --- a/config/distribution/linux_native.cmake +++ b/config/distribution/linux_native.cmake @@ -29,4 +29,3 @@ 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 9104da142e63..84eecc2e9701 100644 --- a/config/linux.cmake +++ b/config/linux.cmake @@ -127,4 +127,3 @@ 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 baef45e4157b..0dad43332978 100644 --- a/config/linux_gpu.cmake +++ b/config/linux_gpu.cmake @@ -127,4 +127,3 @@ 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 2aa00861ff32..01ce18859ef4 100644 --- a/include/mxnet/c_api.h +++ b/include/mxnet/c_api.h @@ -256,7 +256,7 @@ MXNET_DLL int MXLibInfoFeatures(const struct LibFeature **libFeature, size_t *si * \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); +MXNET_DLL int MXLibInfoCompiledWithCXX11ABI(int* result); /*! * \brief Seed all global random number generators in mxnet. diff --git a/include/mxnet/libinfo.h b/include/mxnet/libinfo.h index b1098b002dd7..b4ae2bc15584 100644 --- a/include/mxnet/libinfo.h +++ b/include/mxnet/libinfo.h @@ -131,12 +131,6 @@ #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 diff --git a/python/mxnet/library.py b/python/mxnet/library.py index 9ce3f7b2223e..487fff940fda 100644 --- a/python/mxnet/library.py +++ b/python/mxnet/library.py @@ -73,14 +73,23 @@ def load(path, verbose=True): 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. + +def compiled_with_gcc_cxx11_abi(): + """Check if the library is compiled with _GLIBCXX_USE_CXX11_ABI. + + Please see + https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html for + more information. When building libraries relying on MXNet C++ headers, it + is required to use the same C++ ABI in the library as well as in libmxnet. Returns ------- - bool - Whether the library is compiled with cxx11 ABI. + int + 1 If compiled with _GLIBCXX_USE_CXX11_ABI=1 + 0 If compiled with _GLIBCXX_USE_CXX11_ABI=0 + -1 If compiled with a compiler that does not support _GLIBCXX_USE_CXX11_ABI + """ - ret = ctypes.c_bool() + ret = ctypes.c_int() 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 011994b54c67..ab367b973595 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -1299,11 +1299,13 @@ int MXLibInfoFeatures(const struct LibFeature **lib_features, size_t *size) { API_END(); } -int MXLibInfoCompiledWithCXX11ABI(bool* result) { - using namespace features; +int MXLibInfoCompiledWithCXX11ABI(int* result) { API_BEGIN(); - LibInfo* lib_info = LibInfo::getInstance(); - *result = lib_info->cxx11_abi(); +#ifdef _GLIBCXX_USE_CXX11_ABI + *result = _GLIBCXX_USE_CXX11_ABI; +#else + *result = -1; +#endif API_END(); } diff --git a/src/libinfo.cc b/src/libinfo.cc index ce7f1266eaeb..d14aaf5769b2 100644 --- a/src/libinfo.cc +++ b/src/libinfo.cc @@ -126,9 +126,6 @@ LibInfo *LibInfo::getInstance() { m_inst = std::make_unique(); return m_inst.get(); } -bool LibInfo::cxx11_abi() { - return MXNET_GLIBCXX_USE_CXX11_ABI; -} std::unique_ptr LibInfo::m_inst = nullptr;