Skip to content

Commit

Permalink
Coverage: Reworked support.
Browse files Browse the repository at this point in the history
  • Loading branch information
DragonJoker committed Feb 25, 2024
1 parent 3e97ace commit 45cff7c
Show file tree
Hide file tree
Showing 11 changed files with 219 additions and 112 deletions.
20 changes: 18 additions & 2 deletions .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,19 @@ jobs:
strategy:
matrix:
os: [[windows-latest,x64-windows,msvc]]
buildType: [Release]
buildType: [Debug]
runs-on: ${{ matrix.os[0] }}
steps:
- uses: actions/checkout@v2
- name: Checkout submodules
run: |
git submodule update --init -- "CMake"
git submodule update --init -- "external/vcpkg"
- name: Setup OpenCppCoverage
id: setup_opencppcoverage
run: |
choco install OpenCppCoverage -y
echo "C:\Program Files\OpenCppCoverage" >> $env:GITHUB_PATH
- name: Setup vcpkg
uses: lukka/run-vcpkg@v10
with:
Expand All @@ -52,14 +57,25 @@ jobs:
shell: bash
working-directory: ${{runner.workspace}}/build-${{ matrix.buildType }}
run: |
cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=${{ matrix.buildType }} --preset ci-notest -DPROJECTS_WARNINGS_AS_ERRORS=$PROJ_WAE
cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=${{ matrix.buildType }} --preset ci -DPROJECTS_WARNINGS_AS_ERRORS=$PROJ_WAE -DPROJECTS_COVERAGE=ON
- name: Build
if: (steps.configure.conclusion == 'success')
id: build
working-directory: ${{runner.workspace}}/build-${{ matrix.buildType }}
shell: bash
run: |
cmake --build . --parallel 2 --config ${{ matrix.buildType }}
- name: Build coverage report
if: (steps.build.conclusion == 'success')
working-directory: ${{runner.workspace}}/build-${{ matrix.buildType }}
shell: bash
run: |
cmake --build . --target ShaderWriterCoverage --config ${{ matrix.buildType }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ${{ github.workspace }}/doc/ShaderWriterCoverage.xml
- name: Prepare success package
if: (github.event_name == 'push') && (steps.build.conclusion == 'success')
working-directory: ${{runner.workspace}}/build-${{ matrix.buildType }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
/out
/setup
/doc/coverage
/doc/ShaderWriterCoverage
/doc/ShaderWriterCoverage.xml
/doc/x86
/doc/x64
/vcpkg_installed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ And the following SPIR-V 1.6 listing:
```
; Magic: 0x07230203
; Version: 0x00010600
; Generator: 0x00210271
; Generator: 0x00210280
; Bound: 17
; Schema: 0
Expand Down
68 changes: 59 additions & 9 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,19 +46,69 @@ set_target_properties( TestCommon
FOLDER "Tests"
)

if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_LIB_FILES
sdw::test::Common
)
endif ()

include( OpenCppCoverage )

if(OpenCppCoverage_FOUND)
function(MyOpenCppCoverage_add_target target)
cmake_parse_arguments(PARSE_ARGV 1 ARG "" "WORKING_DIRECTORY" "SOURCES;MODULES;OCC_ARGS;ARGS")
if(ARG_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Invalid argument(s): ${ARG_UNPARSED_ARGUMENTS}")
endif()

get_property(counter GLOBAL PROPERTY OpenCppCoverage_COUNTER)
if(NOT counter)
set(counter 1)
else()
math(EXPR counter "${counter} + 1")
endif()
set(outputFile ${CMAKE_CURRENT_BINARY_DIR}/OpenCppCoverage/cov-${counter}-${target}.bin)
set_property(GLOBAL PROPERTY OpenCppCoverage_COUNTER "${counter}")
set_property(GLOBAL APPEND PROPERTY OpenCppCoverage_SOURCES "${outputFile}")

if(NOT ARG_WORKING_DIRECTORY)
set(ARG_WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
if(NOT ARG_SOURCES)
file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} ARG_SOURCES)
endif()
if(NOT ARG_MODULES)
file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR} ARG_MODULES)
endif()

set(args "${ARG_OCC_ARGS}")
foreach(el IN LISTS ARG_SOURCES)
list(APPEND args --sources ${el})
endforeach()
foreach(el IN LISTS ARG_MODULES)
list(APPEND args --modules ${el})
endforeach()
file( TO_NATIVE_PATH "${args}" args )
add_custom_command(TARGET ${target}
POST_BUILD
COMMENT "Creating coverage for ${target}"
COMMAND ${OpenCppCoverage_BINARY}
--working_dir $<TARGET_FILE_DIR:${target}>
--export_type binary:${outputFile}
--cover_children
--quiet
${args}
-- $<TARGET_FILE:${target}> ${ARG_ARGS}
VERBATIM
)
endfunction()
endif ()

add_subdirectory( ShaderAST )
add_subdirectory( ShaderWriter )

if ( PROJECTS_COVERAGE )
OpenCppCoverage_add_merge_target( ShaderWriterCoverage
${PROJECTS_DOCUMENTATION_OUTPUT_DIR}/${TARGET_NAME}Coverage
FORMAT html )
if ( PROJECTS_COVERAGE_HTML_RESULTS )
OpenCppCoverage_add_merge_target( ShaderWriterCoverage
${PROJECTS_DOCUMENTATION_OUTPUT_DIR}/ShaderWriterCoverage
FORMAT html )
else ()
OpenCppCoverage_add_merge_target( ShaderWriterCoverage
${PROJECTS_DOCUMENTATION_OUTPUT_DIR}/ShaderWriterCoverage.xml
FORMAT cobertura )
endif ()
endif ()
35 changes: 11 additions & 24 deletions test/ShaderAST/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,6 @@ file( GLOB TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Test*.cpp )

foreach ( TEST_FILE ${TEST_FILES} )
get_filename_component( TEST_NAME ${TEST_FILE} NAME_WE )
if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_SRC_FILES
${PROJECTS_COVERAGE_SRC_FILES}
${TEST_FILE}
)
set( PROJECTS_COVERAGE_TEST_NAMES
${PROJECTS_COVERAGE_TEST_NAMES}
${TEST_NAME}
)
endif ()
add_executable( ${TEST_NAME}
$<TARGET_OBJECTS:TestCommon>
${TEST_FILE}
Expand All @@ -37,9 +27,17 @@ foreach ( TEST_FILE ${TEST_FILES} )
)

if ( PROJECTS_COVERAGE )
OpenCppCoverage_add_target( ${TEST_NAME}
MODULES $<TARGET_FILE_NAME:ShaderAST>
SOURCES ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/source
MyOpenCppCoverage_add_target( ${TEST_NAME}
MODULES
$<TARGET_FILE_NAME:ShaderAST>
$<TARGET_FILE_NAME:ShaderWriter>
$<TARGET_FILE_NAME:CompilerGlsl>
$<TARGET_FILE_NAME:CompilerHlsl>
$<TARGET_FILE_NAME:CompilerSpirV>
$<TARGET_FILE_NAME:GlslCommon>
SOURCES
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/source
)
endif ()
endif ()
Expand All @@ -52,14 +50,3 @@ foreach ( TEST_FILE ${TEST_FILES} )
COMMAND ${TEST_NAME}
)
endforeach ()

if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_SRC_FILES
${PROJECTS_COVERAGE_SRC_FILES}
PARENT_SCOPE
)
set( PROJECTS_COVERAGE_TEST_NAMES
${PROJECTS_COVERAGE_TEST_NAMES}
PARENT_SCOPE
)
endif ()
126 changes: 60 additions & 66 deletions test/ShaderWriter/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,40 +53,53 @@ target_link_libraries( TestWriterCommon
)
target_add_compilation_flags( TestWriterCommon )

if ( SDW_TESTS_ENABLE_VALIDATION )
set( CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "" Release )
set( CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "" Release )
find_package( OpenGL )
find_package( Vulkan )
if ( PROJECTS_COVERAGE )
target_compile_definitions( TestWriterCommon
PRIVATE
SDW_Test_SpirVAllDebugLevels=0
SDW_Test_Coverage=1
)
else ()
target_compile_definitions( TestWriterCommon
PRIVATE
SDW_Test_SpirVAllDebugLevels=1
SDW_Test_Coverage=0
)
if ( SDW_TESTS_ENABLE_VALIDATION )
set( CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "" Release )
set( CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "" Release )
find_package( OpenGL )
find_package( Vulkan )

if ( ( TARGET CompilerGlsl )
AND ( OpenGL_FOUND OR OPENGL_FOUND )
AND ( WIN32 ) )
if ( WIN32 )
target_link_libraries( TestWriterCommon PRIVATE OpenGL::GL )
else ()
find_package( X11 )
target_link_libraries( TestWriterCommon PRIVATE ${X11_X11_LIB} OpenGL::GLX OpenGL::OpenGL )
if ( ( TARGET CompilerGlsl )
AND ( OpenGL_FOUND OR OPENGL_FOUND )
AND ( WIN32 ) )
if ( WIN32 )
target_link_libraries( TestWriterCommon PRIVATE OpenGL::GL )
else ()
find_package( X11 )
target_link_libraries( TestWriterCommon PRIVATE ${X11_X11_LIB} OpenGL::GLX OpenGL::OpenGL )
endif ()
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasOpenGL=1 )
endif ()
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasOpenGL=1 )
endif ()

if ( ( TARGET CompilerSpirV )
AND ( Vulkan_FOUND OR VULKAN_FOUND ) )
target_include_directories( TestWriterCommon PRIVATE ${Vulkan_INCLUDE_DIR} )
target_link_libraries( TestWriterCommon PRIVATE ${Vulkan_LIBRARY} )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasVulkan=1 )
if ( SDW_BUILD_VULKAN_LAYER )
target_link_libraries( TestWriterCommon PRIVATE sdw::VulkanLayer )
if ( ( TARGET CompilerSpirV )
AND ( Vulkan_FOUND OR VULKAN_FOUND ) )
target_include_directories( TestWriterCommon PRIVATE ${Vulkan_INCLUDE_DIR} )
target_link_libraries( TestWriterCommon PRIVATE ${Vulkan_LIBRARY} )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasVulkan=1 )
if ( SDW_BUILD_VULKAN_LAYER )
target_link_libraries( TestWriterCommon PRIVATE sdw::VulkanLayer )
endif ()
endif ()
endif ()

if ( ( TARGET CompilerHlsl ) AND WIN32 )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasDirect3D11=1 )
find_package( DXC )
if ( DXC_FOUND )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasDXC=1 )
target_link_libraries( TestWriterCommon PRIVATE DXC::dxc )
if ( ( TARGET CompilerHlsl ) AND WIN32 )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasDirect3D11=1 )
find_package( DXC )
if ( DXC_FOUND )
target_compile_definitions( TestWriterCommon PRIVATE SDW_Test_HasDXC=1 )
target_link_libraries( TestWriterCommon PRIVATE DXC::dxc )
endif ()
endif ()
endif ()
endif ()
Expand All @@ -112,13 +125,6 @@ endif ()
set( TargetLinkLibraries
)

if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_LIB_FILES
${PROJECTS_COVERAGE_LIB_FILES}
sdw::test::WriterCommon
)
endif ()

if ( SDW_ALL_TESTS )
set( IMAGE_FORMATS
eRgba32f
Expand Down Expand Up @@ -146,7 +152,6 @@ if ( SDW_ALL_TESTS )
eR16u
eR8u
)

set( BO_TYPES
Int8
Int16
Expand Down Expand Up @@ -207,6 +212,13 @@ if ( SDW_ALL_TESTS )
DMat4x3
DMat4x4
)
elseif ( PROJECTS_COVERAGE )
set( IMAGE_FORMATS
eRgba32f
)
set( BO_TYPES
Vec4
)
else ()
set( IMAGE_FORMATS
eRgba32f
Expand All @@ -219,7 +231,6 @@ else ()
eRg32u
eR16u
)

set( BO_TYPES
Int8
UInt16
Expand All @@ -239,16 +250,6 @@ endif ()

function( SDW_AddTest TEST_FILE TEST_NAME NAME_SUFFIX ADDITIONAL_DEFINITIONS )
set( REAL_TEST_NAME ${TEST_NAME}${NAME_SUFFIX} )
if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_SRC_FILES
${PROJECTS_COVERAGE_SRC_FILES}
${TEST_FILE}
)
set( PROJECTS_COVERAGE_TEST_NAMES
${PROJECTS_COVERAGE_TEST_NAMES}
${REAL_TEST_NAME}
)
endif ()
add_executable( ${REAL_TEST_NAME}
$<TARGET_OBJECTS:TestCommon>
${TEST_FILE}
Expand Down Expand Up @@ -283,9 +284,17 @@ function( SDW_AddTest TEST_FILE TEST_NAME NAME_SUFFIX ADDITIONAL_DEFINITIONS )
)

if ( PROJECTS_COVERAGE )
OpenCppCoverage_add_target( ${REAL_TEST_NAME}
MODULES $<TARGET_FILE_NAME:ShaderAST> $<TARGET_FILE_NAME:ShaderWriter>
SOURCES ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/source
MyOpenCppCoverage_add_target( ${REAL_TEST_NAME}
MODULES
$<TARGET_FILE_NAME:ShaderAST>
$<TARGET_FILE_NAME:ShaderWriter>
$<TARGET_FILE_NAME:CompilerGlsl>
$<TARGET_FILE_NAME:CompilerHlsl>
$<TARGET_FILE_NAME:CompilerSpirV>
$<TARGET_FILE_NAME:GlslCommon>
SOURCES
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/source
)
endif ()
endif ()
Expand Down Expand Up @@ -328,18 +337,3 @@ foreach ( TEST_FILE ${TEST_FILES} )
SDW_AddTest( ${TEST_FILE} ${TEST_NAME} "" "" )
endif ()
endforeach ()

if ( PROJECTS_COVERAGE )
set( PROJECTS_COVERAGE_LIB_FILES
${PROJECTS_COVERAGE_LIB_FILES}
PARENT_SCOPE
)
set( PROJECTS_COVERAGE_SRC_FILES
${PROJECTS_COVERAGE_SRC_FILES}
PARENT_SCOPE
)
set( PROJECTS_COVERAGE_TEST_NAMES
${PROJECTS_COVERAGE_TEST_NAMES}
PARENT_SCOPE
)
endif ()
Loading

0 comments on commit 45cff7c

Please sign in to comment.