Skip to content

Commit

Permalink
Add source code for RMV 1.4.1 release.
Browse files Browse the repository at this point in the history
  • Loading branch information
ahosier committed Jun 13, 2022
1 parent 55205a4 commit f7750e6
Show file tree
Hide file tree
Showing 15 changed files with 254 additions and 86 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ IF(WIN32)
ELSEIF(UNIX)
# Use -Wno-missing-field-initializers for CentOS compiler warning
add_compile_options(-std=c++11 -D_LINUX -Wall -Wextra -Werror -Wno-missing-field-initializers)
# Allow executable to be double clicked.
add_link_options(-no-pie)
# Use _DEBUG on Unix for Debug Builds (defined automatically on Windows)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
ENDIF(WIN32)
Expand Down
28 changes: 19 additions & 9 deletions source/backend/rmt_data_set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ static bool MoveTraceFile(const char* existing_file_path, const char* new_file_p
return MoveFileEx(existing_file_path, new_file_path, MOVEFILE_REPLACE_EXISTING);
#else
bool result = false;
if (CopyTraceFile(existing_file_path, new_file_path))
if (rename(existing_file_path, new_file_path) == 0)
{
result = remove(existing_file_path);
result = true;
}

return result;
Expand Down Expand Up @@ -397,7 +397,7 @@ static RmtErrorCode ParseChunks(RmtDataSet* data_set)
}

// Initialize the token heap for k-way merging.
error_code = RmtStreamMergerInitialize(&data_set->stream_merger, data_set->streams, data_set->stream_count);
error_code = RmtStreamMergerInitialize(&data_set->stream_merger, data_set->streams, data_set->stream_count, data_set->file_handle);
RMT_ASSERT(error_code == kRmtOk);
RMT_RETURN_ON_ERROR(error_code == kRmtOk, error_code);

Expand Down Expand Up @@ -1385,7 +1385,7 @@ static RmtErrorCode TimelineGeneratorParseData(RmtDataSet* data_set, RmtDataTime
}
}

RmtStreamMergerReset(&data_set->stream_merger);
RmtStreamMergerReset(&data_set->stream_merger, data_set->file_handle);

// if the heap has something there, then add it.
int32_t last_value_index = -1;
Expand Down Expand Up @@ -1776,7 +1776,7 @@ RmtErrorCode RmtDataSetGenerateSnapshot(RmtDataSet* data_set, RmtSnapshotPoint*
RMT_ASSERT(error_code == kRmtOk);

// Reset the RMT stream parsers ready to load the data.
RmtStreamMergerReset(&data_set->stream_merger);
RmtStreamMergerReset(&data_set->stream_merger, data_set->file_handle);

// process all the tokens
while (!RmtStreamMergerIsEmpty(&data_set->stream_merger))
Expand Down Expand Up @@ -1956,7 +1956,7 @@ RmtErrorCode RmtDataSetAddSnapshot(RmtDataSet* data_set, const char* name, uint6
}

// guts of removing a snapshot without destroying the cached object, lets this code be shared with rename.
static void RemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index)
static void RemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index, RmtDataSnapshot* open_snapshot)
{
if (!data_set->read_only)
{
Expand All @@ -1970,19 +1970,29 @@ static void RemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index)
// remove the snapshot from the list of snapshot points in the dataset.
const int32_t last_snapshot_index = data_set->snapshot_count - 1;
memcpy(&data_set->snapshots[snapshot_index], &data_set->snapshots[last_snapshot_index], sizeof(RmtSnapshotPoint));

// fix up the snapshot point in the open snapshot (if it needs moving).
if (open_snapshot)
{
if (open_snapshot->snapshot_point == &data_set->snapshots[last_snapshot_index])
{
open_snapshot->snapshot_point = &data_set->snapshots[snapshot_index];
}
}

data_set->snapshot_count--;
}

