blob: 49c0d7c304dbde3fc1992332013127dc81238d8f [file] [log] [blame]
Yannis Guyon8d614692022-04-01 17:44:40 +00001# Copyright 2022 Joe Drago. All rights reserved.
2# SPDX-License-Identifier: BSD-2-Clause
3
4# With testing enabled, all targets referenced by add_test() can be run
5# at once with CMake's ctest command line tool from the build folder.
6enable_testing()
Yannis Guyon8d614692022-04-01 17:44:40 +00007
8add_executable(aviftest aviftest.c)
9if(AVIF_LOCAL_LIBGAV1)
10 set_target_properties(aviftest PROPERTIES LINKER_LANGUAGE "CXX")
11endif()
12target_link_libraries(aviftest avif ${AVIF_PLATFORM_LIBRARIES})
Yannis Guyon2d271dd2022-05-13 12:27:06 +020013add_test(NAME aviftest COMMAND aviftest ${CMAKE_CURRENT_SOURCE_DIR}/data)
Yannis Guyon8d614692022-04-01 17:44:40 +000014
Yannis Guyon3a9ae262022-04-30 04:07:19 +000015add_executable(avifincrtest avifincrtest.c avifincrtest_helpers.c)
Yannis Guyon8d614692022-04-01 17:44:40 +000016if(AVIF_LOCAL_LIBGAV1)
17 set_target_properties(avifincrtest PROPERTIES LINKER_LANGUAGE "CXX")
18endif()
19target_link_libraries(avifincrtest avif ${AVIF_PLATFORM_LIBRARIES})
20add_test(NAME avifincrtest COMMAND avifincrtest ${CMAKE_CURRENT_SOURCE_DIR}/data/sofa_grid1x5_420.avif)
21
Yannis Guyon62264852022-05-17 11:15:57 +020022add_executable(avifmetadatatest avifmetadatatest.c)
23if(AVIF_LOCAL_LIBGAV1)
24 set_target_properties(avifmetadatatest PROPERTIES LINKER_LANGUAGE "CXX")
25endif()
26target_link_libraries(avifmetadatatest avif ${AVIF_PLATFORM_LIBRARIES})
27add_test(NAME avifmetadatatest COMMAND avifmetadatatest)
28
Yannis Guyon8d614692022-04-01 17:44:40 +000029add_executable(avifyuv avifyuv.c)
30if(AVIF_LOCAL_LIBGAV1)
31 set_target_properties(avifyuv PROPERTIES LINKER_LANGUAGE "CXX")
32endif()
33target_link_libraries(avifyuv avif ${AVIF_PLATFORM_LIBRARIES})
Yannis Guyon8efe1a82022-05-16 11:48:01 +020034foreach(AVIFYUV_MODE limited rgb) # Modes drift and premultiply take more than 2 minutes each so they are disabled.
Yannis Guyon2d271dd2022-05-13 12:27:06 +020035 add_test(NAME avifyuv_${AVIFYUV_MODE} COMMAND avifyuv -m ${AVIFYUV_MODE})
36endforeach()
Yannis Guyon8d614692022-04-01 17:44:40 +000037
Yannis Guyon44b086a2022-05-18 10:47:52 +020038if(AVIF_ENABLE_GTEST)
39 enable_language(CXX)
40 set(CMAKE_CXX_STANDARD 11)
41 if(AVIF_LOCAL_GTEST)
42 set(GTEST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/ext/googletest/googletest/include)
43 set(GTEST_LIBRARIES ${CMAKE_SOURCE_DIR}/ext/googletest/build/lib/libgtest${CMAKE_STATIC_LIBRARY_SUFFIX})
44 set(GTEST_MAIN_LIBRARIES ${CMAKE_SOURCE_DIR}/ext/googletest/build/lib/libgtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
45 set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
46 if(NOT EXISTS ${GTEST_INCLUDE_DIRS}/gtest/gtest.h)
47 message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_INCLUDE_DIRS}/gtest/gtest.h is missing, bailing out")
48 elseif(NOT EXISTS ${GTEST_LIBRARIES})
49 message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_LIBRARIES} is missing, bailing out")
50 elseif(NOT EXISTS ${GTEST_MAIN_LIBRARIES})
51 message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_MAIN_LIBRARIES} is missing, bailing out")
52 else()
53 message(STATUS "Found local ext/googletest")
54 endif()
55 else()
56 find_package(GTest REQUIRED)
57 endif()
58
Yannis Guyon9b431852022-06-15 15:37:38 +020059 add_executable(avifgridapitest avifgridapitest.cc aviftest_helpers.cc)
Yannis Guyon44b086a2022-05-18 10:47:52 +020060 target_link_libraries(avifgridapitest avif ${AVIF_PLATFORM_LIBRARIES} ${GTEST_BOTH_LIBRARIES})
61 target_include_directories(avifgridapitest PRIVATE ${GTEST_INCLUDE_DIRS})
62 add_test(NAME avifgridapitest COMMAND avifgridapitest)
63
Yannis Guyon9b431852022-06-15 15:37:38 +020064 add_executable(avify4mtest avify4mtest.cc aviftest_helpers.cc)
Yannis Guyon44b086a2022-05-18 10:47:52 +020065 target_link_libraries(avify4mtest avif avif_apps ${AVIF_PLATFORM_LIBRARIES} ${GTEST_BOTH_LIBRARIES})
66 target_include_directories(avify4mtest PRIVATE ${GTEST_INCLUDE_DIRS})
67 add_test(NAME avify4mtest COMMAND avify4mtest)
68else()
69 message(STATUS "Most tests are disabled because AVIF_ENABLE_GTEST is OFF.")
70endif()
71
Yannis Guyon8d614692022-04-01 17:44:40 +000072if(AVIF_ENABLE_COVERAGE)
Yannis Guyonbceac502022-04-12 18:32:21 +000073 add_custom_target(
74 avif_coverage
75 COMMAND ${CMAKE_COMMAND} -E env "LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR}/aviftest.profraw" $<TARGET_FILE:aviftest>
76 ${CMAKE_CURRENT_SOURCE_DIR}/data
77 COMMAND ${XCRUN} llvm-profdata merge -sparse ${CMAKE_CURRENT_BINARY_DIR}/aviftest.profraw -o
78 ${CMAKE_CURRENT_BINARY_DIR}/aviftest.profdata
Yannis Guyon8d614692022-04-01 17:44:40 +000079 COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/coverage
Yannis Guyonbceac502022-04-12 18:32:21 +000080 COMMAND ${XCRUN} llvm-cov show $<TARGET_FILE:aviftest> -instr-profile=${CMAKE_CURRENT_BINARY_DIR}/aviftest.profdata
81 -project-title=libavif --format html -output-dir=${CMAKE_CURRENT_BINARY_DIR}/coverage
Yannis Guyon8d614692022-04-01 17:44:40 +000082 COMMAND echo Coverage report here: ${CMAKE_CURRENT_BINARY_DIR}/coverage/index.html
83 DEPENDS aviftest
84 )
85endif()