Index: MicroBenchmarks/ImageProcessing/AnisotropicDiffusion/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/AnisotropicDiffusion/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/AnisotropicDiffusion/CMakeLists.txt @@ -3,10 +3,13 @@ list(APPEND CXXFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) list(APPEND LDFLAGS -lm) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/anisotropicDiffusionOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/anisotropicDiffusionOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/anisotropicDiffusion.reference_output") +llvm_test_verify_hash_program_output(anisotropicDiffusionOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} anisotropicDiffusion.reference_output anisotropicDiffusionOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(AnisotropicDiffusion ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c main.cpp anisotropicDiffusionKernel.c) +llvm_test_data(AnisotropicDiffusion anisotropicDiffusion.reference_output) target_link_libraries(AnisotropicDiffusion benchmark) Index: MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/BilateralFiltering/CMakeLists.txt @@ -2,10 +2,13 @@ list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) list(APPEND LDFLAGS -lm) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/bilateralFilterOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/bilateralFilterOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/bilateralFilter.reference_output") +llvm_test_verify_hash_program_output(bilateralFilterOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} bilateralFilter.reference_output bilateralFilterOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(BilateralFilter ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c main.cpp bilateralFilterKernel.c) +llvm_test_data(BilateralFilter bilateralFilter.reference_output) target_link_libraries(BilateralFilter benchmark) Index: MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/Blur/CMakeLists.txt @@ -3,13 +3,18 @@ list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) list(APPEND LDFLAGS -lm) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/boxBlurOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/boxBlurOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/boxBlur.reference_output") +llvm_test_verify_hash_program_output(boxBlurOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} boxBlur.reference_output boxBlurOutput.txt +) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/gaussianBlurOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/gaussianBlurOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/gaussianBlur.reference_output") +llvm_test_verify_hash_program_output(gaussianBlurOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} gaussianBlur.reference_output gaussianBlurOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(blur ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c main.cpp boxBlurKernel.c gaussianBlurKernel.c) +llvm_test_data(blur boxBlur.reference_output gaussianBlur.reference_output) target_link_libraries(blur benchmark) Index: MicroBenchmarks/ImageProcessing/Dilate/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/Dilate/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/Dilate/CMakeLists.txt @@ -1,11 +1,14 @@ set(IMAGEPROC_UTILS MicroBenchmarks/ImageProcessing/utils) list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/dilateOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/dilateOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/dilate.reference_output") +llvm_test_verify_hash_program_output(dilateOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} dilate.reference_output dilateOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(Dilate ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c main.cpp dilateKernel.c) +llvm_test_data(Dilate dilate.reference_output) target_link_libraries(Dilate benchmark) Index: MicroBenchmarks/ImageProcessing/Dither/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/Dither/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/Dither/CMakeLists.txt @@ -2,13 +2,18 @@ list(APPEND CPPFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) list(APPEND LDFLAGS -lm) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/orderedOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/orderedOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/orderedDither.reference_output") +llvm_test_verify_hash_program_output(orderedOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} orderedDither.reference_output orderedOutput.txt +) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/floydOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/floydOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/floydDither.reference_output") +llvm_test_verify_hash_program_output(floydOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} floydDither.reference_output floydOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(Dither main.cpp orderedDitherKernel.c floydDitherKernel.c ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c) +llvm_test_data(Dither orderedDither.reference_output floydDither.reference_output) target_link_libraries(Dither benchmark) Index: MicroBenchmarks/ImageProcessing/Interpolation/CMakeLists.txt =================================================================== --- MicroBenchmarks/ImageProcessing/Interpolation/CMakeLists.txt +++ MicroBenchmarks/ImageProcessing/Interpolation/CMakeLists.txt @@ -1,13 +1,18 @@ set(IMAGEPROC_UTILS MicroBenchmarks/ImageProcessing/utils) list(APPEND CXXFLAGS -I ${CMAKE_SOURCE_DIR}/${IMAGEPROC_UTILS}) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/bicubicOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/bicubicOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/bicubic.reference_output") +llvm_test_verify_hash_program_output(bicubicOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} bicubic.reference_output bicubicOutput.txt +) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/bilinearOutput.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/bilinearOutput.txt ${CMAKE_CURRENT_SOURCE_DIR}/bilinear.reference_output") +llvm_test_verify_hash_program_output(bilinearOutput.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} bilinear.reference_output bilinearOutput.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_executable(Interpolation bicubicKernel.c bilinearKernel.c main.cpp ../utils/ImageHelper.cpp ../utils/glibc_compat_rand.c) +llvm_test_data(Interpolation bicubic.reference_output bilinear.reference_output) target_link_libraries(Interpolation benchmark) Index: MicroBenchmarks/harris/CMakeLists.txt =================================================================== --- MicroBenchmarks/harris/CMakeLists.txt +++ MicroBenchmarks/harris/CMakeLists.txt @@ -1,8 +1,10 @@ list(APPEND CPPFLAGS -std=c++11 -ffast-math) -set(REFERENCE_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/harris.reference_output) -llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${CMAKE_CURRENT_BINARY_DIR}/output.txt") -llvm_test_verify("${FPCMP} ${CMAKE_CURRENT_BINARY_DIR}/output.txt ${REFERENCE_OUTPUT}") +llvm_test_verify_hash_program_output(output.txt) +llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${FPCMP} harris.reference_output output.txt +) llvm_test_run(WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) -llvm_test_executable(harris harrisKernel.cpp main.cpp) +llvm_test_executable(harris harrisKernel.cpp main.cpp) target_link_libraries(harris benchmark) +llvm_test_data(harris harris.reference_output) Index: cmake/modules/SingleMultiSource.cmake =================================================================== --- cmake/modules/SingleMultiSource.cmake +++ cmake/modules/SingleMultiSource.cmake @@ -37,9 +37,11 @@ endif() foreach(source ${sources}) basename(name ${source}) - llvm_test_traditional(${name}) set(_target ${_LSARG_PREFIX}${name}) - llvm_test_executable(${_target} ${source}) + llvm_test_executable_no_test(${_target} ${source}) + set_property(TARGET ${_target} PROPERTY TEST_NAME ${name}) + llvm_test_traditional(${_target}) + llvm_add_test_for_target(${_target}) endforeach() endfunction() @@ -52,10 +54,17 @@ file(GLOB sources *.c *.cpp *.cc) endif() + llvm_test_executable_no_test(${target} ${sources}) llvm_test_traditional(${target}) - llvm_test_executable(${target} ${sources}) + llvm_add_test_for_target(${target}) endfunction() +macro(llvm_test_verify_hash_program_output _file) + llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/HashProgramOutput.sh ${_file} + ) +endmacro() + # Sets Var to ${name} with directory and shortest extension removed. macro(basename Var name) # strip directory name @@ -67,14 +76,19 @@ # Traditionally CMakeLists.txt files would set RUN_OPTIONS, SMALL_PROBLEM_SIZE, # HASH_PROGRAM_OUTPUT, etc. # Create llvm_test_run() and llvm_test_verify() invocation for that. -function(llvm_test_traditional name) +function(llvm_test_traditional target) + get_property(name TARGET ${target} PROPERTY TEST_NAME) + if(NOT name) + set(name ${target}) + endif() + # Always run in the same directory as the executable list(INSERT RUN_OPTIONS 0 WORKDIR ${CMAKE_CURRENT_BINARY_DIR}) llvm_test_run(${RUN_OPTIONS}) # Hash if we've been asked to. if(HASH_PROGRAM_OUTPUT) - llvm_test_verify("${CMAKE_SOURCE_DIR}/HashProgramOutput.sh %o") + llvm_test_verify_hash_program_output(%o) endif() # Find the reference output file key name. @@ -88,13 +102,13 @@ endif() if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${ENDIAN}-endian.${SIZE_SUFFIX}) - set(REFERENCE_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${ENDIAN}-endian.${SIZE_SUFFIX}) + set(REFERENCE_OUTPUT ${name}.reference_output.${ENDIAN}-endian.${SIZE_SUFFIX}) elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${SIZE_SUFFIX}) - set(REFERENCE_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${SIZE_SUFFIX}) + set(REFERENCE_OUTPUT ${name}.reference_output.${SIZE_SUFFIX}) elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${ENDIAN}-endian) - set(REFERENCE_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output.${ENDIAN}-endian) + set(REFERENCE_OUTPUT ${name}.reference_output.${ENDIAN}-endian) elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output) - set(REFERENCE_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${name}.reference_output) + set(REFERENCE_OUTPUT ${name}.reference_output) else() message("-- No reference output found for test ${name}") endif() @@ -108,7 +122,10 @@ if(FP_ABSTOLERANCE) set(DIFFPROG "${DIFFPROG} -a ${FP_ABSTOLERANCE}") endif() - llvm_test_verify("${DIFFPROG} %o ${REFERENCE_OUTPUT}") + llvm_test_verify(WORKDIR ${CMAKE_CURRENT_BINARY_DIR} + ${DIFFPROG} %o ${REFERENCE_OUTPUT} + ) + llvm_test_data(${target} ${REFERENCE_OUTPUT}) endif() set(TESTSCRIPT "${TESTSCRIPT}" PARENT_SCOPE) endfunction() Index: cmake/modules/TestFile.cmake =================================================================== --- cmake/modules/TestFile.cmake +++ cmake/modules/TestFile.cmake @@ -88,3 +88,8 @@ # flush the test script set(TESTSCRIPT "" PARENT_SCOPE) endfunction() + +function(llvm_add_test_for_target target) + llvm_add_test($.test $) + set(TESTSCRIPT "" PARENT_SCOPE) +endfunction() Index: cmake/modules/TestSuite.cmake =================================================================== --- cmake/modules/TestSuite.cmake +++ cmake/modules/TestSuite.cmake @@ -34,12 +34,7 @@ endforeach() endfunction() -# Creates a new executable build target. Use this instead of `add_executable`. -# It applies CFLAGS, CPPFLAGS, CXXFLAGS and LDFLAGS. Creates a .test file if -# necessary, registers the target with the TEST_SUITE_TARGETS list and makes -# sure we build the required dependencies for compiletime measurements -# and support the TEST_SUITE_PROFILE_USE mode. -function(llvm_test_executable target) +function(llvm_test_executable_no_test target) add_executable(${target} ${ARGN}) append_target_flags(COMPILE_FLAGS ${target} ${CFLAGS}) append_target_flags(COMPILE_FLAGS ${target} ${CPPFLAGS}) @@ -54,8 +49,17 @@ endif() set_property(GLOBAL APPEND PROPERTY TEST_SUITE_TARGETS ${target}) - llvm_add_test(${CMAKE_CURRENT_BINARY_DIR}/${target}.test ${target_path}) test_suite_add_build_dependencies(${target}) +endfunction() + +# Creates a new executable build target. Use this instead of `add_executable`. +# It applies CFLAGS, CPPFLAGS, CXXFLAGS and LDFLAGS. Creates a .test file if +# necessary, registers the target with the TEST_SUITE_TARGETS list and makes +# sure we build the required dependencies for compiletime measurements +# and support the TEST_SUITE_PROFILE_USE mode. +function(llvm_test_executable target) + llvm_test_executable_no_test(${target} ${ARGN}) + llvm_add_test_for_target(${target}) set(TESTSCRIPT "" PARENT_SCOPE) endfunction()