Skip to content

Commit b395920

Browse files
authored
Merge pull request #280 from ROCm/develop
Cherry pick: Fix handling of long pathnames with clang tidy (#279)
2 parents bb18c61 + 5f1f73d commit b395920

19 files changed

+154
-58
lines changed

.github/workflows/test.yml

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ jobs:
3737
cmake-version:
3838
- 3.31.0
3939
- 3.22.1
40-
- 3.16.3
40+
- 3.16.3
41+
# There are problems with nmake and ninja with this version of cmake
42+
# on windows
4143
exclude:
42-
- platform: windows-2019
43-
cmake-version: 3.10.2
44+
- platform: windows-2022
45+
cmake-version: 3.16.3
4446

4547
steps:
4648
- uses: actions/checkout@v1
@@ -61,12 +63,22 @@ jobs:
6163
uses: ssciwr/doxygen-install@v1
6264
with:
6365
version: "1.10.0"
64-
- name: Run tests
66+
- name: Setup git
6567
run: |
6668
git config --global user.email "you@example.com"
6769
git config --global user.name "Your Name"
68-
cmake --version
69-
cget build --test
70-
cget build -T doc
71-
cget build -Cy --test -DROCM_CMAKE_GENERATOR=Ninja
72-
cget build -T doc
70+
71+
- name: Cmake version
72+
run: cmake --version
73+
74+
- name: Run tests (default generator)
75+
run: cget build --test
76+
77+
- name: Build docs (default generator)
78+
run: cget build -T doc
79+
80+
- name: Run tests (Ninja generator)
81+
run: cget build -Cy --test -DROCM_CMAKE_GENERATOR=Ninja
82+
83+
- name: Build docs (Ninja generator)
84+
run: cget build -T doc

share/rocmcmakebuildtools/cmake/ROCMClangTidy.cmake

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -192,24 +192,26 @@ function(rocm_clang_tidy_check TARGET)
192192
add_custom_target(tidy-target-${TARGET})
193193
foreach(SOURCE ${SOURCES})
194194
if(NOT "${SOURCE}" MATCHES "(h|hpp|hxx)$")
195-
string(MAKE_C_IDENTIFIER "${SOURCE}" tidy_file)
195+
get_filename_component(SRC_ABS ${SOURCE} ABSOLUTE)
196+
string(FIND ${SRC_ABS} ${CMAKE_CURRENT_BINARY_DIR} BINARY_IDX)
197+
if(BINARY_IDX EQUAL -1)
198+
set(tidy_file_prefix "s")
199+
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
200+
else()
201+
set(tidy_file_prefix "b")
202+
set(ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR})
203+
endif()
204+
get_filename_component(SRC_PATH ${SRC_ABS} DIRECTORY)
205+
file(RELATIVE_PATH REL_PATH ${ROOT_DIR} ${SRC_PATH})
206+
get_filename_component(BASE_SOURCE_NAME ${SOURCE} NAME_WE)
207+
if(REL_PATH)
208+
set(BASE_SOURCE ${REL_PATH}/${BASE_SOURCE_NAME})
209+
else()
210+
set(BASE_SOURCE ${BASE_SOURCE_NAME})
211+
endif()
212+
string(MAKE_C_IDENTIFIER "${tidy_file_prefix}/${BASE_SOURCE}" tidy_file)
196213
set(tidy_target tidy-target-${TARGET}-${tidy_file})
197214
if(CLANG_TIDY_CACHE_SIZE GREATER 0)
198-
get_filename_component(SRC_ABS ${SOURCE} ABSOLUTE)
199-
string(FIND ${SRC_ABS} ${CMAKE_CURRENT_BINARY_DIR} BINARY_IDX)
200-
if(BINARY_IDX EQUAL -1)
201-
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
202-
else()
203-
set(ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR})
204-
endif()
205-
get_filename_component(SRC_PATH ${SRC_ABS} DIRECTORY)
206-
file(RELATIVE_PATH REL_PATH ${ROOT_DIR} ${SRC_PATH})
207-
get_filename_component(BASE_SOURCE_NAME ${SOURCE} NAME_WE)
208-
if(REL_PATH)
209-
set(BASE_SOURCE ${REL_PATH}/${BASE_SOURCE_NAME})
210-
else()
211-
set(BASE_SOURCE ${BASE_SOURCE_NAME})
212-
endif()
213215
file(
214216
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${tidy_target}.cmake
215217
"
@@ -236,7 +238,9 @@ function(rocm_clang_tidy_check TARGET)
236238
endif()
237239
return()
238240
endif()
239-
string(REPLACE \"Preprocessing CXX source to \" \"\" PP_FILE \"\${PP_OUT}\")
241+
# Filter out the message so it can handle verbose output
242+
string(REGEX MATCH \"Preprocessing CXX source to [^\\n]*\\\\.i\\n\" PP_SELECT_OUT \"\${PP_OUT}\")
243+
string(REPLACE \"Preprocessing CXX source to \" \"\" PP_FILE \"\${PP_SELECT_OUT}\")
240244
string(STRIP \"\${PP_FILE}\" PP_FILE)
241245
file(MD5 ${CMAKE_CURRENT_BINARY_DIR}/\${PP_FILE} PP_HASH)
242246
execute_process(

share/rocmcmakebuildtools/cmake/ROCMCppCheck.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ macro(rocm_enable_cppcheck)
118118
# cmake-lint: disable=C0301
119119
set(CPPCHECK_TEMPLATE_ARG
120120
"--template=::warning file={file},line={line},col={column}::{severity}: {inconclusive:inconclusive: }{message} [{id}]"
121-
"--template-location={file}:{line}:{column}: note: {info}\\\n{code}")
121+
"--template-location={file}:{line}:{column}: note: {info}\\n{code}")
122122
endif()
123123

124124
set(CPPCHECK_COMMAND

share/rocmcmakebuildtools/cmake/ROCMCreatePackage.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,18 @@ macro(rocm_create_package)
432432
# Lintian Warning Fix: Enable post/pre scripts only if non empty
433433
rocm_check_and_configure_script_files("${PROJECT_BINARY_DIR}/debian/prerm" "${PROJECT_BINARY_DIR}/debian/postinst")
434434

435+
# Create a CPack project config file for generator-specific settings
436+
set(_cpack_project_config "${PROJECT_BINARY_DIR}/CPackProjectConfig.cmake")
437+
file(WRITE "${_cpack_project_config}" "
438+
# Generator-specific configuration for consistent archive paths
439+
if(CPACK_GENERATOR MATCHES \"TGZ|ZIP\")
440+
# Use relative paths for archive generators (consistent across platforms)
441+
set(CPACK_SET_DESTDIR OFF)
442+
set(CPACK_PACKAGING_INSTALL_PREFIX \"/\")
443+
endif()
444+
")
445+
set(CPACK_PROJECT_CONFIG_FILE "${_cpack_project_config}")
446+
435447
include(CPack)
436448
set(ROCM_PACKAGE_CREATED TRUE CACHE INTERNAL "Track whether rocm_create_package has been called.")
437449
endmacro()

share/rocmcmakebuildtools/cmake/ROCMInstallTargets.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ function(rocm_export_targets)
341341
set(CONFIG_NAME ${PACKAGE_NAME_LOWER}-config)
342342
set(TARGET_VERSION ${PROJECT_VERSION})
343343

344-
if(PARSE_PREFIX)
344+
if(PARSE_PREFIX AND NOT WIN32)
345345
set(PREFIX_DIR ${PARSE_PREFIX})
346346
set(PREFIX_ARG PREFIX ${PREFIX_DIR})
347347
set(BIN_INSTALL_DIR ${PREFIX_DIR}/${CMAKE_INSTALL_BINDIR})

share/rocmcmakebuildtools/cmake/ROCMTest.cmake

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -j ${
1919
add_custom_target(tests COMMENT "Build all tests.")
2020
add_dependencies(check tests)
2121

22-
add_custom_target(install-tests COMMAND ${CMAKE_COMMAND} -DCOMPONENT=tests -P ${CMAKE_BINARY_DIR}/cmake_install.cmake)
22+
add_custom_target(install-tests COMMAND ${CMAKE_COMMAND} -DCOMPONENT=tests -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
23+
${CMAKE_BINARY_DIR}/cmake_install.cmake)
2324
add_dependencies(install-tests tests)
2425

2526
rocm_define_property(TARGET "ROCM_TEST_INSTALLDIR" "Install dir for tests")
2627
macro(rocm_enable_test_package NAME)
2728
message(STATUS "Enable test package ${NAME}")
28-
set_target_properties(tests PROPERTIES ROCM_TEST_INSTALLDIR ${CMAKE_INSTALL_PREFIX}/libexec/installed-tests/${NAME})
29+
set_target_properties(tests PROPERTIES ROCM_TEST_INSTALLDIR ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/${NAME})
2930
rocm_package_setup_component(tests DEPENDS COMPONENT runtime)
3031
rocm_defer(rocm_test_install_ctest)
3132
endmacro()
@@ -89,9 +90,9 @@ function(rocm_save_test)
8990
set(COMMAND "")
9091
foreach(ARG ${PARSE_COMMAND})
9192
if(TARGET ${ARG})
92-
set(INSTALL_PREFIX "$<${_rocm_test_genex_eval}:$<TARGET_PROPERTY:${ARG},ROCM_INSTALL_DIR>>")
93-
string(APPEND COMMAND
94-
" \"${INSTALL_PREFIX}/$<TARGET_FILE_NAME:${ARG}>\"")
93+
set(INSTALL_PREFIX
94+
"${CMAKE_INSTALL_PREFIX}/$<${_rocm_test_genex_eval}:$<TARGET_PROPERTY:${ARG},ROCM_INSTALL_DIR>>")
95+
string(APPEND COMMAND " \"${INSTALL_PREFIX}/$<TARGET_FILE_NAME:${ARG}>\"")
9596
else()
9697
string(APPEND COMMAND " \"${ARG}\"")
9798
endif()
@@ -159,7 +160,11 @@ function(rocm_add_test)
159160
set(COMMAND_ARGS ${COMMAND})
160161
list(REMOVE_AT COMMAND_ARGS 0)
161162

162-
if(ROCM_TEST_GDB AND TARGET ${COMMAND_EXE})
163+
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
164+
165+
if(NOT IS_MULTI_CONFIG
166+
AND ROCM_TEST_GDB
167+
AND TARGET ${COMMAND_EXE})
163168
set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/gdb/test_${PARSE_NAME})
164169
file(MAKE_DIRECTORY ${TEST_DIR})
165170
if(NOT EXISTS ${TEST_DIR})
@@ -221,9 +226,15 @@ function(rocm_install_test)
221226
set(INSTALL_PREFIX "$<TARGET_PROPERTY:tests,ROCM_TEST_INSTALLDIR>")
222227
if(PARSE_TARGETS)
223228
foreach(TARGET ${PARSE_TARGETS})
224-
set_property(TARGET ${TARGET} APPEND PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib")
229+
set_property(
230+
TARGET ${TARGET}
231+
APPEND
232+
PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib")
225233
# Adding RPATH to public tests to point to private libraries.
226-
set_property(TARGET ${TARGET} APPEND PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib/${PROJECT_NAME}/lib")
234+
set_property(
235+
TARGET ${TARGET}
236+
APPEND
237+
PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib/${PROJECT_NAME}/lib")
227238
endforeach()
228239
install(
229240
TARGETS ${PARSE_TARGETS}

test/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ macro(rocm_cmake_add_test_argument CMAKE_VAR VAR_TYPE DOC_STRING)
1515
endif()
1616
endmacro()
1717

18-
rocm_cmake_add_test_argument(CMAKE_MAKE_PROGRAM FILEPATH "Make program to relay to test projects")
1918
rocm_cmake_add_test_argument(CMAKE_GENERATOR STRING "Generator to relay to test projects")
20-
rocm_cmake_add_test_argument(CMAKE_GENERATOR_INSTANCE STRING "Generator instance to relay to test projects")
21-
rocm_cmake_add_test_argument(CMAKE_GENERATOR_PLATFORM STRING "Generator platform to relay to test projects")
22-
rocm_cmake_add_test_argument(CMAKE_GENERATOR_TOOLSET STRING "Generator toolset to relay to test projects")
2319
rocm_cmake_add_test_argument(CMAKE_PREFIX_PATH PATH "Prefix path to relay to test projects")
2420
rocm_cmake_add_test_argument(CMAKE_PROGRAM_PATH PATH "Program path to relay to test projects")
21+
if(ROCM_CMAKE_GENERATOR STREQUAL "${CMAKE_GENERATOR}")
22+
rocm_cmake_add_test_argument(CMAKE_GENERATOR_INSTANCE STRING "Generator instance to relay to test projects")
23+
rocm_cmake_add_test_argument(CMAKE_GENERATOR_PLATFORM STRING "Generator platform to relay to test projects")
24+
rocm_cmake_add_test_argument(CMAKE_GENERATOR_TOOLSET STRING "Generator toolset to relay to test projects")
25+
rocm_cmake_add_test_argument(CMAKE_MAKE_PROGRAM FILEPATH "Make program to relay to test projects")
26+
endif()
2527

2628
function(rocm_cmake_create_test NAME TEST)
2729
add_custom_target(${NAME} COMMAND ${CMAKE_COMMAND} ${TEST_ARGUMENTS} -P ${CMAKE_CURRENT_SOURCE_DIR}/test.cmake ${TEST} ${CMAKE_CURRENT_BINARY_DIR}/tmp/${NAME})

test/analyze/CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,17 @@ rocm_enable_cppcheck(
4040
threadsafety
4141
)
4242

43+
# Workaround clangTooling issue: https://github.com/llvm/llvm-project/issues/100909
44+
if(NOT MSVC)
45+
add_compile_options(-Wno-unused-command-line-argument)
46+
endif()
47+
4348
rocm_setup_version(VERSION 1.0.0)
4449

45-
configure_file(simple2.cpp.in simple2.cpp)
50+
configure_file(simple2.cpp.in simple.cpp)
51+
configure_file(simple_with_a_ridiculously_long_filename_in_order_to_test_long_filenames_in_clang_tidy_cmake.cpp.in simple_with_a_ridiculously_long_filename_in_order_to_test_long_filenames_in_clang_tidy_cmake.cpp)
4652

47-
add_library(simple simple.cpp ${CMAKE_CURRENT_BINARY_DIR}/simple2.cpp)
53+
add_library(simple simple.cpp ${CMAKE_CURRENT_BINARY_DIR}/simple_with_a_ridiculously_long_filename_in_order_to_test_long_filenames_in_clang_tidy_cmake.cpp ${CMAKE_CURRENT_BINARY_DIR}/simple.cpp)
4854
rocm_install_targets(TARGETS simple INCLUDE include)
4955

5056

test/analyze/include/simple.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#define GUARD_SIMPLE_H
88

99
void simple();
10+
void simple2();
11+
void simple_long();
1012

1113

1214
#endif

test/analyze/simple.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright (C) 2017 Advanced Micro Devices, Inc.
33
******************************************************************************/
44

5+
#include <simple.h>
56

67
void simple()
78
{}

0 commit comments

Comments
 (0)