// remove a snapshot from the data set.
RmtErrorCode RmtDataSetRemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index)
RmtErrorCode RmtDataSetRemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index, RmtDataSnapshot* open_snapshot)
{
RMT_RETURN_ON_ERROR(data_set, kRmtErrorInvalidPointer);
RMT_RETURN_ON_ERROR(snapshot_index < data_set->snapshot_count, kRmtErrorIndexOutOfRange);

RmtSnapshotPoint* snapshot_point = &data_set->snapshots[snapshot_index];
RmtDataSnapshotDestroy(snapshot_point->cached_snapshot);

RemoveSnapshot(data_set, snapshot_index);
RemoveSnapshot(data_set, snapshot_index, open_snapshot);

CommitTemporaryFileEdits(data_set, false);

Expand Down Expand Up @@ -2017,7 +2027,7 @@ RmtErrorCode RmtDataSetRenameSnapshot(RmtDataSet* data_set, const int32_t snapsh
}

// remove it also, has the side effect of copying the new thing we just made back to the original location :D
RemoveSnapshot(data_set, snapshot_index);
RemoveSnapshot(data_set, snapshot_index, nullptr);

CommitTemporaryFileEdits(data_set, false);

Expand Down
7 changes: 4 additions & 3 deletions source/backend/rmt_data_set.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//=============================================================================
// Copyright (c) 2019-2021 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2019-2022 Advanced Micro Devices, Inc. All rights reserved.
/// @author AMD Developer Tools Team
/// @file
/// @brief Structures and functions for working with a data set.
Expand Down Expand Up @@ -57,7 +57,7 @@ typedef struct RmtDataSet
{
char file_path[RMT_MAXIMUM_FILE_PATH]; ///< The file path to the file being worked with.
char temporary_file_path[RMT_MAXIMUM_FILE_PATH]; ///< The file path to the safe temporary file being worked with.
void* file_handle; ///< The handle to the RMT file (operates on the temporary).
FILE* file_handle; ///< The handle to the RMT file (operates on the temporary).
size_t file_size_in_bytes; ///< The size of the file pointed to by <c><i>fileHandle</i></c> in bytes.
bool read_only; ///< Whether the dataset is loaded as read-only.
bool sam_enabled; ///< Whether the dataset is SAM (smart access memory) enabled.
Expand Down Expand Up @@ -219,12 +219,13 @@ RmtErrorCode RmtDataSetAddSnapshot(RmtDataSet* data_set, const char* name, uint6
///
/// @param [in] data_set A pointer to a <c><i>RmtDataSet</i></c> structure.
/// @param [in] snapshot_index The index of the snapshot to delete.
/// @param [in] open_snapshot A pointer to the open snapshot (or nullptr if no open snapshot)
///
/// @returns
/// kRmtOk The operation completed successfully.
/// @retval
/// kRmtErrorInvalidPointer The operation failed due to <c><i>data_set</i></c> being set to <c><i>NULL</i></c>.
RmtErrorCode RmtDataSetRemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index);
RmtErrorCode RmtDataSetRemoveSnapshot(RmtDataSet* data_set, const int32_t snapshot_index, RmtDataSnapshot* open_snapshot);

/// Rename an existing snapshot in the file.
///
Expand Down
4 changes: 2 additions & 2 deletions source/backend/rmt_data_snapshot.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//=============================================================================
// Copyright (c) 2019-2021 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2019-2022 Advanced Micro Devices, Inc. All rights reserved.
/// @author AMD Developer Tools Team
/// @file
/// @brief Functions working on a snapshot.
Expand Down Expand Up @@ -104,7 +104,7 @@ RmtErrorCode RmtDataSnapshotDumpJsonToFile(const RmtDataSnapshot* snapshot, cons
static RmtErrorCode ProcessTokensIntoResourceHistory(RmtDataSet* data_set, const RmtResource* resource, RmtResourceHistory* out_resource_history)
{
// Reset the RMT stream parsers ready to load the data.
RmtStreamMergerReset(&data_set->stream_merger);
RmtStreamMergerReset(&data_set->stream_merger, data_set->file_handle);

while (!RmtStreamMergerIsEmpty(&data_set->stream_merger))
{
Expand Down
85 changes: 47 additions & 38 deletions source/frontend/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -426,44 +426,53 @@ IF(UNIX AND NOT APPLE)
set(QT_ICONENGINES_DST "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/iconengines")

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "copying QT libs from ${QT_LIB_SRC} to ${QT_LIB_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/iconengines
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/imageformats
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Core.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Gui.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Svg.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Widgets.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5XcbQpa.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5DBus.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicudata.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicui18n.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicuuc.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-icccm.so.4 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-image.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-keysyms.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-randr.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-render.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-render-util.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-shape.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-shm.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-sync.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-util.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xfixes.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xinerama.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xkb.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying QT platform plugins from ${QT_PLATFORM_SRC} to ${QT_PLATFORM_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_PLATFORM_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_PLATFORM_SRC}/libqxcb.so ${QT_PLATFORM_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying QT imageformat plugins from ${QT_IMAGEFORMATS_SRC} to ${QT_IMAGEFORMATS_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_IMAGEFORMATS_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_IMAGEFORMATS_SRC}/libqsvg.so ${QT_IMAGEFORMATS_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying QT iconengine plugins from ${QT_ICONENGINES_SRC} to ${QT_ICONENGINES_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_ICONENGINES_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_ICONENGINES_SRC}/libqsvgicon.so ${QT_ICONENGINES_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying qt.conf to $<TARGET_FILE_DIR:${PROJECT_NAME}>"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../build/qt.conf $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E echo "copying QT libs from ${QT_LIB_SRC} to ${QT_LIB_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/iconengines
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/imageformats
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Core.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Gui.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Svg.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5Widgets.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5XcbQpa.so.5 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libQt5DBus.so.5 ${QT_LIB_DST}
)

# Copy Additional Qt 5.15.2 library files if needed.
IF(NOT DISABLE_EXTRA_QT_LIB_DEPLOY)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicudata.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicui18n.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libicuuc.so.50 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-icccm.so.4 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-image.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-keysyms.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-randr.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-render.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-render-util.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-shape.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-shm.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-sync.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-util.so.1 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xfixes.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xinerama.so.0 ${QT_LIB_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_SRC}/libxcb-xkb.so.1 ${QT_LIB_DST}
)
ENDIF(NOT DISABLE_EXTRA_QT_LIB_DEPLOY)

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "copying QT platform plugins from ${QT_PLATFORM_SRC} to ${QT_PLATFORM_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_PLATFORM_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_PLATFORM_SRC}/libqxcb.so ${QT_PLATFORM_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying QT imageformat plugins from ${QT_IMAGEFORMATS_SRC} to ${QT_IMAGEFORMATS_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_IMAGEFORMATS_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_IMAGEFORMATS_SRC}/libqsvg.so ${QT_IMAGEFORMATS_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying QT iconengine plugins from ${QT_ICONENGINES_SRC} to ${QT_ICONENGINES_DST}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${QT_ICONENGINES_DST}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_ICONENGINES_SRC}/libqsvgicon.so ${QT_ICONENGINES_DST}
COMMAND ${CMAKE_COMMAND} -E echo "copying qt.conf to $<TARGET_FILE_DIR:${PROJECT_NAME}>"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../../build/qt.conf $<TARGET_FILE_DIR:${PROJECT_NAME}>
)
# Call chrpath on system to override executable file RPATH.
find_program(CHRPATH_EXECUTABLE NAMES chrpath)
Expand Down
6 changes: 3 additions & 3 deletions source/frontend/managers/trace_manager.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//==============================================================================
// Copyright (c) 2018-2021 Advanced Micro Devices, Inc. All rights reserved.
// Copyright (c) 2018-2022 Advanced Micro Devices, Inc. All rights reserved.
/// @author AMD Developer Tools Team
/// @file
/// @brief Implementation of the Trace Manager.
Expand Down Expand Up @@ -96,7 +96,7 @@ namespace rmv
RmtErrorCode error_code = RmtDataSetInitialize(trace_file_name, &data_set_);
if (error_code != kRmtOk)
{
memset(&data_set_, 0, sizeof(RmtDataSet));
data_set_ = {};
return kTraceLoadReturnFail;
}

Expand Down Expand Up @@ -131,7 +131,7 @@ namespace rmv

rmv::SnapshotManager::Get().ClearOpenSnapshot();
rmv::SnapshotManager::Get().ClearCompareSnapshots();
memset(&data_set_, 0, sizeof(RmtDataSet));
data_set_ = {};

active_trace_path_.clear();
}
Expand Down
3 changes: 2 additions & 1 deletion source/frontend/models/timeline/timeline_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,8 @@ namespace rmv
RmtSnapshotPoint* current_snapshot_point = &data_set->snapshots[current_snapshot_point_index];
if (current_snapshot_point == snapshot_point)
{
RmtDataSetRemoveSnapshot(data_set, current_snapshot_point_index);
RmtDataSnapshot* open_snapshot = SnapshotManager::Get().GetOpenSnapshot();
RmtDataSetRemoveSnapshot(data_set, current_snapshot_point_index, open_snapshot);
}
}

Expand Down
5 changes: 5 additions & 0 deletions source/frontend/util/rmv_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,11 @@ QColor rmv_util::GetDeltaChangeColor(DeltaChange delta)

void rmv_util::BuildResourceSizeThresholds(std::vector<uint64_t>& resource_sizes, uint64_t* resource_thresholds)
{
if (resource_sizes.size() == 0)
{
return;
}

std::stable_sort(resource_sizes.begin(), resource_sizes.end());

float step_size = (resource_sizes.size() - 1) / static_cast<float>(rmv::kSizeSliderRange);
Expand Down
4 changes: 2 additions & 2 deletions source/frontend/util/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

#define RMV_MAJOR_VERSION 1 ///< major version number.
#define RMV_MINOR_VERSION 4 ///< minor version number.
#define RMV_BUGFIX_NUMBER 0 ///< bugfix number.
#define RMV_BUGFIX_NUMBER 1 ///< bugfix number.
#define RMV_BUILD_NUMBER 0 ///< build number.
#define RMV_BUILD_DATE_STRING "04/21/2022" ///< build date string.
#define RMV_BUILD_DATE_STRING "06/13/2022" ///< build date string.
#define RMV_BUILD_CURRENT_YEAR 2022 ///< The current year.

#define RMV_COPYRIGHT_STRING "Copyright (C) 2018-" STRINGIFY_VALUE(RMV_BUILD_CURRENT_YEAR) " Advanced Micro Devices, Inc. All rights reserved."
Expand Down
Loading

0 comments on commit f7750e6

Please sign in to comment.