[llvm] [offload][omp] link libomptarget against liboffload (PR #221730)
Alex Duran via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 7 06:48:48 PDT 2026
https://github.com/adurang created https://github.com/llvm/llvm-project/pull/221730
<sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback 💬</a></sub>
>From aabcb0de10d5acb9c755493789ee9bf4afe7c541 Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Mon, 7 Sep 2026 02:42:07 -0700
Subject: [PATCH] [offload][omp] link libomptarget against liboffload
---
format-changes.sh | 41 ++++++++++++++++++
offload/liboffload/exports | 58 ++++++++++++++++++++++++++
offload/liboffload/src/OffloadImpl.cpp | 12 ++++--
offload/libomptarget/CMakeLists.txt | 10 ++---
offload/libomptarget/exports | 6 +++
offload/libomptarget/interface.cpp | 3 ++
6 files changed, 122 insertions(+), 8 deletions(-)
create mode 100755 format-changes.sh
diff --git a/format-changes.sh b/format-changes.sh
new file mode 100755
index 0000000000000..d9dbfcdf6b8c9
--- /dev/null
+++ b/format-changes.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Helper script to format changed files with clang-format
+#
+
+CLANG_FORMAT="../build-release/bin/clang-format"
+
+if [ ! -x "$CLANG_FORMAT" ]; then
+ CLANG_FORMAT=$(which clang-format 2>/dev/null)
+ if [ -z "$CLANG_FORMAT" ]; then
+ echo "Error: clang-format not found"
+ exit 1
+ fi
+fi
+
+echo "Using clang-format: $CLANG_FORMAT"
+
+# Get the base branch (default to main)
+BASE_BRANCH="${1:-main}"
+
+# Get list of modified C/C++ files
+FILES=$(git diff --name-only --diff-filter=ACM "$BASE_BRANCH"...HEAD | \
+ grep -E '\.(c|cpp|cc|cxx|h|hpp|hxx)$' | \
+ grep -E '^(clang|llvm|mlir|offload|compiler-rt|lld|flang)/')
+
+if [ -z "$FILES" ]; then
+ echo "No C/C++ files to format"
+ exit 0
+fi
+
+echo "Formatting files:"
+for file in $FILES; do
+ if [ -f "$file" ]; then
+ echo " - $file"
+ "$CLANG_FORMAT" -i "$file"
+ fi
+done
+
+echo ""
+echo "Done! Files have been formatted."
+echo "Review the changes with: git diff"
diff --git a/offload/liboffload/exports b/offload/liboffload/exports
index 168341aa7d938..5487e16168681 100644
--- a/offload/liboffload/exports
+++ b/offload/liboffload/exports
@@ -1,6 +1,64 @@
VERS1.0 {
global:
ol*;
+ # Symbols currently used by libomptarget. They should be removed from here as
+ # they become replaced by calls to the liboffload API.
+ # No new symbols should be added here.
+ extern "C++" {
+ error::OffloadError::ID;
+ "error::OffloadErrCategory()";
+ "llvm::omp::target::RPCServerTy::registerCallback(unsigned int (*)(void*, unsigned int))";
+ "llvm::omp::target::plugin::GenericDeviceTy::dataFill(void*, void const*, long, long, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::async_barrier(omp_interop_val_t*)";
+ "llvm::omp::target::plugin::GenericPluginTy::create_event(int, void**)";
+ "llvm::omp::target::plugin::GenericPluginTy::create_interop(int, int, interop_spec_t*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_alloc(int, long, void*, int)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_delete(int, void*, int)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_exchange(int, void*, int, void*, long)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_exchange_async(int, void*, int, void*, long, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_fence(int, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_lock(int, void*, long, void**)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_notify_mapped(int, void*, long)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_notify_unmapped(int, void*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_retrieve_async(int, void*, void*, long, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_submit(int, void*, void*, long)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_submit_async(int, void*, void*, long, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::data_unlock(int, void*)";
+ "llvm::omp::target::plugin::GenericPluginTy::destroy_event(int, void*)";
+ "llvm::omp::target::plugin::GenericPluginTy::flush_queue(omp_interop_val_t*)";
+ "llvm::omp::target::plugin::GenericPluginTy::get_function(__tgt_device_binary, char const*, void**)";
+ "llvm::omp::target::plugin::GenericPluginTy::get_global(__tgt_device_binary, unsigned long, char const*, void**)";
+ "llvm::omp::target::plugin::GenericPluginTy::init()";
+ "llvm::omp::target::plugin::GenericPluginTy::deinit()";
+ "llvm::omp::target::plugin::GenericPluginTy::init_device(int)";
+ "llvm::omp::target::plugin::GenericPluginTy::initialize_record_replay(int, long, void*, bool, bool, bool, bool, char const*, char const*)";
+ "llvm::omp::target::plugin::GenericPluginTy::isDeviceCompatible(int, llvm::StringRef)";
+ "llvm::omp::target::plugin::GenericPluginTy::isPluginCompatible(llvm::StringRef)";
+ "llvm::omp::target::plugin::GenericPluginTy::is_accessible_ptr(int, void const*, unsigned long)";
+ "llvm::omp::target::plugin::GenericPluginTy::is_data_exchangable(int, int)";
+ "llvm::omp::target::plugin::GenericPluginTy::is_device_initialized(int) const";
+ "llvm::omp::target::plugin::GenericPluginTy::is_initialized() const";
+ "llvm::omp::target::plugin::GenericPluginTy::launch_kernel(int, void*, llvm::omp::target::plugin::KernelLaunchArgsTy&, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::load_binary(int, __tgt_device_image*, __tgt_device_binary*)";
+ "llvm::omp::target::plugin::GenericPluginTy::number_of_devices()";
+ "llvm::omp::target::plugin::GenericPluginTy::obtain_device_info(int)";
+ "llvm::omp::target::plugin::GenericPluginTy::print_device_info(int)";
+ "llvm::omp::target::plugin::GenericPluginTy::query_async(int, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::record_event(int, void*, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::release_interop(int, omp_interop_val_t*)";
+ "llvm::omp::target::plugin::GenericPluginTy::set_device_identifier(int, int)";
+ "llvm::omp::target::plugin::GenericPluginTy::sync_barrier(omp_interop_val_t*)";
+ "llvm::omp::target::plugin::GenericPluginTy::sync_event(int, void*)";
+ "llvm::omp::target::plugin::GenericPluginTy::synchronize(int, __tgt_async_info*)";
+ "llvm::omp::target::plugin::GenericPluginTy::use_auto_zero_copy(int)";
+ "llvm::omp::target::plugin::GenericPluginTy::wait_event(int, void*, __tgt_async_info*)";
+ llvm::omp::target::ompt::Initialized;
+ llvm::omp::target::ompt::lookupCallbackByCode;
+ llvm::omp::target::ompt::lookupCallbackByName;
+ createPlugin_*;
+ # Temporary helpers to help transition of libomptarget to liboffload.
+ __ol_tgt_setInfoFlag;
+ };
local:
*;
};
diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp
index 11c07483b38aa..c2cf3db3bacbc 100644
--- a/offload/liboffload/src/OffloadImpl.cpp
+++ b/offload/liboffload/src/OffloadImpl.cpp
@@ -29,9 +29,9 @@
#ifdef OMPT_SUPPORT
namespace llvm::omp::target {
namespace ompt {
-bool Initialized = false;
-ompt_get_callback_t lookupCallbackByCode = nullptr;
-ompt_function_lookup_t lookupCallbackByName = nullptr;
+LLVM_ATTRIBUTE_WEAK bool Initialized = false;
+LLVM_ATTRIBUTE_WEAK ompt_get_callback_t lookupCallbackByCode = nullptr;
+LLVM_ATTRIBUTE_WEAK ompt_function_lookup_t lookupCallbackByName = nullptr;
} // namespace ompt
} // namespace llvm::omp::target
#endif
@@ -1479,5 +1479,11 @@ Error olQueryQueue_impl(ol_queue_handle_t Queue, bool *IsQueueWorkCompleted) {
return Error::success();
}
+// Temporary helpers to help transition of libomptarget to liboffload
+extern "C" void __ol_tgt_setInfoFlag(uint32_t NewInfoLevel) {
+ std::atomic<uint32_t> &InfoLevel = getInfoLevelInternal();
+ InfoLevel.store(NewInfoLevel);
+}
+
} // namespace offload
} // namespace llvm
diff --git a/offload/libomptarget/CMakeLists.txt b/offload/libomptarget/CMakeLists.txt
index 403b3e5dad269..d0b24c4ff4e65 100644
--- a/offload/libomptarget/CMakeLists.txt
+++ b/offload/libomptarget/CMakeLists.txt
@@ -28,8 +28,12 @@ else()
llvm_map_components_to_libnames(llvm_libs FrontendOpenMP Support Object)
endif()
target_link_libraries(omptarget PRIVATE omp ${llvm_libs})
+target_link_libraries(omptarget PRIVATE LLVMOffload)
target_include_directories(omptarget PRIVATE
- ${LIBOMPTARGET_INCLUDE_DIR} ${LIBOMPTARGET_BINARY_INCLUDE_DIR}
+ ${LIBOMPTARGET_INCLUDE_DIR}
+ ${LIBOMPTARGET_BINARY_INCLUDE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../plugins-nextgen/common/include
+ ${CMAKE_CURRENT_BINARY_DIR}/../plugins-nextgen/common/include
)
if(LLVM_HAVE_LINK_VERSION_SCRIPT)
@@ -42,10 +46,6 @@ target_compile_definitions(omptarget PRIVATE
DEBUG_PREFIX="omptarget"
)
-foreach(plugin IN LISTS LIBOMPTARGET_PLUGINS_TO_BUILD)
- target_link_libraries(omptarget PRIVATE omptarget.rtl.${plugin})
-endforeach()
-
target_compile_options(omptarget PRIVATE ${offload_compile_flags})
target_link_options(omptarget PRIVATE ${offload_link_flags})
diff --git a/offload/libomptarget/exports b/offload/libomptarget/exports
index 1831c43cc5f29..6aaddc64cf508 100644
--- a/offload/libomptarget/exports
+++ b/offload/libomptarget/exports
@@ -83,6 +83,12 @@ VERS1.0 {
__llvmPushCallConfiguration;
__llvmPopCallConfiguration;
llvmLaunchKernel;
+ # OMPT symbols that currently need to be seen by liboffload.
+ extern "C++" {
+ llvm::omp::target::ompt::Initialized;
+ llvm::omp::target::ompt::lookupCallbackByCode;
+ llvm::omp::target::ompt::lookupCallbackByName;
+ };
local:
*;
};
diff --git a/offload/libomptarget/interface.cpp b/offload/libomptarget/interface.cpp
index 5d7d948711b99..5b5cc310b1b31 100644
--- a/offload/libomptarget/interface.cpp
+++ b/offload/libomptarget/interface.cpp
@@ -585,10 +585,13 @@ EXTERN void __tgt_push_mapper_component(void *RtMapperHandle, void *Base,
MapComponentInfoTy(Base, Begin, Size, Type, Name));
}
+extern "C" void __ol_tgt_setInfoFlag(uint32_t NewInfoLevel);
EXTERN void __tgt_set_info_flag(uint32_t NewInfoLevel) {
assert(PM && "Runtime not initialized");
std::atomic<uint32_t> &InfoLevel = getInfoLevelInternal();
InfoLevel.store(NewInfoLevel);
+ // Notify the liboffload runtime about the new info level.
+ __ol_tgt_setInfoFlag(NewInfoLevel);
}
EXTERN int __tgt_print_device_info(int64_t DeviceId) {
More information about the llvm-commits
mailing list