[PATCH] D51048: cmake: Specify reference outputs in llvm_test_data()
Matthias Braun via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 31 17:43:40 PDT 2018
MatzeB added a comment.
In https://reviews.llvm.org/D51048#1221431, @MatzeB wrote:
> In https://reviews.llvm.org/D51048#1221423, @tra wrote:
>
> > I've ran into an unexpected problem after this patches have landed.
> >
> > CUDA test suite generates multiple tests that use the same reference output.
> > I can't just use llvm_test_data(test_XYZ, "test.reference_output"), because there can only be one test.reference_output in the build directory.
> > I also can't manually create a symlink $SRC/test.reference_output -> $BUILD_DIR/test-XYZ.reference_output and then use llvm_test_data(SOURCE_DIR=$BUILD_DIR test-XYZ.reference_output) because it can't link to itself.
> > The only way around is to create a new directory, symlink original file there as test_XYZ and then use the temp dir as SOURCE_DIR to create test_XYZ.reference_output in the build dir. This is rather convoluted.
> >
> > We probably need llvm_test_data with an optional argument that would allow providing a different name for the file name in the build dir, or make it unique automatically.
>
>
> Possible fix for your case (untested as I don't have a CUDA environment):
>
> diff --git a/External/CUDA/CMakeLists.txt b/External/CUDA/CMakeLists.txt
> index 071ffbc9..63ab1e4c 100644
> --- a/External/CUDA/CMakeLists.txt
> +++ b/External/CUDA/CMakeLists.txt
> @@ -58,13 +58,16 @@ macro(create_one_local_test_f Name FileGlob FilterRegex)
> set(_executable ${Name}-${VariantSuffix})
> set(_executable_path ${CMAKE_CURRENT_BINARY_DIR}/${_executable})
> # Verify reference output if it exists.
> + llvm_test_run()
> + set(REFERENCE_OUTPUT)
> if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${Name}.reference_output)
> - llvm_test_traditional(${Name})
> - else()
> - # otherwise just run the executable.
> - llvm_test_run()
> + set(REFERENCE_OUTPUT ${Name}.reference_output)
> + llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}
> + ${FPCMP} %o ${REFERENCE_OUTPUT}
> + )
> endif()
> llvm_test_executable(${_executable} ${_sources})
> + llvm_test_data(${_executable} ${REFERENCE_OUTPUT})
> target_compile_options(${_executable} PUBLIC ${VariantCPPFLAGS})
> if(VariantLibs)
> target_link_libraries(${_executable} ${VariantLibs})
>
Though thinking about it, I don't really understand your problem:
How can there be multiple outputs with the same name? They have different names in the repository (algorithm.reference_output, assert.reference_output, ...)
Repository:
rT test-suite
https://reviews.llvm.org/D51048
More information about the llvm-commits
mailing list