Use ctest for integration testing

This commit is contained in:
Juan Ramos 2023-11-20 14:13:20 -07:00 committed by Juan Ramos
parent af4fb97d7b
commit a32b2b412b
6 changed files with 102 additions and 129 deletions

View file

@ -17,50 +17,18 @@ permissions:
contents: read contents: read
jobs: jobs:
build-tests: cmake:
name: BUILD_TESTS=ON ${{ matrix.os }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ ubuntu-latest, windows-latest, macos-latest ] os: [ ubuntu-latest, windows-latest, macos-latest ]
cmake-version: [ '3.15', 'latest']
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: lukka/get-cmake@latest - uses: lukka/get-cmake@latest
- uses: ilammy/msvc-dev-cmd@v1 - uses: ilammy/msvc-dev-cmd@v1
- run: cmake -S . -B build -D BUILD_TESTS=ON --log-level=DEBUG - run: cmake -S . -B build -D BUILD_TESTS=ON --log-level=DEBUG -G Ninja
- run: cmake --build build - run: ctest --test-dir build --output-on-failure
test-cmake-minimum:
name: Test CMake minimum
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lukka/get-cmake@latest
with:
cmakeVersion: 3.15.0
- run: cmake -S . -B build/ --loglevel=DEBUG
- run: cmake --install build/ --prefix build/install
find_package:
name: Test find_package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lukka/get-cmake@latest
with:
cmakeVersion: 3.17.0
- run: cmake -S . -B build
- run: cmake --install build --prefix ${{ github.workspace }}/build/install
- run: cmake -S tests/find_package -B build/tests/find_package -D CMAKE_PREFIX_PATH=${{ github.workspace }}/build/install
add_subdirectory:
name: Test add_subdirectory
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lukka/get-cmake@latest
- run: cmake -S tests/add_subdirectory -B tests/add_subdirectory/build
- run: cmake --build tests/add_subdirectory/build
reuse: reuse:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -50,6 +50,7 @@ endif()
if (PROJECT_IS_TOP_LEVEL) if (PROJECT_IS_TOP_LEVEL)
option(BUILD_TESTS "Build the tests") option(BUILD_TESTS "Build the tests")
if (BUILD_TESTS) if (BUILD_TESTS)
enable_testing()
add_subdirectory(tests) add_subdirectory(tests)
endif() endif()

View file

