From 2df046fc67fdb0a5fcb2be892e8a5aa88d5e52b4 Mon Sep 17 00:00:00 2001 From: cloudhan Date: Sat, 17 Dec 2022 18:17:05 +0800 Subject: [PATCH] Fix deprecated-builtins (#14001) Fix error: builtin __has_trivial_destructor is deprecated; use __is_trivially_destructible instead [-Werror,-Wdeprecated-builtins] This is not a clean fix as in 13783, users will need to manually set `CMAKE_HIP_FLAGS="-Wno-deprecated-builtins"` if they want to use self-built hipclang combining with ROCm 5.3.* or older. --- cmake/CMakeLists.txt | 131 ++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 65 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d17c93b7f9..453cd87e14 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -201,6 +201,67 @@ if (onnxruntime_USE_CUDA) set(onnxruntime_DISABLE_RTTI OFF) endif() +if (onnxruntime_USE_ROCM) + if (WIN32) + message(FATAL_ERROR "ROCM does not support build in Windows!") + endif() + if (onnxruntime_USE_CUDA) + message(FATAL_ERROR "ROCM does not support build with CUDA!") + endif() + + if (NOT CMAKE_HIP_COMPILER) + set(CMAKE_HIP_COMPILER "${onnxruntime_ROCM_HOME}/llvm/bin/clang++") + endif() + + if (NOT CMAKE_HIP_ARCHITECTURES) + set(CMAKE_HIP_ARCHITECTURES "gfx906;gfx908;gfx90a;gfx1030") + endif() + + file(GLOB rocm_cmake_components ${onnxruntime_ROCM_HOME}/lib/cmake/*) + list(APPEND CMAKE_PREFIX_PATH ${rocm_cmake_components}) + + enable_language(HIP) + # NOTE: Flags -mllvm -amdgpu-early-inline-all=true are critical for gpu kernel code performance. -mllvm passes the + # next flag to underlying LLVM instead of clang and -amdgpu-early-inline-all=true is the optimization flag for LLVM. + # With CMake's enable_language(HIP), additional flags including the proceeding one are propagated from + # hip-lang::device library. But in some weird cases, the hip-lang::device target may not be properly configured, for + # example, the CMAKE_PREFIX_PATH might be improperly configured. + if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) + message(FATAL_ERROR "HIP Language is not properly configured.") + endif() + add_compile_options("$<$:SHELL:-x hip>") + + if (NOT onnxruntime_HIPIFY_PERL) + set(onnxruntime_HIPIFY_PERL ${onnxruntime_ROCM_HOME}/hip/bin/hipify-perl) + endif() + + # replicate strategy used by pytorch to get ROCM_VERSION + # https://github.com/pytorch/pytorch/blob/8eb21488fdcdb8b0e6fa2e46179b5fa6c42e75af/cmake/public/LoadHIP.cmake#L153-L173 + file(READ "${onnxruntime_ROCM_HOME}/.info/version-dev" ROCM_VERSION_DEV_RAW) + string(REGEX MATCH "^([0-9]+)\.([0-9]+)\.([0-9]+)-.*$" ROCM_VERSION_DEV_MATCH ${ROCM_VERSION_DEV_RAW}) + if (ROCM_VERSION_DEV_MATCH) + set(ROCM_VERSION_DEV_MAJOR ${CMAKE_MATCH_1}) + set(ROCM_VERSION_DEV_MINOR ${CMAKE_MATCH_2}) + set(ROCM_VERSION_DEV_PATCH ${CMAKE_MATCH_3}) + set(ROCM_VERSION_DEV "${ROCM_VERSION_DEV_MAJOR}.${ROCM_VERSION_DEV_MINOR}.${ROCM_VERSION_DEV_PATCH}") + math(EXPR ROCM_VERSION_DEV_INT "(${ROCM_VERSION_DEV_MAJOR}*10000) + (${ROCM_VERSION_DEV_MINOR}*100) + ${ROCM_VERSION_DEV_PATCH}") + endif() + message("\n***** ROCm version from ${onnxruntime_ROCM_HOME}/.info/version-dev ****\n") + message("ROCM_VERSION_DEV: ${ROCM_VERSION_DEV}") + message("ROCM_VERSION_DEV_MAJOR: ${ROCM_VERSION_DEV_MAJOR}") + message("ROCM_VERSION_DEV_MINOR: ${ROCM_VERSION_DEV_MINOR}") + message("ROCM_VERSION_DEV_PATCH: ${ROCM_VERSION_DEV_PATCH}") + message("ROCM_VERSION_DEV_INT: ${ROCM_VERSION_DEV_INT}") + message("\n***** HIP LANGUAGE CONFIG INFO ****\n") + message("CMAKE_HIP_COMPILER: ${CMAKE_HIP_COMPILER}") + message("CMAKE_HIP_ARCHITECTURES: ${CMAKE_HIP_ARCHITECTURES}") + message("CMAKE_HIP_FLAGS: ${CMAKE_HIP_FLAGS}") + string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE) + message("CMAKE_HIP_FLAGS_${BUILD_TYPE}: ${CMAKE_HIP_FLAGS_${BUILD_TYPE}}") + add_definitions(-DROCM_VERSION=${ROCM_VERSION_DEV_INT}) +endif() + + if (onnxruntime_ENABLE_TRAINING_ON_DEVICE) if (NOT onnxruntime_ENABLE_TRAINING) message(FATAL_ERROR "To build for on-device training, the training build must be enabled (onnxruntime_ENABLE_TRAINING).") @@ -727,6 +788,11 @@ function(onnxruntime_set_compile_flags target_name) # #warning must not be treated as error list(APPEND ORT_HIP_WARNING_FLAGS -Wno-error=pass-failed "-Wno-error=#warnings") + # otherwise error: builtin __has_trivial_assign is deprecated; use __is_trivially_assignable instead + if (ROCM_VERSION_DEV VERSION_GREATER_EQUAL "5.4") + list(APPEND ORT_HIP_WARNING_FLAGS "-Wno-deprecated-builtins") + endif() + foreach(FLAG ${ORT_HIP_WARNING_FLAGS}) target_compile_options(${target_name} PRIVATE "$<$:SHELL:${FLAG}>") endforeach() @@ -1176,71 +1242,6 @@ if (onnxruntime_USE_MIGRAPHX) set(AMD_MIGRAPHX_HOME ${onnxruntime_MIGRAPHX_HOME}) endif() -if (onnxruntime_USE_ROCM) - if (WIN32) - message(FATAL_ERROR "ROCM does not support build in Windows!") - endif() - if (onnxruntime_USE_CUDA) - message(FATAL_ERROR "ROCM does not support build with CUDA!") - endif() - - # NOTE: HIP language is added in 3.21 and there are bugs before 3.23.1 - cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR) - - set(ROCM_PATH ${onnxruntime_ROCM_HOME}) - - if (NOT CMAKE_HIP_COMPILER) - set(CMAKE_HIP_COMPILER "${ROCM_PATH}/llvm/bin/clang++") - endif() - - if (NOT CMAKE_HIP_ARCHITECTURES) - set(CMAKE_HIP_ARCHITECTURES "gfx906;gfx908;gfx90a;gfx1030") - endif() - - file(GLOB rocm_cmake_components ${onnxruntime_ROCM_HOME}/lib/cmake/*) - list(APPEND CMAKE_PREFIX_PATH ${rocm_cmake_components}) - - enable_language(HIP) - # NOTE: Flags -mllvm -amdgpu-early-inline-all=true are critical for gpu kernel code performance. -mllvm passes the - # next flag to underlying LLVM instead of clang and -amdgpu-early-inline-all=true is the optimization flag for LLVM. - # With CMake's enable_language(HIP), additional flags including the proceeding one are propagated from - # hip-lang::device library. But in some weird cases, the hip-lang::device target may not be properly configured, for - # example, the CMAKE_PREFIX_PATH might be improperly configured. - if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) - message(FATAL_ERROR "HIP Language is not properly configured.") - endif() - add_compile_options("$<$:SHELL:-x hip>") - - if (NOT onnxruntime_HIPIFY_PERL) - set(onnxruntime_HIPIFY_PERL ${onnxruntime_ROCM_HOME}/hip/bin/hipify-perl) - endif() - - # replicate strategy used by pytorch to get ROCM_VERSION - # https://github.com/pytorch/pytorch/blob/8eb21488fdcdb8b0e6fa2e46179b5fa6c42e75af/cmake/public/LoadHIP.cmake#L153-L173 - file(READ "${ROCM_PATH}/.info/version-dev" ROCM_VERSION_DEV_RAW) - string(REGEX MATCH "^([0-9]+)\.([0-9]+)\.([0-9]+)-.*$" ROCM_VERSION_DEV_MATCH ${ROCM_VERSION_DEV_RAW}) - if (ROCM_VERSION_DEV_MATCH) - set(ROCM_VERSION_DEV_MAJOR ${CMAKE_MATCH_1}) - set(ROCM_VERSION_DEV_MINOR ${CMAKE_MATCH_2}) - set(ROCM_VERSION_DEV_PATCH ${CMAKE_MATCH_3}) - set(ROCM_VERSION_DEV "${ROCM_VERSION_DEV_MAJOR}.${ROCM_VERSION_DEV_MINOR}.${ROCM_VERSION_DEV_PATCH}") - math(EXPR ROCM_VERSION_DEV_INT "(${ROCM_VERSION_DEV_MAJOR}*10000) + (${ROCM_VERSION_DEV_MINOR}*100) + ${ROCM_VERSION_DEV_PATCH}") - endif() - message("\n***** ROCm version from ${ROCM_PATH}/.info/version-dev ****\n") - message("ROCM_VERSION_DEV: ${ROCM_VERSION_DEV}") - message("ROCM_VERSION_DEV_MAJOR: ${ROCM_VERSION_DEV_MAJOR}") - message("ROCM_VERSION_DEV_MINOR: ${ROCM_VERSION_DEV_MINOR}") - message("ROCM_VERSION_DEV_PATCH: ${ROCM_VERSION_DEV_PATCH}") - message("ROCM_VERSION_DEV_INT: ${ROCM_VERSION_DEV_INT}") - message("\n***** HIP LANGUAGE CONFIG INFO ****\n") - message("CMAKE_HIP_COMPILER: ${CMAKE_HIP_COMPILER}") - message("CMAKE_HIP_ARCHITECTURES: ${CMAKE_HIP_ARCHITECTURES}") - message("CMAKE_HIP_FLAGS: ${CMAKE_HIP_FLAGS}") - string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE) - message("CMAKE_HIP_FLAGS_${BUILD_TYPE}: ${CMAKE_HIP_FLAGS_${BUILD_TYPE}}") - add_definitions(-DROCM_VERSION=${ROCM_VERSION_DEV_INT}) -endif() - if (onnxruntime_ENABLE_MICROSOFT_INTERNAL) add_definitions(-DMICROSOFT_INTERNAL) endif()