CMAKE: moved GNA var setting to proper place; removed find_package when build python...
[platform/upstream/dldt.git] / inference-engine / cmake / cpplint.cmake
1 # Copyright (C) 2018-2019 Intel Corporation
2 # SPDX-License-Identifier: Apache-2.0
3 #
4
5 if(ENABLE_CPPLINT)
6     find_package(PythonInterp 2.7 EXACT)
7
8     if(NOT PYTHONINTERP_FOUND OR NOT PYTHON_VERSION_MAJOR EQUAL 2)
9         message(WARNING "Python 2.7 was not found (required for cpplint check)")
10         set(ENABLE_CPPLINT OFF)
11     endif()
12 endif()
13
14 if(ENABLE_CPPLINT)
15     add_custom_target(cpplint_all ALL)
16     set(CPPLINT_ALL_OUTPUT_FILES "" CACHE INTERNAL "All cpplint output files")
17 endif()
18
19 function(add_cpplint_target TARGET_NAME)
20     if(NOT ENABLE_CPPLINT)
21         return()
22     endif()
23
24     set(options "")
25     set(oneValueArgs "")
26     set(multiValueArgs "FOR_TARGETS" "FOR_SOURCES" "EXCLUDE_PATTERNS")
27     cmake_parse_arguments(CPPLINT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
28
29     foreach(target IN LISTS CPPLINT_FOR_TARGETS)
30         get_target_property(target_sources "${target}" SOURCES)
31         list(APPEND CPPLINT_FOR_SOURCES ${target_sources})
32     endforeach()
33     list(REMOVE_DUPLICATES CPPLINT_FOR_SOURCES)
34
35     set(all_output_files "")
36     foreach(source_file IN LISTS CPPLINT_FOR_SOURCES)
37         set(exclude FALSE)
38         foreach(pattern IN LISTS CPPLINT_EXCLUDE_PATTERNS)
39             if(source_file MATCHES "${pattern}")
40                 set(exclude ON)
41                 break()
42             endif()
43         endforeach()
44
45         if(exclude)
46             continue()
47         endif()
48
49         # ignore object libraries
50         if(NOT EXISTS "${source_file}")
51             continue()
52         endif()
53
54         file(RELATIVE_PATH source_file_relative "${CMAKE_CURRENT_SOURCE_DIR}" "${source_file}")
55         set(output_file "${CMAKE_CURRENT_BINARY_DIR}/cpplint/${source_file_relative}.cpplint")
56         string(REPLACE ".." "__" output_file "${output_file}")
57         get_filename_component(output_dir "${output_file}" DIRECTORY)
58         file(MAKE_DIRECTORY "${output_dir}")
59
60         add_custom_command(
61             OUTPUT
62                 "${output_file}"
63             COMMAND
64                 "${CMAKE_COMMAND}"
65                 -D "PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
66                 -D "CPPLINT_SCRIPT=${IE_MAIN_SOURCE_DIR}/scripts/cpplint.py"
67                 -D "INPUT_FILE=${source_file}"
68                 -D "OUTPUT_FILE=${output_file}"
69                 -D "WORKING_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}"
70                 -D "SKIP_RETURN_CODE=${ENABLE_CPPLINT_REPORT}"
71                 -P "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_run.cmake"
72             DEPENDS
73                 "${source_file}"
74                 "${IE_MAIN_SOURCE_DIR}/scripts/cpplint.py"
75                 "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_run.cmake"
76             COMMENT
77                 "[cpplint] ${source_file}"
78             VERBATIM)
79
80         list(APPEND all_output_files "${output_file}")
81     endforeach()
82
83     set(CPPLINT_ALL_OUTPUT_FILES
84         ${CPPLINT_ALL_OUTPUT_FILES} ${all_output_files}
85         CACHE INTERNAL
86         "All cpplint output files")
87
88     add_custom_target(${TARGET_NAME} ALL
89         DEPENDS ${all_output_files}
90         COMMENT "[cpplint] ${TARGET_NAME}")
91
92     if(CPPLINT_FOR_TARGETS)
93         foreach(target IN LISTS CPPLINT_FOR_TARGETS)
94             add_dependencies(${target} ${TARGET_NAME})
95         endforeach()
96     endif()
97
98     add_dependencies(cpplint_all ${TARGET_NAME})
99 endfunction()
100
101 function(add_cpplint_report_target)
102     if(NOT ENABLE_CPPLINT OR NOT ENABLE_CPPLINT_REPORT)
103         return()
104     endif()
105
106     set(cpplint_output_file "${CMAKE_BINARY_DIR}/cpplint/final_output.cpplint")
107     add_custom_command(
108         OUTPUT
109             "${cpplint_output_file}"
110         COMMAND
111             "${CMAKE_COMMAND}"
112             -D "FINAL_OUTPUT_FILE=${cpplint_output_file}"
113             -D "OUTPUT_FILES=${CPPLINT_ALL_OUTPUT_FILES}"
114             -P "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_merge.cmake"
115         DEPENDS
116             ${CPPLINT_ALL_OUTPUT_FILES}
117             "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_merge.cmake"
118         COMMENT
119             "[cpplint] Merge all output files"
120         VERBATIM)
121
122     set(cppcheck_output_file "${CMAKE_BINARY_DIR}/cpplint/cpplint-cppcheck-result.xml")
123     add_custom_command(
124         OUTPUT
125             "${cppcheck_output_file}"
126         COMMAND
127             "${CMAKE_COMMAND}"
128             -D "PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
129             -D "CONVERT_SCRIPT=${IE_MAIN_SOURCE_DIR}/scripts/cpplint_to_cppcheckxml.py"
130             -D "INPUT_FILE=${cpplint_output_file}"
131             -D "OUTPUT_FILE=${cppcheck_output_file}"
132             -P "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_to_cppcheck_xml.cmake"
133         DEPENDS
134             "${cpplint_output_file}"
135             "${IE_MAIN_SOURCE_DIR}/scripts/cpplint_to_cppcheckxml.py"
136             "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_to_cppcheck_xml.cmake"
137         COMMENT
138             "[cpplint] Convert to cppcheck XML format"
139         VERBATIM)
140
141     set(report_dir "${IE_MAIN_SOURCE_DIR}/report/cpplint")
142     set(html_output_file "${report_dir}/index.html")
143     add_custom_command(
144         OUTPUT
145             "${html_output_file}"
146         COMMAND
147             "${CMAKE_COMMAND}"
148             -D "PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}"
149             -D "CONVERT_SCRIPT=${IE_MAIN_SOURCE_DIR}/scripts/cppcheck-htmlreport.py"
150             -D "INPUT_FILE=${cppcheck_output_file}"
151             -D "REPORT_DIR=${report_dir}"
152             -D "SOURCE_DIR=${IE_MAIN_SOURCE_DIR}"
153             -D "TITLE=${CMAKE_PROJECT_NAME}"
154             -P "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_html.cmake"
155         DEPENDS
156             "${cppcheck_output_file}"
157             "${IE_MAIN_SOURCE_DIR}/scripts/cppcheck-htmlreport.py"
158             "${IE_MAIN_SOURCE_DIR}/cmake/cpplint_html.cmake"
159         COMMENT
160             "[cpplint] Generate HTML report"
161         VERBATIM)
162
163     add_custom_target(cpplint_report
164         DEPENDS "${html_output_file}"
165         COMMENT "[cpplint] Generate report")
166 endfunction()