@@ -371,6 +371,70 @@ if (onnxruntime_USE_ROCM)
371371 set (onnxruntime_HIPIFY_PERL ${HIPIFY_PERL_PATH} /hipify-perl)
372372 endif ()
373373
374+ # replicate strategy used by pytorch to get ROCM_VERSION
375+ # https://github.com/pytorch/pytorch/blob/1a10751731784942dcbb9c0524c1369a29d45244/cmake/public/LoadHIP.cmake#L45-L109
376+ # with modification
377+ set (ROCM_INCLUDE_DIRS "${onnxruntime_ROCM_HOME} /include" )
378+ set (PROJECT_RANDOM_BINARY_DIR "${CMAKE_BINARY_DIR} " )
379+ set (file "${CMAKE_BINARY_DIR} /detect_rocm_version.cc" )
380+
381+ # Find ROCM version for checks
382+ # ROCM 5.0 and later will have header api for version management
383+ if (EXISTS ${ROCM_INCLUDE_DIRS} /rocm_version.h)
384+ file (WRITE ${file} ""
385+ "#include <rocm_version.h>\n "
386+ )
387+ elseif (EXISTS ${ROCM_INCLUDE_DIRS} /rocm-core/rocm_version.h)
388+ file (WRITE ${file} ""
389+ "#include <rocm-core/rocm_version.h>\n "
390+ )
391+ else ()
392+ message (FATAL_ERROR "********************* rocm_version.h couldnt be found ******************\n " )
393+ endif ()
394+
395+ file (APPEND ${file} ""
396+ "#include <cstdio>\n "
397+
398+ "#ifndef ROCM_VERSION_PATCH\n "
399+ "#define ROCM_VERSION_PATCH 0\n "
400+ "#endif\n "
401+ "#define STRINGIFYHELPER(x) #x\n "
402+ "#define STRINGIFY(x) STRINGIFYHELPER(x)\n "
403+ "int main() {\n "
404+ " printf(\" %d.%d.%s\" , ROCM_VERSION_MAJOR, ROCM_VERSION_MINOR, STRINGIFY(ROCM_VERSION_PATCH));\n "
405+ " return 0;\n "
406+ "}\n "
407+ )
408+
409+ try_run (run_result compile_result ${PROJECT_RANDOM_BINARY_DIR} ${file}
410+ CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${ROCM_INCLUDE_DIRS} "
411+ RUN_OUTPUT_VARIABLE rocm_version_from_header
412+ COMPILE_OUTPUT_VARIABLE output_var
413+ )
414+ # We expect the compile to be successful if the include directory exists.
415+ if (NOT compile_result)
416+ message (FATAL_ERROR "ROCM: Couldn't determine version from header: " ${output_var} )
417+ endif ()
418+ message (STATUS "ROCM: Header version is: " ${rocm_version_from_header} )
419+ set (ROCM_VERSION_DEV_RAW ${rocm_version_from_header} )
420+
421+ string (REGEX MATCH "^([0-9]+)\. ([0-9]+)\. ([0-9]+).*$" ROCM_VERSION_DEV_MATCH ${ROCM_VERSION_DEV_RAW} )
422+
423+ if (ROCM_VERSION_DEV_MATCH)
424+ set (ROCM_VERSION_DEV_MAJOR ${CMAKE_MATCH_1} )
425+ set (ROCM_VERSION_DEV_MINOR ${CMAKE_MATCH_2} )
426+ set (ROCM_VERSION_DEV_PATCH ${CMAKE_MATCH_3} )
427+ set (ROCM_VERSION_DEV "${ROCM_VERSION_DEV_MAJOR} .${ROCM_VERSION_DEV_MINOR} .${ROCM_VERSION_DEV_PATCH} " )
428+ math (EXPR ROCM_VERSION_DEV_INT "(${ROCM_VERSION_DEV_MAJOR} *10000) + (${ROCM_VERSION_DEV_MINOR} *100) + ${ROCM_VERSION_DEV_PATCH} " )
429+ else ()
430+ message (FATAL_ERROR "Cannot determine ROCm version string" )
431+ endif ()
432+ message ("\n ***** ROCm version from rocm_version.h ****\n " )
433+ message ("ROCM_VERSION_DEV: ${ROCM_VERSION_DEV} " )
434+ message ("ROCM_VERSION_DEV_MAJOR: ${ROCM_VERSION_DEV_MAJOR} " )
435+ message ("ROCM_VERSION_DEV_MINOR: ${ROCM_VERSION_DEV_MINOR} " )
436+ message ("ROCM_VERSION_DEV_PATCH: ${ROCM_VERSION_DEV_PATCH} " )
437+ message ("ROCM_VERSION_DEV_INT: ${ROCM_VERSION_DEV_INT} " )
374438 message ("\n ***** HIP LANGUAGE CONFIG INFO ****\n " )
375439 message ("CMAKE_HIP_COMPILER: ${CMAKE_HIP_COMPILER} " )
376440 message ("CMAKE_HIP_ARCHITECTURES: ${CMAKE_HIP_ARCHITECTURES} " )
@@ -534,6 +598,11 @@ if (onnxruntime_EXTENDED_MINIMAL_BUILD AND NOT onnxruntime_MINIMAL_BUILD)
534598 set (onnxruntime_MINIMAL_BUILD ON )
535599endif ()
536600
601+ set (REPO_ROOT ${PROJECT_SOURCE_DIR} /..)
602+ set (ONNXRUNTIME_ROOT ${PROJECT_SOURCE_DIR} /../onnxruntime)
603+ set (ORTTRAINING_ROOT ${PROJECT_SOURCE_DIR} /../orttraining)
604+ set (ORTTRAINING_SOURCE_DIR ${ORTTRAINING_ROOT} /orttraining)
605+
537606include (adjust_global_compile_flags.cmake)
538607
539608if (APPLE )
@@ -565,10 +634,6 @@ if (NOT MSVC AND NOT (CMAKE_SYSTEM_NAME STREQUAL "iOS"))
565634 set (CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS} )
566635endif ()
567636
568- set (REPO_ROOT ${PROJECT_SOURCE_DIR} /..)
569- set (ONNXRUNTIME_ROOT ${PROJECT_SOURCE_DIR} /../onnxruntime)
570- set (ORTTRAINING_ROOT ${PROJECT_SOURCE_DIR} /../orttraining)
571- set (ORTTRAINING_SOURCE_DIR ${ORTTRAINING_ROOT} /orttraining)
572637
573638file (STRINGS "${REPO_ROOT} /VERSION_NUMBER" ORT_VERSION)
574639
@@ -679,6 +744,7 @@ else()
679744 check_cxx_compiler_flag(-Wdeprecated-builtins HAS_DEPRECATED_BUILTINS)
680745 check_cxx_compiler_flag(-Wdeprecated-copy HAS_DEPRECATED_COPY)
681746 check_cxx_compiler_flag(-Wdeprecated-declarations HAS_DEPRECATED_DECLARATIONS)
747+ check_cxx_compiler_flag(-Wdeprecated-literal-operator HAS_DEPRECATED_LITERAL_OPERATOR)
682748 check_cxx_compiler_flag(-Wdeprecated-this-capture HAS_DEPRECATED_THIS_CAPTURE)
683749 check_cxx_compiler_flag(-Wenum-constexpr-conversion HAS_ENUM_CONSTEXPR_CONVERSION)
684750 check_cxx_compiler_flag(-Wformat-truncation HAS_FORMAT_TRUNCATION)
@@ -735,6 +801,9 @@ else()
735801 if (HAS_DEPRECATED_BUILTINS)
736802 list (APPEND ORT_WARNING_FLAGS -Wno-deprecated-builtins)
737803 endif ()
804+ if (HAS_DEPRECATED_LITERAL_OPERATOR)
805+ list (APPEND ORT_WARNING_FLAGS -Wno-deprecated-literal-operator)
806+ endif ()
738807 #see:https://reviews.llvm.org/D131307
739808 #It was intended that the 'enum-constexpr-conversion' type warnings can not be silenced by -w
740809 if (HAS_ENUM_CONSTEXPR_CONVERSION AND NOT Protobuf_FOUND)
@@ -1138,6 +1207,8 @@ function(onnxruntime_set_compile_flags target_name)
11381207 # because we may mix gcc and hipclang
11391208 set (ORT_HIP_WARNING_FLAGS ${ORT_WARNING_FLAGS} )
11401209 list (REMOVE_ITEM ORT_HIP_WARNING_FLAGS -Wno-nonnull-compare)
1210+ # Unsupported by Clang 18 yet.
1211+ list (REMOVE_ITEM ORT_HIP_WARNING_FLAGS -Wno-dangling-reference)
11411212
11421213 # float16.h:90:12: error: ‘tmp’ is used uninitialized
11431214 list (APPEND ORT_HIP_WARNING_FLAGS -Wno-uninitialized)
0 commit comments