From 5a6ac895d1acc5d4836f29f9740e245d8a5ec5fe Mon Sep 17 00:00:00 2001 From: "Jonathan R. Madsen" Date: Tue, 26 Sep 2023 13:50:23 -0500 Subject: [PATCH] Sync with rocprofiler updates (#26) - Update rocprofiler_configure prototype - add compile_commands.json to .gitignore --- .gitignore | 1 + cmake/rocprofiler_register_options.cmake | 4 +- .../rocprofiler-register.h | 23 ++++++++--- .../rocprofiler_register.cpp | 9 +++-- tests/rocprofiler/rocprofiler.cpp | 38 +++++++++++++------ 5 files changed, 52 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index ff0a008fec..eb974bc1f1 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ # Build directories /build* /.cache +/compile_commands.json diff --git a/cmake/rocprofiler_register_options.cmake b/cmake/rocprofiler_register_options.cmake index 65d2e0878e..5d4385769a 100644 --- a/cmake/rocprofiler_register_options.cmake +++ b/cmake/rocprofiler_register_options.cmake @@ -20,8 +20,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) rocprofiler_register_add_option(ROCPROFILER_REGISTER_BUILD_TESTS "Enable building the tests" OFF) -rocprofiler_register_add_option(ROCPROFILER_REGISTER_BUILD_SAMPLES "Enable building the - code samples" OFF) +rocprofiler_register_add_option(ROCPROFILER_REGISTER_BUILD_SAMPLES + "Enable building the code samples" OFF) rocprofiler_register_add_option(ROCPROFILER_REGISTER_BUILD_CI "Enable continuous integration additions" OFF ADVANCED) rocprofiler_register_add_option(ROCPROFILER_REGISTER_ENABLE_CLANG_TIDY diff --git a/source/include/rocprofiler-register/rocprofiler-register.h b/source/include/rocprofiler-register/rocprofiler-register.h index b49c1c8cdb..79a89fd1b8 100644 --- a/source/include/rocprofiler-register/rocprofiler-register.h +++ b/source/include/rocprofiler-register/rocprofiler-register.h @@ -22,20 +22,33 @@ #include +#include #include #ifdef __cplusplus extern "C" { #endif -typedef int (*rocprofiler_configure_callback_t)(void*); +typedef struct +{ + const char* name; ///< clients should set this value for debugging + const uint32_t handle; ///< internal handle +} rocprofiler_client_id_t; + +typedef void (*rocprofiler_client_finalize_t)(rocprofiler_client_id_t); + +typedef int (*rocprofiler_tool_initialize_t)(rocprofiler_client_finalize_t finalize_func, + void* tool_data); + +typedef void (*rocprofiler_tool_finalize_t)(void* tool_data); typedef struct { - rocprofiler_configure_callback_t initialize; - rocprofiler_configure_callback_t finalize; - void* user_data; -} rocprofiler_configure_result_t; + size_t size; ///< in case of future extensions + rocprofiler_tool_initialize_t initialize; ///< context creation + rocprofiler_tool_finalize_t finalize; ///< cleanup + void* tool_data; ///< data to provide to init and fini callbacks +} rocprofiler_tool_configure_result_t; typedef uint32_t (*rocprofiler_register_import_func_t)(void); diff --git a/source/lib/rocprofiler-register/rocprofiler_register.cpp b/source/lib/rocprofiler-register/rocprofiler_register.cpp index a2eb28fa7e..a9329b5753 100644 --- a/source/lib/rocprofiler-register/rocprofiler_register.cpp +++ b/source/lib/rocprofiler-register/rocprofiler_register.cpp @@ -48,8 +48,8 @@ extern "C" { #pragma weak rocprofiler_register_import_roctx #pragma weak rocprofiler_register_import_roctx_static -extern rocprofiler_configure_result_t* -rocprofiler_configure(uint32_t, const char*, uint32_t, uint32_t); +extern rocprofiler_tool_configure_result_t* +rocprofiler_configure(uint32_t, const char*, uint32_t, rocprofiler_client_id_t*); extern int rocprofiler_set_api_table(const char*, uint64_t, uint64_t, void**, uint64_t); @@ -226,12 +226,13 @@ rocp_reg_scan_for_tools() LOG(INFO) << "loaded " << _rocp_reg_lib_path_fname.string() << " library at " << _rocp_reg_lib_path.string(); - LOG_IF(FATAL, !rocprofiler_lib_handle) << _rocp_reg_lib << " failed to load\n"; + LOG_IF(FATAL, rocprofiler_lib_handle == nullptr) + << _rocp_reg_lib << " failed to load\n"; *(void**) (&rocprofiler_lib_config_fn) = dlsym(rocprofiler_lib_handle, rocprofiler_lib_register_entrypoint); - LOG_IF(FATAL, !rocprofiler_lib_config_fn) + LOG_IF(FATAL, rocprofiler_lib_config_fn == nullptr) << _rocp_reg_lib << " did not contain '" << rocprofiler_lib_register_entrypoint << "' symbol\n"; } diff --git a/tests/rocprofiler/rocprofiler.cpp b/tests/rocprofiler/rocprofiler.cpp index 9b26feb342..de24381253 100644 --- a/tests/rocprofiler/rocprofiler.cpp +++ b/tests/rocprofiler/rocprofiler.cpp @@ -42,26 +42,40 @@ roctx_range_pop(const char* name) } // namespace rocprofiler extern "C" { -struct rocprofiler_configure_result_t +typedef struct { - int (*initialize)(void*) = nullptr; - int (*finalize)(void*) = nullptr; - void* data = nullptr; -}; + const char* name; ///< clients should set this value for debugging + const uint32_t handle; ///< internal handle +} rocprofiler_client_id_t; -rocprofiler_configure_result_t* -rocprofiler_configure(uint32_t, const char*, uint32_t, uint32_t) +typedef void (*rocprofiler_client_finalize_t)(rocprofiler_client_id_t); + +typedef int (*rocprofiler_tool_initialize_t)(rocprofiler_client_finalize_t finalize_func, + void* tool_data); + +typedef void (*rocprofiler_tool_finalize_t)(void* tool_data); + +typedef struct +{ + size_t size; ///< in case of future extensions + rocprofiler_tool_initialize_t initialize; ///< context creation + rocprofiler_tool_finalize_t finalize; ///< cleanup + void* tool_data; ///< data to provide to init and fini callbacks +} rocprofiler_tool_configure_result_t; + +rocprofiler_tool_configure_result_t* +rocprofiler_configure(uint32_t, const char*, uint32_t, rocprofiler_client_id_t*) __attribute__((visibility("default"))); int rocprofiler_set_api_table(const char*, uint64_t, uint64_t, void**, uint64_t) __attribute__((visibility("default"))); -rocprofiler_configure_result_t* -rocprofiler_configure(uint32_t version, - const char* runtime_version, - uint32_t priority, - uint32_t tool_id) +rocprofiler_tool_configure_result_t* +rocprofiler_configure(uint32_t version, + const char* runtime_version, + uint32_t priority, + rocprofiler_client_id_t* tool_id) { (void) version; (void) runtime_version;