From eebf5ead8c386d08b4b6ca1d64412b817de25574 Mon Sep 17 00:00:00 2001 From: Jason Bonnell <166553723+jbonnell-amd@users.noreply.github.com> Date: Fri, 19 Sep 2025 08:42:40 -0400 Subject: [PATCH] Replace cmake-format with gersemi in rocprofiler-compute-formatting.yml (#1053) * Replace cmake-format with gersemi in rocprofiler-compute-formatting.yml * Run gersemi formatting on CMakeLists.txt files * Remove .cmake-format.yaml, add .gersemirc file * Add more options to .gersemirc * Add new line to .gersemirc * Add new line to CMakeLists.txt * Run gersemi again with new options --- .../rocprofiler-compute-formatting.yml | 10 +- .../rocprofiler-compute/.cmake-format.yaml | 65 ---- projects/rocprofiler-compute/.gersemirc | 7 + projects/rocprofiler-compute/CMakeLists.txt | 310 +++++++++++------- .../rocprofiler-compute/tests/CMakeLists.txt | 31 +- 5 files changed, 225 insertions(+), 198 deletions(-) delete mode 100644 projects/rocprofiler-compute/.cmake-format.yaml create mode 100644 projects/rocprofiler-compute/.gersemirc diff --git a/.github/workflows/rocprofiler-compute-formatting.yml b/.github/workflows/rocprofiler-compute-formatting.yml index 9c986ee4a4..6042a177c6 100644 --- a/.github/workflows/rocprofiler-compute-formatting.yml +++ b/.github/workflows/rocprofiler-compute-formatting.yml @@ -1,4 +1,3 @@ - name: rocprofiler-compute Formatting on: @@ -9,6 +8,7 @@ on: - 'projects/rocprofiler-compute/**' pull_request: paths: + - '.github/workflows/rocprofiler-compute-formatting.yml' - 'projects/rocprofiler-compute/**' concurrency: @@ -65,14 +65,14 @@ jobs: run: | sudo apt-get update sudo apt-get install -y python3-pip - python3 -m pip install cmake-format - - name: cmake-format + python3 -m pip install gersemi + - name: gersemi working-directory: projects/rocprofiler-compute run: | set +e - cmake-format -i $(find . -type f | egrep 'CMakeLists.txt|\.cmake$') + gersemi -i $(find . -type f | egrep 'CMakeLists.txt|\.cmake$') if [ $(git diff | wc -l) -gt 0 ]; then - echo -e "\nError! CMake code not formatted. Run cmake-format...\n" + echo -e "\nError! CMake code not formatted. Run gersemi...\n" echo -e "\nFiles:\n" git diff --name-only echo -e "\nFull diff:\n" diff --git a/projects/rocprofiler-compute/.cmake-format.yaml b/projects/rocprofiler-compute/.cmake-format.yaml deleted file mode 100644 index 2e00dc211f..0000000000 --- a/projects/rocprofiler-compute/.cmake-format.yaml +++ /dev/null @@ -1,65 +0,0 @@ -parse: - additional_commands: {} - override_spec: {} - vartags: [] - proptags: [] -format: - disable: false - line_width: 90 - tab_size: 4 - use_tabchars: false - fractional_tab_policy: use-space - max_subgroups_hwrap: 2 - max_pargs_hwrap: 6 - max_rows_cmdline: 2 - separate_ctrl_name_with_space: false - separate_fn_name_with_space: false - dangle_parens: false - dangle_align: child - min_prefix_chars: 4 - max_prefix_chars: 10 - max_lines_hwrap: 2 - line_ending: unix - command_case: lower - keyword_case: upper - always_wrap: [] - enable_sort: true - autosort: false - require_valid_layout: false - layout_passes: {} -markup: - bullet_char: '-' - enum_char: '*' - first_comment_is_literal: true - literal_comment_pattern: ^# - fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$ - ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$ - explicit_trailing_pattern: '#<' - hashruler_min_length: 10 - canonicalize_hashrulers: true - enable_markup: true -lint: - disabled_codes: [] - function_pattern: '[0-9a-z_]+' - macro_pattern: '[0-9A-Z_]+' - global_var_pattern: '[A-Z][0-9A-Z_]+' - internal_var_pattern: _[A-Z][0-9A-Z_]+ - local_var_pattern: '[a-z][a-z0-9_]+' - private_var_pattern: _[0-9a-z_]+ - public_var_pattern: '[A-Z][0-9A-Z_]+' - argument_var_pattern: '[a-z][a-z0-9_]+' - keyword_pattern: '[A-Z][0-9A-Z_]+' - max_conditionals_custom_parser: 2 - min_statement_spacing: 1 - max_statement_spacing: 2 - max_returns: 6 - max_branches: 12 - max_arguments: 5 - max_localvars: 15 - max_statements: 50 -encode: - emit_byteorder_mark: false - input_encoding: utf-8 - output_encoding: utf-8 -misc: - per_command: {} diff --git a/projects/rocprofiler-compute/.gersemirc b/projects/rocprofiler-compute/.gersemirc new file mode 100644 index 0000000000..9d480be28d --- /dev/null +++ b/projects/rocprofiler-compute/.gersemirc @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/BlankSpruce/gersemi/0.19.3/gersemi/configuration.schema.json + +warn_about_unknown_commands: false +indent: 4 +line_length: 90 +disable_formatting: false +list_expansion: favour-inlining diff --git a/projects/rocprofiler-compute/CMakeLists.txt b/projects/rocprofiler-compute/CMakeLists.txt index 0afd829102..ba52f44495 100644 --- a/projects/rocprofiler-compute/CMakeLists.txt +++ b/projects/rocprofiler-compute/CMakeLists.txt @@ -1,7 +1,9 @@ cmake_minimum_required(VERSION 3.19 FATAL_ERROR) -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND CMAKE_CURRENT_SOURCE_DIR STREQUAL - CMAKE_SOURCE_DIR) +if( + CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR + AND CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR +) set(MSG "") message(STATUS "Warning! Building from the source directory is not recommended") message(STATUS "If unintended, please remove 'CMakeCache.txt' and 'CMakeFiles'") @@ -17,8 +19,13 @@ message(STATUS "Hostname: ${LOCALHOST}") file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" FULL_VERSION_STRING LIMIT_COUNT 1) string(REGEX REPLACE "(\n|\r)" "" FULL_VERSION_STRING "${FULL_VERSION_STRING}") set(ROCPROFCOMPUTE_FULL_VERSION "${FULL_VERSION_STRING}") -string(REGEX REPLACE "([0-9]+)\.([0-9]+)\.([0-9]+)(.*)" "\\1.\\2.\\3" - ROCPROFCOMPUTE_VERSION "${FULL_VERSION_STRING}") +string( + REGEX REPLACE + "([0-9]+)\.([0-9]+)\.([0-9]+)(.*)" + "\\1.\\2.\\3" + ROCPROFCOMPUTE_VERSION + "${FULL_VERSION_STRING}" +) # string(REGEX REPLACE "(${ROCPROFCOMPUTE_VERSION})(.*)" "\\2" # ROCPROFCOMPUTE_VERSION_TWEAK @@ -32,7 +39,8 @@ project( LANGUAGES C DESCRIPTION "A kernel-level profiling tool for machine learning/HPC workloads running on AMD MI GPUs" - HOMEPAGE_URL "https://github.com/ROCm/rocprofiler-compute") + HOMEPAGE_URL "https://github.com/ROCm/rocprofiler-compute" +) set(PACKAGE_NAME "rocprofiler-compute") set(PACKAGE_NAME_UNDERSCORE "rocprofiler_compute") @@ -45,16 +53,18 @@ include(GNUInstallDirs) execute_process( COMMAND git log --pretty=format:%h -n 1 OUTPUT_VARIABLE ROCPROFCOMPUTE_GIT_REV - OUTPUT_STRIP_TRAILING_WHITESPACE) + OUTPUT_STRIP_TRAILING_WHITESPACE +) message(STATUS "Git revision: ${ROCPROFCOMPUTE_GIT_REV}") -configure_file(${PROJECT_SOURCE_DIR}/cmake/VERSION.sha.in - ${PROJECT_SOURCE_DIR}/VERSION.sha @ONLY) +configure_file( + ${PROJECT_SOURCE_DIR}/cmake/VERSION.sha.in + ${PROJECT_SOURCE_DIR}/VERSION.sha + @ONLY +) set(CMAKE_BUILD_TYPE "Release") if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX - "/opt/rocm" - CACHE PATH "default install path" FORCE) + set(CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE PATH "default install path" FORCE) endif() message(STATUS "Installation path: ${CMAKE_INSTALL_PREFIX}") @@ -62,10 +72,7 @@ option(CHECK_PYTHON_DEPS "Verify necessary python dependencies" ON) if(CHECK_PYTHON_DEPS) # Python 3 is required message(STATUS "Detecting Python interpreter...") - find_package( - Python3 3.8 - COMPONENTS Interpreter - REQUIRED) + find_package(Python3 3.8 COMPONENTS Interpreter REQUIRED) # Allow user-provided python search path if(DEFINED PYTHON_DEPS) @@ -95,8 +102,10 @@ if(CHECK_PYTHON_DEPS) endif() execute_process( COMMAND ${Python3_EXECUTABLE} -c "import ${PACKAGE}" - OUTPUT_QUIET ERROR_QUIET - RESULT_VARIABLE EXIT_CODE) + OUTPUT_QUIET + ERROR_QUIET + RESULT_VARIABLE EXIT_CODE + ) if(${EXIT_CODE} EQUAL 0) message(STATUS "${ARGV0} = yes") else() @@ -120,15 +129,16 @@ if(CHECK_PYTHON_DEPS) else() message( FATAL_ERROR - "\nNecessary Python package dependencies not found. Please install required dependencies " - "above using your favorite package manager. If using pip, consider running:\n" - "python3 -m pip install -r requirements.txt\n" - "at the top-level of this repository. If preparing a shared installation for " - "multiple users, consider adding the -t option to install necessary dependencies " - "into a shared directory, e.g.\n" - "python3 -m pip install -t -r requirements.txt\n" - "Note that the -DPYTHON_DEPS= can be used to provide an " - "additional search path to cmake for python packages.") + "\nNecessary Python package dependencies not found. Please install required dependencies " + "above using your favorite package manager. If using pip, consider running:\n" + "python3 -m pip install -r requirements.txt\n" + "at the top-level of this repository. If preparing a shared installation for " + "multiple users, consider adding the -t option to install necessary dependencies " + "into a shared directory, e.g.\n" + "python3 -m pip install -t -r requirements.txt\n" + "Note that the -DPYTHON_DEPS= can be used to provide an " + "additional search path to cmake for python packages." + ) endif() endif() @@ -138,23 +148,29 @@ endif() set(MOD_INSTALL_PATH "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/modulefiles/${PROJECT_NAME}" - CACHE STRING "Install path for modulefile") + CACHE STRING + "Install path for modulefile" +) message(STATUS "Modulefile install path: ${MOD_INSTALL_PATH}") set(moduleFileTemplate "rocprofcompute.lua.in") configure_file( ${PROJECT_SOURCE_DIR}/cmake/${moduleFileTemplate} - ${PROJECT_BINARY_DIR}/${MOD_INSTALL_PATH}/${ROCPROFCOMPUTE_FULL_VERSION}.lua @ONLY) + ${PROJECT_BINARY_DIR}/${MOD_INSTALL_PATH}/${ROCPROFCOMPUTE_FULL_VERSION}.lua + @ONLY +) # Thera mods if(LOCALHOST MATCHES "TheraS01|.*\.thera\.amd\.com|thera-hn") list(APPEND CMAKE_MESSAGE_INDENT " ") message(STATUS "Using thera-specific modulefile modification") file(READ ${PROJECT_SOURCE_DIR}/cmake/modfile.thera.mod mod_additions) - file(APPEND - ${PROJECT_BINARY_DIR}/${MOD_INSTALL_PATH}/${ROCPROFCOMPUTE_FULL_VERSION}.lua - ${mod_additions}) + file( + APPEND + ${PROJECT_BINARY_DIR}/${MOD_INSTALL_PATH}/${ROCPROFCOMPUTE_FULL_VERSION}.lua + ${mod_additions} + ) list(POP_BACK CMAKE_MESSAGE_INDENT) endif() @@ -165,7 +181,6 @@ set(CMAKE_HIP_FLAGS_RELEASE "-O2") if(${ENABLE_TESTS}) enable_language("C" "HIP") add_subdirectory(tests) - endif() message(STATUS "Enable tests compilation: ${ENABLE_TESTS}") @@ -175,25 +190,38 @@ include(CTest) option(ENABLE_COVERAGE "Enable code coverage" OFF) set(COV_OPTION "") if(${ENABLE_COVERAGE}) - set(COV_OPTION "--cov=src" "--cov-append" "--cov-report=term-missing" - "--cov-report=lcov:tests/coverage.info") + set(COV_OPTION + "--cov=src" + "--cov-append" + "--cov-report=term-missing" + "--cov-report=lcov:tests/coverage.info" + ) set(CTEST_COVERAGE_COMMAND "python3") - set(CTEST_COVERAGE_EXTRA_FLAGS "-m" "coverage" "xml" "-o" - "${CMAKE_BINARY_DIR}/coverage.xml") + set(CTEST_COVERAGE_EXTRA_FLAGS + "-m" + "coverage" + "xml" + "-o" + "${CMAKE_BINARY_DIR}/coverage.xml" + ) endif() message(STATUS "Code coverage: ${ENABLE_COVERAGE}") # CPU threads available for testing set(PYTEST_NUMPROCS "1" - CACHE STRING "Number of parallel threads to use with CPU-oriented tests") + CACHE STRING + "Number of parallel threads to use with CPU-oriented tests" +) message(STATUS "Pytest CPU threadcount: ${PYTEST_NUMPROCS}") # 2 CPU threads available for testing(test-analyze-commands) set(PYTEST_NUMPROCS_ANALYSIS "4" - CACHE STRING "Number of parallel threads to use with CPU-oriented tests") + CACHE STRING + "Number of parallel threads to use with CPU-oriented tests" +) message(STATUS "Pytest CPU threadcount: ${PYTEST_NUMPROCS_ANALYSIS}") # --------------------------- @@ -206,7 +234,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m kernel_execution --junitxml=tests/test_profile_kernel_execution.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_dispatch @@ -214,37 +243,48 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m dispatch --junitxml=tests/test_profile_dispatch.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_mem - COMMAND ${Python3_EXECUTABLE} -m pytest -m mem --junitxml=tests/test_profile_mem.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest -m mem --junitxml=tests/test_profile_mem.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_join - COMMAND ${Python3_EXECUTABLE} -m pytest -m join --junitxml=tests/test_profile_join.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest -m join --junitxml=tests/test_profile_join.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_sort - COMMAND ${Python3_EXECUTABLE} -m pytest -m sort --junitxml=tests/test_profile_sort.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest -m sort --junitxml=tests/test_profile_sort.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_misc - COMMAND ${Python3_EXECUTABLE} -m pytest -m misc --junitxml=tests/test_profile_misc.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest -m misc --junitxml=tests/test_profile_misc.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_path - COMMAND ${Python3_EXECUTABLE} -m pytest -m path --junitxml=tests/test_profile_path.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest -m path --junitxml=tests/test_profile_path.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_roofline @@ -252,7 +292,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m roofline --junitxml=tests/test_profile_roofline.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_section @@ -260,7 +301,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m section --junitxml=tests/test_profile_section.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_pc_sampling @@ -268,7 +310,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -s -m pc_sampling --junitxml=tests/test_profile_pc_sampling.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_profile_sets_func @@ -276,7 +319,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m sets_func --junitxml=tests/test_profile_sets_func.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_profile_general.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) set_tests_properties( test_profile_kernel_execution @@ -287,7 +331,8 @@ set_tests_properties( test_profile_misc test_profile_path test_profile_roofline - PROPERTIES LABELS "profile" RESOURCE_GROUPS gpus:1) + PROPERTIES LABELS "profile" RESOURCE_GROUPS gpus:1 +) # --------------------------- # analysis command tests @@ -299,7 +344,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -n ${PYTEST_NUMPROCS_ANALYSIS} --verbose --junitxml=tests/test_analyze_commands.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_analyze_commands.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # --------------------------- # analyze workloads tests @@ -311,7 +357,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -n ${PYTEST_NUMPROCS} --junitxml=tests/test_analyze_workloads.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_analyze_workloads.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # --------------------------- # TCP counter tests @@ -323,7 +370,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m L1_cache --junitxml=tests/test_L1_cache_counters.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_TCP_counters.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # --------------------------- # Spec tests @@ -335,7 +383,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m num_xcds_spec_class --junitxml=tests/test_num_xcds_spec_class.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_gpu_specs.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) add_test( NAME test_num_xcds_cli_output @@ -343,7 +392,8 @@ add_test( ${Python3_EXECUTABLE} -m pytest -m num_xcds_cli_output --junitxml=tests/test_num_xcds_cli_output.xml ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_gpu_specs.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # --------------------------- # DB Connector tests @@ -351,9 +401,11 @@ add_test( add_test( NAME test_db_connector - COMMAND ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_db_connector.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_db_connector.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_db_connector.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_db_connector.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # --------------------------- # Utils tests @@ -361,9 +413,11 @@ add_test( add_test( NAME test_utils - COMMAND ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_utils.xml ${COV_OPTION} - ${PROJECT_SOURCE_DIR}/tests/test_utils.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_utils.xml ${COV_OPTION} + ${PROJECT_SOURCE_DIR}/tests/test_utils.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # ----------------------------------- # Autogenerated configuration tests @@ -371,9 +425,11 @@ add_test( add_test( NAME test_autogen_config - COMMAND ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_autogen_config.xml - ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_autogen_config.py - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + COMMAND + ${Python3_EXECUTABLE} -m pytest --junitxml=tests/test_autogen_config.xml + ${COV_OPTION} ${PROJECT_SOURCE_DIR}/tests/test_autogen_config.py + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) # ----------------------------------- # Generate coverage tests @@ -398,19 +454,24 @@ if(${ENABLE_COVERAGE}) test_num_xcds_cli_output test_db_connector test_utils - test_autogen_config) + test_autogen_config + ) string(REPLACE ";" ";" ALL_TESTS_STRING "${ALL_TEST_NAMES}") add_test( NAME generate_coverage_report COMMAND ${Python3_EXECUTABLE} -m coverage xml -o ${CMAKE_BINARY_DIR}/coverage.xml - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) set_tests_properties( generate_coverage_report - PROPERTIES DEPENDS "${ALL_TESTS_STRING}" LABELS "coverage" ENVIRONMENT - "COVERAGE_FILE=${PROJECT_SOURCE_DIR}/.coverage") + PROPERTIES + DEPENDS "${ALL_TESTS_STRING}" + LABELS "coverage" + ENVIRONMENT "COVERAGE_FILE=${PROJECT_SOURCE_DIR}/.coverage" + ) endif() # --------- @@ -421,61 +482,72 @@ endif() install( PROGRAMS src/${EXECUTABLE_NAME} DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} - COMPONENT main) + COMPONENT main +) # python dependency requirements install( FILES requirements.txt DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} - COMPONENT main) + COMPONENT main +) # support files and version info install( - FILES src/argparser.py src/config.py src/rocprof_compute_base.py src/roofline.py - VERSION VERSION.sha + FILES + src/argparser.py + src/config.py + src/rocprof_compute_base.py + src/roofline.py + VERSION + VERSION.sha DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} - COMPONENT main) + COMPONENT main +) # src/rocprof_compute_analyze install( DIRECTORY src/rocprof_compute_analyze DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} COMPONENT main PATTERN src/rocprof_compute_analyze/tests EXCLUDE - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE +) # src/utils install( DIRECTORY src/utils DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} COMPONENT main PATTERN "rooflines*" EXCLUDE - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE +) # src/utils/rooflines file(GLOB rooflinebins src/utils/rooflines/roofline-*) -install( - PROGRAMS ${rooflinebins} - DESTINATION ${CMAKE_INSTALL_BINDIR} - COMPONENT main) +install(PROGRAMS ${rooflinebins} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT main) # src/rocprof_compute_soc install( DIRECTORY src/rocprof_compute_soc DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} COMPONENT main - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE +) # src/rocprof_compute_profile install( DIRECTORY src/rocprof_compute_profile DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} COMPONENT main - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE +) # src/rocprof_compute_tui install( DIRECTORY src/rocprof_compute_tui DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} COMPONENT main - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE +) # grafana assets install( DIRECTORY grafana DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME} - COMPONENT main) + COMPONENT main +) # samples install( DIRECTORY sample @@ -485,21 +557,25 @@ install( PATTERN "*.hip" PATTERN "*.h" PATTERN "*.cpp" - PATTERN "workloads" EXCLUDE) + PATTERN "workloads" EXCLUDE +) # modulefile install( FILES ${PROJECT_BINARY_DIR}/${MOD_INSTALL_PATH}/${ROCPROFCOMPUTE_FULL_VERSION}.lua DESTINATION ${MOD_INSTALL_PATH} - COMPONENT main) + COMPONENT main +) # top-level symlink for bin/rocprof-compute install( - CODE "execute_process( + CODE + "execute_process( COMMAND bash -c \"set -e cd \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX} ln -sf ../${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME}/${EXECUTABLE_NAME} ${CMAKE_INSTALL_BINDIR}/${EXECUTABLE_NAME} \")" - COMPONENT main) + COMPONENT main +) # License header update(s) add_custom_target( @@ -511,7 +587,7 @@ add_custom_target( ${PROJECT_SOURCE_DIR}/utils/update_license.py --source ${PROJECT_SOURCE_DIR} --license ${PROJECT_SOURCE_DIR}/LICENSE.md --file "src/${PACKAGE_NAME},cmake/Dockerfile,cmake/rocm_install.sh,docker/docker-entrypoint.sh,src/rocprof_compute_analyze/convertor/mongodb/convert" - ) +) # Standalone binary creation add_custom_target( @@ -543,12 +619,14 @@ add_custom_target( # Remove library rpath from executable COMMAND patchelf --remove-rpath rocprof-compute.bin # Move to build directory - COMMAND mv rocprof-compute.bin ${CMAKE_BINARY_DIR}) + COMMAND mv rocprof-compute.bin ${CMAKE_BINARY_DIR} +) install( FILES ${PROJECT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DOCDIR} - COMPONENT main) + COMPONENT main +) # TEST collateral option(INSTALL_TESTS "Build test suite" OFF) @@ -559,15 +637,18 @@ if(INSTALL_TESTS) COMPONENT tests FILES_MATCHING PATTERN "*.py" - PATTERN "__pycache__" EXCLUDE) + PATTERN "__pycache__" EXCLUDE + ) install( FILES requirements-test.txt DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} - COMPONENT tests) + COMPONENT tests + ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/CTestTestfile.cmake COMPONENT tests - DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} + ) endif() message(STATUS "Install tests: ${INSTALL_TESTS}") @@ -576,18 +657,16 @@ message(STATUS "Install tests: ${INSTALL_TESTS}") # ---------- message(STATUS "Packaging config...") -set(CPACK_GENERATOR - "DEB" "RPM" - CACHE STRING "") -set(CPACK_PACKAGE_NAME - "${PROJECT_NAME}" - CACHE STRING "") +set(CPACK_GENERATOR "DEB" "RPM" CACHE STRING "") +set(CPACK_PACKAGE_NAME "${PROJECT_NAME}" CACHE STRING "") set(CPACK_PACKAGE_CONTACT "https://github.com/ROCm/rocprofiler-compute") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY - "ROCm Compute Profiler: tool for GPU performance profiling") + "ROCm Compute Profiler: tool for GPU performance profiling" +) set(CPACK_RPM_PACKAGE_DESCRIPTION "ROCm Compute Profiler is a performance analysis tool for profiling -machine learning/HPC workloads running on AMD GPUs.") +machine learning/HPC workloads running on AMD GPUs." +) set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") # Package versioning @@ -596,7 +675,7 @@ set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" - ) +) # RPM package specific variables set(CPACK_RPM_PACKAGE_LICENSE "MIT") @@ -615,9 +694,7 @@ set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") # Dependencies -set(PACKAGE_REQUIRES - "rocprofiler" - CACHE STRING "Package dependencies") +set(PACKAGE_REQUIRES "rocprofiler" CACHE STRING "Package dependencies") set(CPACK_RPM_PACKAGE_REQUIRES ${PACKAGE_REQUIRES}) set(CPACK_DEBIAN_PACKAGE_DEPENDS ${PACKAGE_REQUIRES}) @@ -678,6 +755,7 @@ set(CPACK_SOURCE_IGNORE_FILES \.gitmodules \.gitignore /tests - /build) + /build +) include(CPack) diff --git a/projects/rocprofiler-compute/tests/CMakeLists.txt b/projects/rocprofiler-compute/tests/CMakeLists.txt index a4b3b9d660..1db7d51bd1 100644 --- a/projects/rocprofiler-compute/tests/CMakeLists.txt +++ b/projects/rocprofiler-compute/tests/CMakeLists.txt @@ -1,12 +1,11 @@ -set(CMAKE_HIP_COMPILER - "amdclang++" - CACHE STRING "desired c++ compiler" FORCE) +set(CMAKE_HIP_COMPILER "amdclang++" CACHE STRING "desired c++ compiler" FORCE) if(CMAKE_HIP_COMPILER_ID STREQUAL "Clang") message(STATUS "Using ${CMAKE_HIP_COMPILER} to build for amdgpu backend") else() message( FATAL_ERROR - "'amdclang++' compiler required to compile test binaries for ROCm platform.") + "'amdclang++' compiler required to compile test binaries for ROCm platform." + ) endif() set(VCOPY_SOURCES ../sample/vcopy.cpp) @@ -22,23 +21,31 @@ set_target_properties(vmem PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DI set(VSEQ_SOURCES ../sample/vsequential_access.cpp) set_source_files_properties(${VSEQ_SOURCES} PROPERTIES LANGUAGE HIP) add_executable(vsequential_access ${VSEQ_SOURCES}) -set_target_properties(vsequential_access PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_SOURCE_DIR}/tests) +set_target_properties( + vsequential_access + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tests +) set(VRAND_SOURCES ../sample/vrandom_access.cpp) set_source_files_properties(${VRAND_SOURCES} PROPERTIES LANGUAGE HIP) add_executable(vrandom_access ${VRAND_SOURCES}) -set_target_properties(vrandom_access PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_SOURCE_DIR}/tests) +set_target_properties( + vrandom_access + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tests +) set(OCCUPANCY ../sample/occupancy.hip) set_source_files_properties(${OCCUPANCY} PROPERTIES LANGUAGE HIP) add_executable(occupancy ${OCCUPANCY}) -set_target_properties(occupancy PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_SOURCE_DIR}/tests) +set_target_properties( + occupancy + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tests +) set(MAT_MUL_MAX ../sample/mat_mul_max.hip) set_source_files_properties(${MAT_MUL_MAX} PROPERTIES LANGUAGE HIP) add_executable(mat_mul_max ${MAT_MUL_MAX}) -set_target_properties(mat_mul_max PROPERTIES RUNTIME_OUTPUT_DIRECTORY - ${CMAKE_SOURCE_DIR}/tests) +set_target_properties( + mat_mul_max + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tests +)