From e3ff6f86ff92a34c6df269b15091ae66b149b284 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 13:46:48 -0500 Subject: [PATCH 01/25] Enable static compilation --- CMakeLists.txt | 19 +++++++++++++++++++ cmake/Embed.cmake | 4 ++-- src/CMakeLists.txt | 2 ++ src/onnx/CMakeLists.txt | 7 ++++--- src/targets/cpu/CMakeLists.txt | 1 + src/targets/gpu/CMakeLists.txt | 4 +++- src/tf/CMakeLists.txt | 7 ++++--- 7 files changed, 35 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dbf5b604da8..25471adb937 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -346,6 +346,25 @@ rocm_enable_cppcheck( include(ROCMCreatePackage) include(ROCMTest) +function(enable_static_init LIB) + get_target_property(_type ${LIB} TYPE) + if(_type STREQUAL "STATIC_LIBRARY") + if(APPLE) + target_link_options(${LIB} INTERFACE + "LINKER:-force_load,$") + elseif(MSVC) + target_link_options(${LIB} INTERFACE + "LINKER:/WHOLEARCHIVE:$") + else() + # GNU ld / LLD / gold + target_link_options(${LIB} INTERFACE + "LINKER:--push-state,--whole-archive" + "$>" + "LINKER:--pop-state") + endif() + endif() +endfunction() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) diff --git a/cmake/Embed.cmake b/cmake/Embed.cmake index b42d7390a28..a0395e4150c 100644 --- a/cmake/Embed.cmake +++ b/cmake/Embed.cmake @@ -258,7 +258,7 @@ function(add_embed_library EMBED_NAME) target_sources(${INTERNAL_EMBED_LIB} PRIVATE ${OUTPUT_FILES}) endif() target_include_directories(${INTERNAL_EMBED_LIB} PRIVATE "${EMBED_DIR}/include") - target_compile_options(${INTERNAL_EMBED_LIB} PRIVATE -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations) + target_compile_options(${INTERNAL_EMBED_LIB} PRIVATE -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations -Wno-c++11-narrowing) set_target_properties(${INTERNAL_EMBED_LIB} PROPERTIES POSITION_INDEPENDENT_CODE On) add_library(${EMBED_NAME} INTERFACE) if(EMBED_USE STREQUAL "RC") @@ -268,6 +268,6 @@ function(add_embed_library EMBED_NAME) else() target_sources(${EMBED_NAME} INTERFACE $) endif() - target_include_directories(${EMBED_NAME} INTERFACE "${EMBED_DIR}/include") + target_include_directories(${EMBED_NAME} INTERFACE "$") endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a91750e00ac..52410940dd6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -149,6 +149,8 @@ add_library(migraphx verify_args.cpp ) +enable_static_init(migraphx) + file(GLOB BUILDER_SRCS CONFIGURE_DEPENDS op/builder/*.cpp) target_sources(migraphx PRIVATE ${BUILDER_SRCS}) diff --git a/src/onnx/CMakeLists.txt b/src/onnx/CMakeLists.txt index f0074c1c9b9..3347496eb01 100644 --- a/src/onnx/CMakeLists.txt +++ b/src/onnx/CMakeLists.txt @@ -24,7 +24,7 @@ find_package(protobuf QUIET CONFIG) if(protobuf_FOUND) - add_library(onnx-proto STATIC) + add_library(onnx-proto OBJECT) protobuf_generate(TARGET onnx-proto PROTOS onnx.proto) target_include_directories(onnx-proto SYSTEM PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${PROTOBUF_INCLUDE_DIR}) target_link_libraries(onnx-proto PRIVATE ${PROTOBUF_LIBRARY}) @@ -32,7 +32,7 @@ if(protobuf_FOUND) else() find_package(Protobuf REQUIRED) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS onnx.proto) - add_library(onnx-proto STATIC ${PROTO_SRCS}) + add_library(onnx-proto OBJECT ${PROTO_SRCS}) target_include_directories(onnx-proto SYSTEM PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${PROTOBUF_INCLUDE_DIR}) target_link_libraries(onnx-proto PRIVATE ${PROTOBUF_LIBRARY}) endif() @@ -51,11 +51,12 @@ set_target_properties(migraphx_onnx PROPERTIES EXPORT_NAME onnx) migraphx_generate_export_header(migraphx_onnx) rocm_set_soversion(migraphx_onnx ${MIGRAPHX_SO_VERSION}) rocm_clang_tidy_check(migraphx_onnx) -target_link_libraries(migraphx_onnx PRIVATE onnx-proto) +target_link_libraries(migraphx_onnx PRIVATE $) if(NOT WIN32) target_link_libraries(migraphx_onnx PRIVATE "-Wl,--exclude-libs,ALL") endif() target_link_libraries(migraphx_onnx PUBLIC migraphx) +enable_static_init(migraphx_onnx) rocm_install_targets( PRIVATE diff --git a/src/targets/cpu/CMakeLists.txt b/src/targets/cpu/CMakeLists.txt index 558e3538765..145df552a6b 100644 --- a/src/targets/cpu/CMakeLists.txt +++ b/src/targets/cpu/CMakeLists.txt @@ -53,6 +53,7 @@ add_library(migraphx_cpu target.cpp write_literals.cpp ) +enable_static_init(migraphx_cpu) set_target_properties(migraphx_cpu PROPERTIES EXPORT_NAME cpu) rocm_set_soversion(migraphx_cpu ${MIGRAPHX_SO_VERSION}) diff --git a/src/targets/gpu/CMakeLists.txt b/src/targets/gpu/CMakeLists.txt index 6d66ccdc573..81fb179cb47 100644 --- a/src/targets/gpu/CMakeLists.txt +++ b/src/targets/gpu/CMakeLists.txt @@ -198,6 +198,8 @@ add_library(migraphx_gpu ${MIOPEN_SRCS} ) +enable_static_init(migraphx_gpu) + set_target_properties(migraphx_gpu PROPERTIES EXPORT_NAME gpu) migraphx_generate_export_header(migraphx_gpu) @@ -406,7 +408,7 @@ add_subdirectory(hiprtc) rocm_install_targets( PRIVATE - TARGETS migraphx_gpu migraphx_device compile_for_gpu + TARGETS migraphx_gpu migraphx_device compile_for_gpu migraphx_kernels INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/include ) diff --git a/src/tf/CMakeLists.txt b/src/tf/CMakeLists.txt index 7b02373162e..5c424d7a3d4 100644 --- a/src/tf/CMakeLists.txt +++ b/src/tf/CMakeLists.txt @@ -24,7 +24,7 @@ find_package(protobuf QUIET CONFIG) if(protobuf_FOUND) - add_library(tf-proto STATIC ${PROTO_SRCS}) + add_library(tf-proto OBJECT ${PROTO_SRCS}) protobuf_generate( TARGET tf-proto PROTOS @@ -57,7 +57,7 @@ else() op_def.proto versions.proto ) - add_library(tf-proto STATIC ${PROTO_SRCS}) + add_library(tf-proto OBJECT ${PROTO_SRCS}) target_include_directories(tf-proto SYSTEM PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${PROTOBUF_INCLUDE_DIR}) target_link_libraries(tf-proto PRIVATE ${PROTOBUF_LIBRARY}) endif() @@ -76,11 +76,12 @@ target_include_directories(migraphx_tf PRIVATE include) set_target_properties(migraphx_tf PROPERTIES EXPORT_NAME tf) rocm_set_soversion(migraphx_tf ${MIGRAPHX_SO_VERSION}) rocm_clang_tidy_check(migraphx_tf) -target_link_libraries(migraphx_tf PRIVATE tf-proto) +target_link_libraries(migraphx_tf PRIVATE $) if(NOT WIN32) target_link_libraries(migraphx_tf PRIVATE "-Wl,--exclude-libs,ALL") endif() target_link_libraries(migraphx_tf PUBLIC migraphx) +enable_static_init(migraphx_tf) rocm_install_targets( PRIVATE From 4ddc5d63fde7440b1e1e97c83ddfc5cdaa5a9948 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 15:14:15 -0500 Subject: [PATCH 02/25] Build using -fPIC --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25471adb937..a184097f082 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,8 @@ rocm_setup_version(VERSION 2.16.0) math(EXPR MIGRAPHX_SO_MAJOR_VERSION "(${PROJECT_VERSION_MAJOR} * 1000 * 1000) + (${PROJECT_VERSION_MINOR} * 1000) + ${PROJECT_VERSION_PATCH}") set(MIGRAPHX_SO_VERSION ${MIGRAPHX_SO_MAJOR_VERSION}.0) -option( BUILD_SHARED_LIBS "Build as a shared library" ON ) +option(BUILD_SHARED_LIBS "Build as a shared library" ON ) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) include(CheckCXXCompilerFlag) check_cxx_compiler_flag("--cuda-host-only -x hip" HAS_HIP) From 7ceac6af35c8c2297560caa924c4be3757b5f1ec Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 15:43:05 -0500 Subject: [PATCH 03/25] Use one flag --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a184097f082..9e65543ad97 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -359,9 +359,7 @@ function(enable_static_init LIB) else() # GNU ld / LLD / gold target_link_options(${LIB} INTERFACE - "LINKER:--push-state,--whole-archive" - "$>" - "LINKER:--pop-state") + "LINKER:--push-state,--whole-archive,$,--pop-state") endif() endif() endfunction() From 6ec09c994ca4bc173fb8f6f00d81a5402cb1c685 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 15:46:27 -0500 Subject: [PATCH 04/25] Udpate year --- src/onnx/CMakeLists.txt | 2 +- src/targets/cpu/CMakeLists.txt | 2 +- src/tf/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/onnx/CMakeLists.txt b/src/onnx/CMakeLists.txt index 3347496eb01..ba9f7ce20cb 100644 --- a/src/onnx/CMakeLists.txt +++ b/src/onnx/CMakeLists.txt @@ -1,7 +1,7 @@ ##################################################################################### # The MIT License (MIT) # -# Copyright (c) 2015-2025 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2015-2026 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/src/targets/cpu/CMakeLists.txt b/src/targets/cpu/CMakeLists.txt index 145df552a6b..18e588420c3 100644 --- a/src/targets/cpu/CMakeLists.txt +++ b/src/targets/cpu/CMakeLists.txt @@ -1,7 +1,7 @@ ##################################################################################### # The MIT License (MIT) # -# Copyright (c) 2015-2024 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2015-2026 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/src/tf/CMakeLists.txt b/src/tf/CMakeLists.txt index 5c424d7a3d4..c96d6ad1472 100644 --- a/src/tf/CMakeLists.txt +++ b/src/tf/CMakeLists.txt @@ -1,7 +1,7 @@ ##################################################################################### # The MIT License (MIT) # -# Copyright (c) 2015-2025 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2015-2026 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal From ed0ce09068f1e8e5ddcdfbf2ab497a3ab729b559 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 17:49:08 -0500 Subject: [PATCH 05/25] Use build interface --- src/targets/gpu/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/targets/gpu/CMakeLists.txt b/src/targets/gpu/CMakeLists.txt index 81fb179cb47..28c51f6ec9e 100644 --- a/src/targets/gpu/CMakeLists.txt +++ b/src/targets/gpu/CMakeLists.txt @@ -392,7 +392,7 @@ if(NOT MIGRAPHX_USE_MIOPEN AND NOT MIGRAPHX_USE_ROCBLAS) else() target_link_libraries(migraphx_gpu PRIVATE migraphx_device) endif() -target_link_libraries(migraphx_gpu PRIVATE migraphx_kernels) +target_link_libraries(migraphx_gpu PRIVATE $) # Link HSA runtime for chiplet query (Linux only) if(NOT WIN32) @@ -408,7 +408,7 @@ add_subdirectory(hiprtc) rocm_install_targets( PRIVATE - TARGETS migraphx_gpu migraphx_device compile_for_gpu migraphx_kernels + TARGETS migraphx_gpu migraphx_device compile_for_gpu INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/include ) From 9dcb64dc40f56e90ed3c0d37ecaf5d5c579cc697 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 17:53:18 -0500 Subject: [PATCH 06/25] Set embed default --- cmake/Embed.cmake | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/cmake/Embed.cmake b/cmake/Embed.cmake index a0395e4150c..63df6de5ecb 100644 --- a/cmake/Embed.cmake +++ b/cmake/Embed.cmake @@ -24,15 +24,19 @@ include_guard(GLOBAL) +if(BUILD_SHARED_LIBS) + set(EMBED_USE_DEFAULT CArrays) +elseif(WIN32) + set(EMBED_USE_DEFAULT RC) +else() + set(EMBED_USE_DEFAULT LD) +endif() + if(WIN32) - set(EMBED_USE RC CACHE STRING "Use RC or CArrays to embed data files") + set(EMBED_USE ${EMBED_USE_DEFAULT} CACHE STRING "Use RC or CArrays to embed data files") set_property(CACHE EMBED_USE PROPERTY STRINGS "RC;CArrays") else() - if(BUILD_SHARED_LIBS) - set(EMBED_USE LD CACHE STRING "Use LD or CArrays to embed data files") - else() - set(EMBED_USE CArrays CACHE STRING "Use LD or CArrays to embed data files") - endif() + set(EMBED_USE ${EMBED_USE_DEFAULT} CACHE STRING "Use LD or CArrays to embed data files") set_property(CACHE EMBED_USE PROPERTY STRINGS "LD;CArrays") endif() From 47affde2a282ec086e547b7714d9a7951cbf1947 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 23 Apr 2026 17:55:31 -0500 Subject: [PATCH 07/25] Remove duplicate shared libs --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e65543ad97..a74a3d3ff01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,7 @@ endif() # By default build shared libraries option(BUILD_SHARED_LIBS "Create shared libraries" ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) option(MIGRAPHX_STRIP_SYMBOLS "Strip symbols in release mode" OFF) @@ -97,9 +98,6 @@ rocm_setup_version(VERSION 2.16.0) math(EXPR MIGRAPHX_SO_MAJOR_VERSION "(${PROJECT_VERSION_MAJOR} * 1000 * 1000) + (${PROJECT_VERSION_MINOR} * 1000) + ${PROJECT_VERSION_PATCH}") set(MIGRAPHX_SO_VERSION ${MIGRAPHX_SO_MAJOR_VERSION}.0) -option(BUILD_SHARED_LIBS "Build as a shared library" ON ) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) - include(CheckCXXCompilerFlag) check_cxx_compiler_flag("--cuda-host-only -x hip" HAS_HIP) if(HAS_HIP) From 6c6f2c441e530a255a6aae8d2deb4ba3468f2d55 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 24 Apr 2026 09:25:59 -0500 Subject: [PATCH 08/25] Disable extra warnings --- cmake/Embed.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cmake/Embed.cmake b/cmake/Embed.cmake index 63df6de5ecb..ee7ee7d6f79 100644 --- a/cmake/Embed.cmake +++ b/cmake/Embed.cmake @@ -262,7 +262,14 @@ function(add_embed_library EMBED_NAME) target_sources(${INTERNAL_EMBED_LIB} PRIVATE ${OUTPUT_FILES}) endif() target_include_directories(${INTERNAL_EMBED_LIB} PRIVATE "${EMBED_DIR}/include") - target_compile_options(${INTERNAL_EMBED_LIB} PRIVATE -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations -Wno-c++11-narrowing) + # Disable extra warnings + foreach(COMPILER_WARNING -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations -Wno-c++11-narrowing) + string(MAKE_C_IDENTIFIER "HAS_CXX_FLAG${COMPILER_WARNING}" HAS_COMPILER_WARNING) + check_cxx_compiler_flag(${COMPILER_WARNING} ${HAS_COMPILER_WARNING}) + if(${HAS_COMPILER_WARNING}) + target_compile_options(${INTERNAL_EMBED_LIB} PRIVATE ${COMPILER_WARNING}) + endif() + endforeach() set_target_properties(${INTERNAL_EMBED_LIB} PROPERTIES POSITION_INDEPENDENT_CODE On) add_library(${EMBED_NAME} INTERFACE) if(EMBED_USE STREQUAL "RC") From 8447684f2c36b072205df229d4571993cbe7bb5c Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 24 Apr 2026 16:03:58 -0500 Subject: [PATCH 09/25] Use static_cast to get around warnings instead --- cmake/Embed.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/Embed.cmake b/cmake/Embed.cmake index ee7ee7d6f79..d3b5486ba83 100644 --- a/cmake/Embed.cmake +++ b/cmake/Embed.cmake @@ -220,7 +220,7 @@ function(embed_file FILE BASE_DIRECTORY) # wraps the hex string into multiple lines embed_wrap_string(VARIABLE HEX_STRING AT_COLUMN 80) # adds '0x' prefix and comma suffix before and after every byte respectively - string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " ARRAY_VALUES ${HEX_STRING}) + string(REGEX REPLACE "([0-9a-f][0-9a-f])" "static_cast(0x\\1), " ARRAY_VALUES ${HEX_STRING}) # removes trailing comma string(REGEX REPLACE ", $" "" ARRAY_VALUES ${ARRAY_VALUES}) file(WRITE "${OUTPUT_FILE}" " @@ -263,7 +263,7 @@ function(add_embed_library EMBED_NAME) endif() target_include_directories(${INTERNAL_EMBED_LIB} PRIVATE "${EMBED_DIR}/include") # Disable extra warnings - foreach(COMPILER_WARNING -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations -Wno-c++11-narrowing) + foreach(COMPILER_WARNING -Wno-reserved-identifier -Wno-extern-initializer -Wno-missing-variable-declarations) string(MAKE_C_IDENTIFIER "HAS_CXX_FLAG${COMPILER_WARNING}" HAS_COMPILER_WARNING) check_cxx_compiler_flag(${COMPILER_WARNING} ${HAS_COMPILER_WARNING}) if(${HAS_COMPILER_WARNING}) From 67767c3f19d86469c93ed3bb4b48b72055c8a18e Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 6 May 2026 10:07:01 -0500 Subject: [PATCH 10/25] Fix the default --- cmake/Embed.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Embed.cmake b/cmake/Embed.cmake index d3b5486ba83..b53fc1bcea8 100644 --- a/cmake/Embed.cmake +++ b/cmake/Embed.cmake @@ -24,7 +24,7 @@ include_guard(GLOBAL) -if(BUILD_SHARED_LIBS) +if(NOT BUILD_SHARED_LIBS) set(EMBED_USE_DEFAULT CArrays) elseif(WIN32) set(EMBED_USE_DEFAULT RC) From ebcfdbfd5a18cbc7ecf5c1084fc490da3eb0bd98 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 6 May 2026 11:07:58 -0500 Subject: [PATCH 11/25] Add build for static lib --- Jenkinsfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 75f866fa952..6bc4d1a11d2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -302,6 +302,19 @@ pipeline { } } + stage('HIP Clang Static') { + agent { + label rocmnodename('mi100+') + } + steps { + script { + rocmtest([:]) { + cmake_build(flags: "-DBUILD_SHARED_LIBS=Off -DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${getgputargets()}'") + } + } + } + } + stage('HIP Clang Release Navi32') { agent { label rocmnodename('navi32') From 001596ebe9dc2f9a83a99b3d46a8575ccaaa7875 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 6 May 2026 22:25:06 -0500 Subject: [PATCH 12/25] Static lib fixits --- Jenkinsfile | 2 +- src/targets/ref/CMakeLists.txt | 1 + test/CMakeLists.txt | 5 ++++- test/gpu/jit.cpp | 1 - 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6bc4d1a11d2..c946740e7d6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -309,7 +309,7 @@ pipeline { steps { script { rocmtest([:]) { - cmake_build(flags: "-DBUILD_SHARED_LIBS=Off -DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${getgputargets()}'") + cmake_build(flags: "-DBUILD_SHARED_LIBS=Off -DMIGRAPHX_ENABLE_PYTHON=Off -DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${getgputargets()}'") } } } diff --git a/src/targets/ref/CMakeLists.txt b/src/targets/ref/CMakeLists.txt index d4b3e63c7a1..52b715e5bd1 100644 --- a/src/targets/ref/CMakeLists.txt +++ b/src/targets/ref/CMakeLists.txt @@ -26,6 +26,7 @@ add_library(migraphx_ref target.cpp lowering.cpp ) +enable_static_init(migraphx_ref) set_target_properties(migraphx_ref PROPERTIES EXPORT_NAME ref) rocm_set_soversion(migraphx_ref ${MIGRAPHX_SO_VERSION}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1db4fb29d4f..a9fc7c9e76b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -42,6 +42,9 @@ list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/register_target.cpp) foreach(TEST ${TESTS}) get_filename_component(BASE_NAME ${TEST} NAME_WE) rocm_add_test_executable(test_${BASE_NAME} ${TEST}) + if(NOT BUILD_SHARED_LIBS) + target_link_libraries(test_${BASE_NAME} register_targets) + endif() rocm_clang_tidy_check(test_${BASE_NAME}) endforeach() @@ -60,7 +63,7 @@ if(MIGRAPHX_ENABLE_GPU) if(MIGRAPHX_USE_HIPRTC) target_compile_definitions(test_gpu_${BASE_NAME} PUBLIC -DMIGRAPHX_USE_HIPRTC) endif() - target_link_libraries(test_gpu_${BASE_NAME} migraphx_gpu migraphx_kernels register_targets) + target_link_libraries(test_gpu_${BASE_NAME} migraphx_gpu register_targets) endforeach() add_subdirectory(gpu/kernels) endif() diff --git a/test/gpu/jit.cpp b/test/gpu/jit.cpp index 96ab858dd0f..9834f89c4b9 100644 --- a/test/gpu/jit.cpp +++ b/test/gpu/jit.cpp @@ -35,7 +35,6 @@ #include #include #include -#include // NOLINTNEXTLINE const std::string write_2s = R"__migraphx__( From d3e762e57230056de0f94c02abd6e55dafe32a84 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 6 May 2026 23:22:06 -0500 Subject: [PATCH 13/25] Only register targets for windows --- test/CMakeLists.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a9fc7c9e76b..b2d6af5476e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -33,8 +33,13 @@ if(MIGRAPHX_DISABLE_LARGE_BUFFER_TESTS) add_compile_definitions(MIGRAPHX_DISABLE_LARGE_BUFFER_TESTS) endif() -add_library(register_targets STATIC register_target.cpp) -target_link_libraries(register_targets PRIVATE migraphx migraphx_all_targets) +if(WIN32) + add_library(register_targets STATIC register_target.cpp) + target_link_libraries(register_targets PRIVATE migraphx migraphx_all_targets) + enable_static_init(register_targets) +else() + add_library(register_targets INTERFACE) +endif() file(GLOB TESTS CONFIGURE_DEPENDS *.cpp) list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/register_target.cpp) @@ -43,7 +48,7 @@ foreach(TEST ${TESTS}) get_filename_component(BASE_NAME ${TEST} NAME_WE) rocm_add_test_executable(test_${BASE_NAME} ${TEST}) if(NOT BUILD_SHARED_LIBS) - target_link_libraries(test_${BASE_NAME} register_targets) + target_link_libraries(test_${BASE_NAME} migraphx_ref register_targets) endif() rocm_clang_tidy_check(test_${BASE_NAME}) endforeach() From a2de4a80d3bf40f189fc1f450e4a6d2fbe8a0f6d Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 6 May 2026 23:25:49 -0500 Subject: [PATCH 14/25] Add dependency on ref target --- test/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b2d6af5476e..b88544b36c5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -47,7 +47,10 @@ list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/register_target.cpp) foreach(TEST ${TESTS}) get_filename_component(BASE_NAME ${TEST} NAME_WE) rocm_add_test_executable(test_${BASE_NAME} ${TEST}) - if(NOT BUILD_SHARED_LIBS) + # Some unit tests need the ref target + if(BUILD_SHARED_LIBS) + add_dependencies(test_${BASE_NAME} migraphx_ref) + else() target_link_libraries(test_${BASE_NAME} migraphx_ref register_targets) endif() rocm_clang_tidy_check(test_${BASE_NAME}) From 427509226a44d1091320a90ce1dcdab0d1a584aa Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 7 May 2026 08:53:12 -0500 Subject: [PATCH 15/25] Update year --- src/targets/ref/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/targets/ref/CMakeLists.txt b/src/targets/ref/CMakeLists.txt index 52b715e5bd1..017f6f7cd19 100644 --- a/src/targets/ref/CMakeLists.txt +++ b/src/targets/ref/CMakeLists.txt @@ -1,7 +1,7 @@ ##################################################################################### # The MIT License (MIT) # -# Copyright (c) 2015-2024 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2015-2026 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b88544b36c5..e2b3defd1a9 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,7 @@ # #################################################################################### # The MIT License (MIT) # -# Copyright (c) 2015-2025 Advanced Micro Devices, Inc. All rights reserved. +# Copyright (c) 2015-2026 Advanced Micro Devices, Inc. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal From 62f13560a2eee6d02401d4d0c0055bd0d98a8ea3 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 8 May 2026 11:39:42 -0500 Subject: [PATCH 16/25] Skip package build for static build since its too large --- Jenkinsfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c946740e7d6..1037a3128b7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -71,6 +71,10 @@ def cmake_build = { bconf -> def compiler = bconf.get("compiler", "/opt/rocm/llvm/bin/clang++") def flags = bconf.get("flags", "") def gpu_debug = bconf.get("gpu_debug", "0") + def skip_package = bconf.get("skip_package", false) + def targets = "all package check" + if(skip_package) + targets = "all check" def cmd = """ ulimit -c unlimited echo "leak:dnnl::impl::malloc" > suppressions.txt @@ -92,13 +96,13 @@ def cmake_build = { bconf -> make -j\$(nproc) generate VERBOSE=1 git diff git diff-index --quiet HEAD || (echo "Generated files are different. Please run make generate and commit the changes." && exit 1) - make -j\$(nproc) all package check VERBOSE=1 + make -j\$(nproc) ${targets} VERBOSE=1 md5sum ./*.deb """ echo cmd sh cmd // Only archive from master or develop - if (env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") { + if (!skip_package && (env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master")) { archiveArtifacts artifacts: "build/*.deb", allowEmptyArchive: true, fingerprint: true } } @@ -309,7 +313,7 @@ pipeline { steps { script { rocmtest([:]) { - cmake_build(flags: "-DBUILD_SHARED_LIBS=Off -DMIGRAPHX_ENABLE_PYTHON=Off -DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${getgputargets()}'") + cmake_build(skip_package: true, flags: "-DBUILD_SHARED_LIBS=Off -DMIGRAPHX_ENABLE_PYTHON=Off -DCMAKE_BUILD_TYPE=release -DGPU_TARGETS='${getgputargets()}'") } } } From 575ae05147cc801c6817d4cd69717a0d5271b776 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 11 May 2026 11:50:33 -0500 Subject: [PATCH 17/25] Add target for lazy loading ref --- test/CMakeLists.txt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e2b3defd1a9..b00ce3c9941 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -41,6 +41,13 @@ else() add_library(register_targets INTERFACE) endif() +add_library(migraphx_lazy_ref INTERFACE) +if(BUILD_SHARED_LIBS) + add_dependencies(migraphx_lazy_ref migraphx_ref) +else() + target_link_libraries(migraphx_lazy_ref INTERFACE migraphx_ref register_targets) +endif() + file(GLOB TESTS CONFIGURE_DEPENDS *.cpp) list(REMOVE_ITEM TESTS ${CMAKE_CURRENT_SOURCE_DIR}/register_target.cpp) @@ -48,11 +55,7 @@ foreach(TEST ${TESTS}) get_filename_component(BASE_NAME ${TEST} NAME_WE) rocm_add_test_executable(test_${BASE_NAME} ${TEST}) # Some unit tests need the ref target - if(BUILD_SHARED_LIBS) - add_dependencies(test_${BASE_NAME} migraphx_ref) - else() - target_link_libraries(test_${BASE_NAME} migraphx_ref register_targets) - endif() + target_link_libraries(test_${BASE_NAME} migraphx_lazy_ref) rocm_clang_tidy_check(test_${BASE_NAME}) endforeach() @@ -71,7 +74,7 @@ if(MIGRAPHX_ENABLE_GPU) if(MIGRAPHX_USE_HIPRTC) target_compile_definitions(test_gpu_${BASE_NAME} PUBLIC -DMIGRAPHX_USE_HIPRTC) endif() - target_link_libraries(test_gpu_${BASE_NAME} migraphx_gpu register_targets) + target_link_libraries(test_gpu_${BASE_NAME} migraphx_lazy_ref migraphx_gpu register_targets) endforeach() add_subdirectory(gpu/kernels) endif() @@ -88,7 +91,7 @@ if(MIGRAPHX_ENABLE_FPGA) COST 10 RESOURCE_LOCK fpga ) - target_link_libraries(test_fpga_${BASE_NAME} migraphx_fpga) + target_link_libraries(test_fpga_${BASE_NAME} migraphx_lazy_ref migraphx_fpga) endforeach() endif() From 82e3533047f370ba6d330444577003266ac0de72 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 11 May 2026 12:24:17 -0500 Subject: [PATCH 18/25] Fix transistive linking --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c838390cdd6..223e67eeaaf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,8 @@ ##################################################################################### cmake_minimum_required(VERSION 3.15 FATAL_ERROR) +cmake_policy(SET CMP0099 NEW) + if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") message(FATAL_ERROR "The binary and source directory cannot be the same") endif() From bb9ed2d2bbbfddbcdab8bb797993cf8244179f0b Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 11 May 2026 16:16:33 -0500 Subject: [PATCH 19/25] Check for debs --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1037a3128b7..3554a806ec0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -97,7 +97,7 @@ def cmake_build = { bconf -> git diff git diff-index --quiet HEAD || (echo "Generated files are different. Please run make generate and commit the changes." && exit 1) make -j\$(nproc) ${targets} VERBOSE=1 - md5sum ./*.deb + [[ -n \$(compgen -G "./*.deb") ]] && md5sum ./*.deb """ echo cmd sh cmd From dec6a735a3b569003d77224dc9b6792a936418e0 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 11 May 2026 16:17:26 -0500 Subject: [PATCH 20/25] Make is posix compliant --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3554a806ec0..e555f1699a4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -97,7 +97,7 @@ def cmake_build = { bconf -> git diff git diff-index --quiet HEAD || (echo "Generated files are different. Please run make generate and commit the changes." && exit 1) make -j\$(nproc) ${targets} VERBOSE=1 - [[ -n \$(compgen -G "./*.deb") ]] && md5sum ./*.deb + [ -n "\$(ls ./*.deb 2>/dev/null)" ] && md5sum ./*.deb """ echo cmd sh cmd From c4810372ec6542a393009e7f7b93e898163062b9 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 15 May 2026 18:06:01 -0500 Subject: [PATCH 21/25] Use if --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e72c15076b5..511f6d80571 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -97,7 +97,7 @@ def cmake_build = { bconf -> git diff git diff-index --quiet HEAD || (echo "Generated files are different. Please run make generate and commit the changes." && exit 1) make -j\$(nproc) ${targets} VERBOSE=1 - [ -n "\$(ls ./*.deb 2>/dev/null)" ] && md5sum ./*.deb + if [ -n "\$(ls ./*.deb 2>/dev/null)" ]; then md5sum ./*.deb; fi """ echo cmd sh cmd From e2aa1d325a4c0c8d668df63dce8e46748a95df6d Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 18 May 2026 12:58:07 -0500 Subject: [PATCH 22/25] Add static builds to windows --- .github/workflows/windows.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/windows.yaml b/.github/workflows/windows.yaml index 9c0a30cbd5f..58f1d69cc34 100644 --- a/.github/workflows/windows.yaml +++ b/.github/workflows/windows.yaml @@ -20,6 +20,9 @@ jobs: configuration: - Release - Debug + shared: + - "On" + - "Off" steps: @@ -73,6 +76,7 @@ jobs: run: | rbuild build -d cget -s gh-win-cpu -G Ninja -T tests \ -DMIGRAPHX_DISABLE_LARGE_BUFFER_TESTS=On \ + -DBUILD_SHARED_LIBS=${{ matrix.shared }} \ -DCTEST_TIMEOUT=5000 cd build cmake --build . --target driver From 7b0939a9a31bb9438a9b02bfb4d5f335c114ec8d Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 18 May 2026 13:39:06 -0500 Subject: [PATCH 23/25] Add static define for export --- cmake/ExportHeader.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/ExportHeader.cmake b/cmake/ExportHeader.cmake index cec4f5441fa..a01d0bfb430 100644 --- a/cmake/ExportHeader.cmake +++ b/cmake/ExportHeader.cmake @@ -39,8 +39,13 @@ function(migraphx_generate_export_header TARGET) string(REPLACE "_" "/" __directory ${TARGET}) string(TOLOWER ${__directory} __directory) endif() + string(MAKE_C_IDENTIFIER "${TARGET}" __target_id) + string(TOUPPER "${TARGET}" __base_name) set(__file_name ${CMAKE_CURRENT_BINARY_DIR}/include/${__directory}/export.h) generate_export_header(${TARGET} EXPORT_FILE_NAME ${__file_name}) target_include_directories(${TARGET} PUBLIC $) + if(NOT BUILD_SHARED_LIBS) + target_compile_definitions(example_static PRIVATE ${__base_name}_STATIC_DEFINE) + endif() rocm_install(FILES ${__file_name} DESTINATION include/${__directory}) endfunction() From 03a502fcc1387e006f84a2519426d03258779e2a Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 18 May 2026 13:52:56 -0500 Subject: [PATCH 24/25] Set correct target name --- cmake/ExportHeader.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/ExportHeader.cmake b/cmake/ExportHeader.cmake index a01d0bfb430..1d73096eab2 100644 --- a/cmake/ExportHeader.cmake +++ b/cmake/ExportHeader.cmake @@ -45,7 +45,7 @@ function(migraphx_generate_export_header TARGET) generate_export_header(${TARGET} EXPORT_FILE_NAME ${__file_name}) target_include_directories(${TARGET} PUBLIC $) if(NOT BUILD_SHARED_LIBS) - target_compile_definitions(example_static PRIVATE ${__base_name}_STATIC_DEFINE) + target_compile_definitions(${TARGET} PRIVATE ${__base_name}_STATIC_DEFINE) endif() rocm_install(FILES ${__file_name} DESTINATION include/${__directory}) endfunction() From 545154d56f48a9bc90e7613b70eabcfb066809b7 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 18 May 2026 16:04:24 -0500 Subject: [PATCH 25/25] Try public --- cmake/ExportHeader.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/ExportHeader.cmake b/cmake/ExportHeader.cmake index 1d73096eab2..cdda6f81380 100644 --- a/cmake/ExportHeader.cmake +++ b/cmake/ExportHeader.cmake @@ -45,7 +45,7 @@ function(migraphx_generate_export_header TARGET) generate_export_header(${TARGET} EXPORT_FILE_NAME ${__file_name}) target_include_directories(${TARGET} PUBLIC $) if(NOT BUILD_SHARED_LIBS) - target_compile_definitions(${TARGET} PRIVATE ${__base_name}_STATIC_DEFINE) + target_compile_definitions(${TARGET} PUBLIC ${__base_name}_STATIC_DEFINE) endif() rocm_install(FILES ${__file_name} DESTINATION include/${__directory}) endfunction()