[libclc] Replace llvm-dis with llvm-nm in check-external-funcs.test (#187190)

llvm-nm is covered by extra_deps in runtime build when
LLVM_INCLUDE_TESTS is true.
This commit is contained in:
Wenju He 2026-03-21 09:01:44 +08:00 committed by GitHub
parent 2b47497f6e
commit 8eccc21e47
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 29 additions and 80 deletions

View File

@ -48,7 +48,7 @@ if( LIBCLC_STANDALONE_BUILD OR CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DI
message( STATUS "libclc LLVM version: ${LLVM_PACKAGE_VERSION}" )
foreach( tool IN ITEMS llvm-link llvm-dis opt )
foreach( tool IN ITEMS llvm-link opt )
find_program( LLVM_TOOL_${tool} ${tool} PATHS ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )
set( ${tool}_exe ${LLVM_TOOL_${tool}} )
set( ${tool}_target )
@ -73,7 +73,6 @@ else()
endif()
get_host_tool_path( llvm-link LLVM_LINK llvm-link_exe llvm-link_target )
get_host_tool_path( llvm-dis LLVM_DIS llvm-dis_exe llvm-dis_target )
get_host_tool_path( opt OPT opt_exe opt_target )
# Setup the paths where libclc runtimes should be stored. By default, in an

View File

@ -1,50 +1,42 @@
set(LIBCLC_LIBRARY_DIR ${LIBCLC_OUTPUT_LIBRARY_DIR})
set(LLVM_TOOLS_DIR ${LLVM_TOOLS_BINARY_DIR})
set(LIBCLC_TEST_DEPS
${llvm-dis_target}
libclc-opencl-builtins
)
umbrella_lit_testsuite_begin(check-libclc)
# Testing unresolved symbols.
# check_external_funcs.sh does not work on Windows
if(NOT WIN32)
foreach(t ${LIBCLC_TARGETS_TO_BUILD})
string(REPLACE "-" ";" TRIPLE ${t})
list(GET TRIPLE 0 ARCH)
foreach(t ${LIBCLC_TARGETS_TO_BUILD})
string(REPLACE "-" ";" TRIPLE ${t})
list(GET TRIPLE 0 ARCH)
# Skip nvptx, clspv, spirv targets
if(ARCH MATCHES "^(nvptx|clspv)(64)?$" OR ARCH MATCHES "^spirv(64)?$")
continue()
endif()
# Skip nvptx, clspv, spirv targets
if(ARCH MATCHES "^(nvptx|clspv)(64)?$" OR ARCH MATCHES "^spirv(64)?$")
continue()
endif()
# Get the output file from the target property
get_target_property(target_file libclc-${t} TARGET_FILE)
get_filename_component(output_file ${target_file} NAME)
# Get the output file from the target property
set(target_file "$<TARGET_PROPERTY:libclc-${t},TARGET_FILE>")
set(LIBCLC_TARGET_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/${t})
file(MAKE_DIRECTORY ${LIBCLC_TARGET_TEST_DIR})
file(WRITE ${LIBCLC_TARGET_TEST_DIR}/check-external-funcs.test
"// RUN: %check_external_funcs %libclc_library_dir/${t}/${output_file} %llvm_tools_dir
set(LIBCLC_TARGET_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/${t})
file(MAKE_DIRECTORY ${LIBCLC_TARGET_TEST_DIR})
file(GENERATE OUTPUT ${LIBCLC_TARGET_TEST_DIR}/check-external-funcs.test
CONTENT "; RUN: llvm-nm -u \"${target_file}\" | FileCheck %s --allow-empty\n\n; CHECK-NOT: {{.+}}\n"
)
// This test verifies that the libclc library for ${t} has no
// unresolved external functions (except LLVM intrinsics).
")
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
${LIBCLC_TARGET_TEST_DIR}/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
${LIBCLC_TARGET_TEST_DIR}/lit.site.cfg.py
MAIN_CONFIG
${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
add_lit_testsuite(check-libclc-external-funcs-${t} "Running ${t} tests"
${LIBCLC_TARGET_TEST_DIR}
DEPENDS libclc-${t} ${LIBCLC_TEST_DEPS}
)
set_target_properties(check-libclc-external-funcs-${t} PROPERTIES FOLDER "libclc tests")
endforeach()
endif()
add_lit_testsuite(check-libclc-external-funcs-${t} "Running ${t} tests"
${LIBCLC_TARGET_TEST_DIR}
DEPENDS ${LIBCLC_TEST_DEPS}
)
set_target_properties(check-libclc-external-funcs-${t} PROPERTIES FOLDER "libclc tests")
endforeach()
umbrella_lit_testsuite_end(check-libclc)

View File

@ -1,30 +0,0 @@
#!/bin/sh
FILE=$1
BIN_DIR=$2
if [ ! -f $FILE ]; then
echo "ERROR: Not a file: $FILE"
exit 3
fi
ret=0
DIS="$BIN_DIR/llvm-dis"
if [ ! -x $DIS ]; then
echo "ERROR: Disassembler '$DIS' is not executable"
exit 3
fi
TMP_FILE=$(mktemp)
# Check for external functions. Calls to llvm intrinsics are OK
$DIS < $FILE | grep '^[[:space:]]*declare ' | grep -v '@llvm' > "$TMP_FILE"
COUNT=$(wc -l < "$TMP_FILE")
if [ "$COUNT" -ne "0" ]; then
echo "ERROR: $COUNT unresolved external functions detected in $FILE"
cat $TMP_FILE
ret=1
else
echo "File $FILE is OK"
fi
exit $ret

View File

@ -34,13 +34,3 @@ if "PATH" in os.environ:
)
else:
config.environment["PATH"] = config.llvm_tools_dir
# Define substitutions for the test files
config.substitutions.append(("%libclc_library_dir", config.libclc_library_dir))
config.substitutions.append(("%llvm_tools_dir", config.llvm_tools_dir))
config.substitutions.append(
(
"%check_external_funcs",
os.path.join(config.libclc_test_root, "check_external_funcs.sh"),
)
)

View File

@ -4,8 +4,6 @@ import sys
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
config.libclc_obj_root = "@LIBCLC_TARGET_TEST_DIR@"
config.libclc_test_root = "@CMAKE_CURRENT_SOURCE_DIR@"
config.libclc_library_dir = "@LIBCLC_LIBRARY_DIR@"
import lit.llvm
lit.llvm.initialize(lit_config, config)

View File

@ -554,7 +554,7 @@ if(build_runtimes)
# TODO: We need to consider passing it as '-DRUNTIMES_x86_64_LLVM_ENABLE_RUNTIMES'.
if("libclc" IN_LIST LLVM_ENABLE_RUNTIMES)
foreach(dep clang llvm-as llvm-dis llvm-link opt llvm-ar llvm-ranlib)
foreach(dep clang llvm-link opt llvm-ar llvm-ranlib)
if(TARGET ${dep})
list(APPEND extra_deps ${dep})
endif()