File: setup_clang_format.cmake

package info (click to toggle)
stdgpu-contrib 1.3.0%2Bgit20220507.32e0517-3
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid, trixie
  • size: 2,524 kB
  • sloc: cpp: 7,818; pascal: 1,893; xml: 214; sh: 181; makefile: 16
file content (53 lines) | stat: -rw-r--r-- 2,373 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function(stdgpu_setup_clang_format)
    if(STDGPU_ALLOW_NEWER_CLANG_FORMAT_VERSIONS)
        find_package(ClangFormat 10)
    else()
        find_package(ClangFormat 10 EXACT)
    endif()

    if (NOT ClangFormat_FOUND)
        return()
    endif()

    foreach(FILE_EXT IN ITEMS ".h" ".cuh" ".cpp" ".cu" ".hip" ".inc")
        foreach(FILE_DIR IN ITEMS "src/stdgpu" "examples" "benchmark/stdgpu" "test/stdgpu" "test/install_test")
            file(GLOB_RECURSE SOURCE_FILES_PART LIST_DIRECTORIES FALSE "${FILE_DIR}/*${FILE_EXT}")
            list(APPEND SOURCE_FILES ${SOURCE_FILES_PART})
        endforeach()
        # Collect remaining files in test
        file(GLOB SOURCE_FILES_PART LIST_DIRECTORIES FALSE "test/test_*${FILE_EXT}")
        list(APPEND SOURCE_FILES ${SOURCE_FILES_PART})
    endforeach()

    list(SORT SOURCE_FILES)

    foreach(FILE IN LISTS SOURCE_FILES)
        file(RELATIVE_PATH FILE_REL_PATH "${CMAKE_CURRENT_SOURCE_DIR}" "${FILE}")

        if(STDGPU_COMPILE_WARNING_AS_ERROR)
            set(STDGPU_CLANG_FORMAT_ERROR_FLAG "--Werror")
        endif()

        # Output file will not be generated by clang-format, so the command is always run
        set(DUMMY_CHECK_FILE "${CMAKE_CURRENT_BINARY_DIR}/${FILE_REL_PATH}.check")
        add_custom_command(OUTPUT "${DUMMY_CHECK_FILE}"
                           COMMAND ClangFormat::ClangFormat "--style=file" "--dry-run" ${STDGPU_CLANG_FORMAT_ERROR_FLAG} "${FILE}"
                           COMMENT "Checking code style of ${FILE_REL_PATH}"
                           VERBATIM)
        list(APPEND ALL_DUMMY_CHECK_FILES "${DUMMY_CHECK_FILE}")

        # Output file will not be generated by clang-format, so the command is always run
        set(DUMMY_FORMATTED_FILE "${CMAKE_CURRENT_BINARY_DIR}/${FILE_REL_PATH}.formatted")
        add_custom_command(OUTPUT "${DUMMY_FORMATTED_FILE}"
                           COMMAND ClangFormat::ClangFormat "--style=file" "-i" "${FILE}"
                           COMMENT "Applying code style for ${FILE_REL_PATH}"
                           VERBATIM)
        list(APPEND ALL_DUMMY_FORMATTED_FILES "${DUMMY_FORMATTED_FILE}")
    endforeach()

    add_custom_target(check_code_style
                      DEPENDS "${ALL_DUMMY_CHECK_FILES}")

    add_custom_target(apply_code_style
                      DEPENDS "${ALL_DUMMY_FORMATTED_FILES}")
endfunction()