diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2e9a50e522..2b1ea1d873 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1041,6 +1041,9 @@ function(onnxruntime_set_compile_flags target_name) #external/protobuf/src/google/protobuf/arena.h:445:18: error: unused parameter 'p' target_compile_options(${target_name} PRIVATE "-Wno-unused-parameter") endif() + if (CMAKE_CXX_COMPILER_ID STREQUAL "IBMClang") + target_compile_options(${target_name} PRIVATE "-Wno-unused-function") + endif() target_compile_definitions(${target_name} PUBLIC -DNSYNC_ATOMIC_CPP11) onnxruntime_add_include_to_target(${target_name} nsync::nsync_cpp) endif() diff --git a/cmake/external/eigen.cmake b/cmake/external/eigen.cmake index b123adb624..339cded091 100644 --- a/cmake/external/eigen.cmake +++ b/cmake/external/eigen.cmake @@ -3,11 +3,20 @@ if (onnxruntime_USE_PREINSTALLED_EIGEN) file(TO_CMAKE_PATH ${eigen_SOURCE_PATH} eigen_INCLUDE_DIRS) target_include_directories(eigen INTERFACE ${eigen_INCLUDE_DIRS}) else () - FetchContent_Declare( - eigen - URL ${DEP_URL_eigen} - URL_HASH SHA1=${DEP_SHA1_eigen} - ) + if(CMAKE_SYSTEM_NAME MATCHES "AIX") + FetchContent_Declare( + eigen + URL ${DEP_URL_eigen} + URL_HASH SHA1=${DEP_SHA1_eigen} + PATCH_COMMAND ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/eigen/eigen-aix.patch + ) + else() + FetchContent_Declare( + eigen + URL ${DEP_URL_eigen} + URL_HASH SHA1=${DEP_SHA1_eigen} + ) + endif() FetchContent_Populate(eigen) set(eigen_INCLUDE_DIRS "${eigen_SOURCE_DIR}") diff --git a/cmake/onnxruntime_python.cmake b/cmake/onnxruntime_python.cmake index b2dbe4b3da..574cffbb71 100644 --- a/cmake/onnxruntime_python.cmake +++ b/cmake/onnxruntime_python.cmake @@ -117,7 +117,9 @@ elseif(UNIX) if (onnxruntime_ENABLE_EXTERNAL_CUSTOM_OP_SCHEMAS) set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script_expose_onnx_protobuf.lds -Xlinker --gc-sections") else() - set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script.lds -Xlinker --gc-sections") + if (NOT CMAKE_SYSTEM_NAME MATCHES "AIX") + set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script.lds -Xlinker --gc-sections") + endif() endif() else() set(ONNXRUNTIME_SO_LINK_FLAG "-DEF:${ONNXRUNTIME_ROOT}/python/pybind.def") @@ -224,7 +226,9 @@ elseif (APPLE) BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH_USE_LINK_PATH FALSE) else() - set_property(TARGET onnxruntime_pybind11_state APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN") + if (NOT CMAKE_SYSTEM_NAME MATCHES "AIX") + set_property(TARGET onnxruntime_pybind11_state APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN") + endif() endif() if (onnxruntime_ENABLE_EXTERNAL_CUSTOM_OP_SCHEMAS) diff --git a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake index d7f4a0675e..b9d4e1968b 100644 --- a/cmake/onnxruntime_unittests.cmake +++ b/cmake/onnxruntime_unittests.cmake @@ -915,6 +915,15 @@ if (MSVC AND onnxruntime_ENABLE_STATIC_ANALYSIS) target_compile_options(onnxruntime_test_all PRIVATE "/analyze:stacksize 131072") endif() +#In AIX + gcc compiler ,crash is observed with the usage of googletest EXPECT_THROW, +#because some needed symbol is garbaged out by linker. +#So, fix is to exports the symbols from executable. +#Another way is to use -Wl,-bkeepfile for each object file where EXPECT_THROW is used like below +#target_link_options(onnxruntime_test_all PRIVATE "-Wl,-bkeepfile:CMakeFiles/onnxruntime_test_all.dir${TEST_SRC_DIR}/framework/tensor_test.cc.o") +if (CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set_target_properties(onnxruntime_test_all PROPERTIES ENABLE_EXPORTS 1) +endif() + # the default logger tests conflict with the need to have an overall default logger # so skip in this type of target_compile_definitions(onnxruntime_test_all PUBLIC -DSKIP_DEFAULT_LOGGER_TESTS) @@ -1766,7 +1775,12 @@ if (NOT onnxruntime_MINIMAL_BUILD AND NOT onnxruntime_EXTENDED_MINIMAL_BUILD onnxruntime_add_shared_library_module(test_execution_provider ${test_execution_provider_srcs}) add_dependencies(test_execution_provider onnxruntime_providers_shared onnx ${ABSEIL_LIBS}) - target_link_libraries(test_execution_provider PRIVATE onnxruntime_providers_shared ${ABSEIL_LIBS} Boost::mp11) + if (CMAKE_SYSTEM_NAME MATCHES "AIX") + target_link_options(test_execution_provider PRIVATE -Wl,-brtl -lonnxruntime_providers_shared) + target_link_libraries(test_execution_provider PRIVATE ${ABSEIL_LIBS} Boost::mp11) + else() + target_link_libraries(test_execution_provider PRIVATE onnxruntime_providers_shared ${ABSEIL_LIBS} Boost::mp11) + endif() target_include_directories(test_execution_provider PRIVATE $) target_include_directories(test_execution_provider PRIVATE $) target_include_directories(test_execution_provider PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${ORTTRAINING_ROOT}) diff --git a/cmake/patches/eigen/eigen-aix.patch b/cmake/patches/eigen/eigen-aix.patch new file mode 100644 index 0000000000..653b54b8d3 --- /dev/null +++ b/cmake/patches/eigen/eigen-aix.patch @@ -0,0 +1,250 @@ +diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +index 8feb88ea7..01b50b7c4 100644 +--- a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h ++++ b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +@@ -15,6 +15,21 @@ + #define EIGEN_ALTIVEC_USE_CUSTOM_PACK 1 + #endif + ++#ifdef _AIX ++#define POWER_10 0x40000 ++#define POWER_10_ANDUP (POWER_10) ++#include ++#define __power_10_andup() (_system_configuration.implementation & POWER_10_ANDUP) ++ ++static bool check_mma_support() ++{ ++ if(__power_10_andup() && __power_mma_version() == MMA_V31) ++ return true; ++ else ++ return false; ++} ++#endif ++ + #include "MatrixProductCommon.h" + + // Since LLVM doesn't support dynamic dispatching, force either always MMA or VSX +@@ -2481,12 +2496,21 @@ void gebp_kernel; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemmMMA; +- } +- else{ +- gemm_function = &Eigen::internal::gemm; +- } ++ #if defined(_AIX) ++ if(check_mma_support()){ ++ gemm_function = &Eigen::internal::gemmMMA; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemmMMA; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm; + #endif +@@ -2520,12 +2544,21 @@ void gebp_kernel, std::complex, Index, DataMapper, mr + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; + #endif +@@ -2558,12 +2591,21 @@ void gebp_kernel, Index, DataMapper, mr, nr, Conjugat + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; + #endif +@@ -2596,12 +2638,21 @@ void gebp_kernel, float, Index, DataMapper, mr, nr, Conjugat + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, float, std::complex, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; + #endif +@@ -2633,12 +2684,21 @@ void gebp_kernel; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemmMMA; +- } +- else{ +- gemm_function = &Eigen::internal::gemm; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemmMMA; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemmMMA; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm; + #endif +@@ -2671,12 +2731,21 @@ void gebp_kernel, std::complex, Index, DataMapper, + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, std::complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>; + #endif +@@ -2709,12 +2778,21 @@ void gebp_kernel, double, Index, DataMapper, mr, nr, Conjug + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, double, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>; + #endif +@@ -2747,12 +2825,21 @@ void gebp_kernel, Index, DataMapper, mr, nr, Conjug + //generate with MMA only + gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; + #elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA) +- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ +- gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; +- } +- else{ +- gemm_function = &Eigen::internal::gemm_complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; +- } ++ #if defined(_AIX) ++ if (check_mma_support()){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ #else ++ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){ ++ gemm_function = &Eigen::internal::gemm_complexMMA, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ else{ ++ gemm_function = &Eigen::internal::gemm_complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; ++ } ++ #endif + #else + gemm_function = &Eigen::internal::gemm_complex, std::complex, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>; + #endif diff --git a/onnxruntime/python/onnxruntime_validation.py b/onnxruntime/python/onnxruntime_validation.py index 81e6461e44..4f29c7f424 100644 --- a/onnxruntime/python/onnxruntime_validation.py +++ b/onnxruntime/python/onnxruntime_validation.py @@ -55,9 +55,15 @@ def check_distro_info(): warnings.warn( f"Unsupported macOS version ({__my_distro_ver__}). ONNX Runtime supports macOS 11.0 or later." ) + elif __my_system__ == "aix": + import subprocess + + returned_output = subprocess.check_output("oslevel") + __my_distro_ver__str = returned_output.decode("utf-8") + __my_distro_ver = __my_distro_ver__str[:3] else: warnings.warn( - f"Unsupported platform ({__my_system__}). ONNX Runtime supports Linux, macOS and Windows platforms, only." + f"Unsupported platform ({__my_system__}). ONNX Runtime supports Linux, macOS, AIX and Windows platforms, only." ) diff --git a/onnxruntime/test/providers/cpu/generator/random_test.cc b/onnxruntime/test/providers/cpu/generator/random_test.cc index f42f32d63d..a923df2ceb 100644 --- a/onnxruntime/test/providers/cpu/generator/random_test.cc +++ b/onnxruntime/test/providers/cpu/generator/random_test.cc @@ -256,7 +256,7 @@ TEST(Random, MultinomialGoodCase) { const std::vector output_dims{batch_size, num_samples}; #ifdef _WIN32 const std::vector expected_output{2, 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 0}; -#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || defined(_AIX) +#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || (defined(_AIX) && defined(__clang__)) const std::vector expected_output{1, 1, 2, 2, 0, 2, 2, 2, 0, 2, 1, 1, 2, 0, 2, 2, 0, 2, 1, 1}; #else const std::vector expected_output{2, 0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 1, 1, 0, 1, 0, 2, 0, 2, 0}; @@ -294,7 +294,7 @@ TEST(Random, MultinomialDefaultDType) { #ifdef _WIN32 const std::vector expected_output_1{2, 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 0}; const std::vector expected_output_2{0, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 0, 2, 0, 2, 2, 1, 2, 1}; -#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || defined(_AIX) +#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || (defined(_AIX) && defined(__clang__)) const std::vector expected_output_1{1, 1, 2, 2, 0, 2, 2, 2, 0, 2, 1, 1, 2, 0, 2, 2, 0, 2, 1, 1}; const std::vector expected_output_2{1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 2, 2, 2, 1}; #else diff --git a/onnxruntime/test/python/onnxruntime_test_python.py b/onnxruntime/test/python/onnxruntime_test_python.py index 4a197001c3..869c3fac16 100644 --- a/onnxruntime/test/python/onnxruntime_test_python.py +++ b/onnxruntime/test/python/onnxruntime_test_python.py @@ -1600,7 +1600,12 @@ class TestInferenceSession(unittest.TestCase): ) def test_memory_arena_shrinkage(self): - if platform.architecture()[0] == "32bit" or "ppc" in platform.machine() or "powerpc" in platform.machine(): + if ( + platform.architecture()[0] == "32bit" + or "ppc" in platform.machine() + or "powerpc" in platform.machine() + or "powerpc" in platform.processor() + ): # on x86 or ppc builds, the CPU allocator does not use an arena print("Skipping testMemoryArenaShrinkage in 32bit or powerpc platform.") else: diff --git a/setup.py b/setup.py index 651f8a71ee..aabe0d2233 100644 --- a/setup.py +++ b/setup.py @@ -325,7 +325,7 @@ elif platform.system() == "Windows": dl_libs = [] libs = [] -if platform.system() == "Linux": +if platform.system() == "Linux" or platform.system() == "AIX": libs = [ "onnxruntime_pybind11_state.so", "libdnnl.so.2",