@ -6,41 +6,32 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# ~~~ # ~~~
# Test the non-API headers provided by this repo if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
# NOTE: For us testing just means that these header files compile set(fresh "--fresh")
# with reasonable warnings.
message(STATUS "${PROJECT_NAME} = ${PROJECT_VERSION}")
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
if(${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
add_compile_options(
-Wpedantic
-Wall
-Wextra
-Werror
)
endif() endif()
if (MSVC) # Test add_subdirectory suppport
add_compile_options( add_test(NAME integration.add_subdirectory
/W4 COMMAND ${CMAKE_CTEST_COMMAND}
/permissive- --build-and-test ${CMAKE_CURRENT_LIST_DIR}/integration
/WX ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory
) --build-generator ${CMAKE_GENERATOR}
endif() --build-options -DFIND_PACKAGE_TESTING=OFF "${fresh}"
)
# vk_icd.h set(test_install_dir "${CMAKE_CURRENT_BINARY_DIR}/install")
add_library(vk_icd MODULE vk_icd.c) add_test(NAME integration.install
target_link_libraries(vk_icd PRIVATE Vulkan::Headers) COMMAND ${CMAKE_COMMAND} --install ${VULKAN_HEADERS_BINARY_DIR} --prefix ${test_install_dir}
)
# vk_layer.h # Test find_package suppport
add_library(vk_layer MODULE vk_layer.c) add_test(NAME integration.find_package
target_link_libraries(vk_layer PRIVATE Vulkan::Headers) COMMAND ${CMAKE_CTEST_COMMAND}
--build-and-test ${CMAKE_CURRENT_LIST_DIR}/integration
${CMAKE_CURRENT_BINARY_DIR}/find_package
--build-generator ${CMAKE_GENERATOR}
--build-options -DFIND_PACKAGE_TESTING=ON -DCMAKE_PREFIX_PATH=${test_install_dir} "${fresh}"
)
if (NOT TARGET Vulkan-Headers) # Installing comes before testing
message(FATAL_ERROR "Backcompat for Vulkan-Headers target broken!") set_tests_properties(integration.find_package PROPERTIES DEPENDS integration.install)
endif()

View file

@ -1,30 +0,0 @@
# ~~~
# Copyright 2022-2023 The Khronos Group Inc.
# Copyright 2022-2023 Valve Corporation
# Copyright 2022-2023 LunarG, Inc.
#
# SPDX-License-Identifier: Apache-2.0
# ~~~
cmake_minimum_required(VERSION 3.14.2)
project(TEST_VULKAN_HEADERS_ADD_SUBDIRECTORY_SUPPORT LANGUAGES C)
add_subdirectory(../../ ${CMAKE_CURRENT_BINARY_DIR}/headers)
if (NOT TARGET Vulkan::Headers)
message(FATAL_ERROR "Vulkan::Headers target not defined")
endif()
# Consuming vulkan-headers via add_subdirectory should NOT add installation code to the parent CMake project.
if (DEFINED CMAKE_INSTALL_INCLUDEDIR)
message(FATAL_ERROR "CMAKE_INSTALL_INCLUDEDIR was defined!")
endif()
add_library(foobar STATIC)
target_link_libraries(foobar PRIVATE Vulkan::Headers)
target_sources(foobar PRIVATE
../vk_icd.c
../vk_layer.c
)

View file

@ -1,30 +0,0 @@
# ~~~
# Copyright 2022-2023 The Khronos Group Inc.
# Copyright 2022-2023 Valve Corporation
# Copyright 2022-2023 LunarG, Inc.
#
# SPDX-License-Identifier: Apache-2.0
# ~~~
cmake_minimum_required(VERSION 3.14.2)
project(TEST_VULKAN_HEADERS_FIND_PACKAGE_SUPPORT LANGUAGES C)
find_package(VulkanHeaders REQUIRED CONFIG)
if (NOT TARGET Vulkan::Headers)
message(FATAL_ERROR "Vulkan::Headers target not defined")
endif()
if (NOT DEFINED VulkanHeaders_VERSION)
message(FATAL_ERROR "VulkanHeaders_VERSION not defined!")
endif()
message(STATUS "VulkanHeaders_VERSION = ${VulkanHeaders_VERSION}")
add_library(foobar STATIC)
target_link_libraries(foobar PRIVATE Vulkan::Headers)
target_sources(foobar PRIVATE
../vk_icd.c
../vk_layer.c
)

View file

@ -0,0 +1,73 @@
# ~~~
# Copyright 2022-2023 The Khronos Group Inc.
# Copyright 2022-2023 Valve Corporation
# Copyright 2022-2023 LunarG, Inc.
#
# SPDX-License-Identifier: Apache-2.0
# ~~~
cmake_minimum_required(VERSION 3.14.2)
project(API LANGUAGES C)
if (FIND_PACKAGE_TESTING)
find_package(VulkanHeaders REQUIRED CONFIG)
else()
add_subdirectory(../../ ${CMAKE_CURRENT_BINARY_DIR}/headers)
endif()
if (NOT TARGET Vulkan::Headers)
message(FATAL_ERROR "Vulkan::Headers target not defined")
endif()
if (FIND_PACKAGE_TESTING)
if (NOT DEFINED VulkanHeaders_VERSION)
message(FATAL_ERROR "VulkanHeaders_VERSION not defined!")
endif()
message(STATUS "VulkanHeaders_VERSION = ${VulkanHeaders_VERSION}")
endif()
if (NOT FIND_PACKAGE_TESTING)
# Consuming vulkan-headers via add_subdirectory should NOT add installation code to the parent CMake project.
if (DEFINED CMAKE_INSTALL_INCLUDEDIR)
message(FATAL_ERROR "CMAKE_INSTALL_INCLUDEDIR was defined!")
endif()
# NOTE: Some users may not be using the namespace target.
# Don't accidentally break them unless we have to.
if (NOT TARGET Vulkan-Headers)
message(FATAL_ERROR "Backcompat for Vulkan-Headers target broken!")
endif()
endif()
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
if(${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
add_compile_options(
-Wpedantic
-Wall
-Wextra
-Werror
)
endif()
if (MSVC)
add_compile_options(
/W4
/permissive-
/WX
)
endif()
# Test the non-API headers provided by this repo
# NOTE: For us testing just means that these header files compile
# with reasonable warnings.
# vk_icd.h
add_library(vk_icd MODULE ../vk_icd.c)
target_link_libraries(vk_icd PRIVATE Vulkan::Headers)
# vk_layer.h
add_library(vk_layer MODULE ../vk_layer.c)
target_link_libraries(vk_layer PRIVATE Vulkan::Headers)