File: igc_find_protobuf.cmake

package info (click to toggle)
intel-graphics-compiler 1.0.12504.6-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 83,912 kB
  • sloc: cpp: 910,147; lisp: 202,655; ansic: 15,197; python: 4,025; yacc: 2,241; lex: 1,570; pascal: 244; sh: 104; makefile: 25
file content (213 lines) | stat: -rw-r--r-- 8,469 bytes parent folder | download | duplicates (3)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#=========================== begin_copyright_notice ============================
#
# Copyright (C) 2021 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
#============================ end_copyright_notice =============================

set(PROTOBUF_SRC_ROOT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/../../../protobuf")

if(NOT EXISTS ${PROTOBUF_SRC_ROOT_FOLDER})
  set(PROTOBUF_SRC_ROOT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/../../protobuf")
endif()

if(NOT EXISTS ${PROTOBUF_SRC_ROOT_FOLDER})
  set(PROTOBUF_SRC_ROOT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/../protobuf")
endif()


if(EXISTS ${PROTOBUF_SRC_ROOT_FOLDER}/cmake/protobuf-config.cmake)
  include(${PROTOBUF_SRC_ROOT_FOLDER}/cmake/protobuf-config.cmake)
endif()

if(NOT TARGET protobuf::libprotoc OR NOT TARGET protobuf::protoc)
  message(WARNING "Cannot find Protoc program or library for Protobuf, please visit https://github.com/protocolbuffers/protobuf/releases and install - disable of IGC Metrics")
  set(IGC_METRICS OFF)
else()
  set(IGC_METRICS ON)
  if(NOT COMMAND protobuf_generate_imm)
    message(STATUS "Adding PROTOBUF_GENERATE_CPP cmake function")
    function(protobuf_generate_imm)
      set(_options APPEND_PATH DESCRIPTORS)
        set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR)
      if(COMMAND target_sources)
        list(APPEND _singleargs TARGET)
      endif()
      set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS)

      cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")

      if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET)
        message(SEND_ERROR "Error: protobuf_generate called without any targets or source files")
        return()
      endif()

      if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET)
        message(SEND_ERROR "Error: protobuf_generate called without a target or output variable")
        return()
      endif()

      if(NOT protobuf_generate_LANGUAGE)
        set(protobuf_generate_LANGUAGE cpp)
      endif()
      string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE)

      if(NOT protobuf_generate_PROTOC_OUT_DIR)
        set(protobuf_generate_PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
      endif()

      if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp)
        set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:")
      endif()

      if(NOT protobuf_generate_GENERATE_EXTENSIONS)
        if(protobuf_generate_LANGUAGE STREQUAL cpp)
          set(protobuf_generate_GENERATE_EXTENSIONS .pb.h .pb.cc)
        elseif(protobuf_generate_LANGUAGE STREQUAL python)
          set(protobuf_generate_GENERATE_EXTENSIONS _pb2.py)
        else()
          message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS")
          return()
        endif()
      endif()

      if(protobuf_generate_TARGET)
        get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES)
        foreach(_file ${_source_list})
          if(_file MATCHES "proto$")
            list(APPEND protobuf_generate_PROTOS ${_file})
          endif()
        endforeach()
      endif()

      if(NOT protobuf_generate_PROTOS)
        message(SEND_ERROR "Error: protobuf_generate could not find any .proto files")
        return()
      endif()

      if(protobuf_generate_APPEND_PATH)
        # Create an include path for each file specified
        foreach(_file ${protobuf_generate_PROTOS})
          get_filename_component(_abs_file ${_file} ABSOLUTE)
          get_filename_component(_abs_path ${_abs_file} PATH)
          list(FIND _protobuf_include_path ${_abs_path} _contains_already)
          if(${_contains_already} EQUAL -1)
            list(APPEND _protobuf_include_path -I ${_abs_path})
          endif()
        endforeach()
      else()
        set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
      endif()

      foreach(DIR ${protobuf_generate_IMPORT_DIRS})
        get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
        list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
        if(${_contains_already} EQUAL -1)
          list(APPEND _protobuf_include_path -I ${ABS_PATH})
        endif()
      endforeach()

      set(_generated_srcs_all)
      foreach(_proto ${protobuf_generate_PROTOS})
        get_filename_component(_abs_file ${_proto} ABSOLUTE)
        get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
        get_filename_component(_basename ${_proto} NAME_WE)
        file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})

        set(_possible_rel_dir)
        if (NOT protobuf_generate_APPEND_PATH)
          set(_possible_rel_dir ${_rel_dir}/)
        endif()

        set(_generated_srcs)
        foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS})
          list(APPEND _generated_srcs "${protobuf_generate_PROTOC_OUT_DIR}/${_possible_rel_dir}${_basename}${_ext}")
        endforeach()

        if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp)
          set(_descriptor_file "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.desc")
          set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}")
          list(APPEND _generated_srcs ${_descriptor_file})
        endif()

        get_target_property(protobuf-comp protobuf::protoc IMPORTED_LOCATION_RELEASE)
        get_filename_component(WRK_DIR_PROTO "${_abs_file}" DIRECTORY)
        add_custom_command(
          OUTPUT ${_generated_srcs}
          COMMAND ${CMAKE_COMMAND}
            "-Dproto=${_proto}"
            "-Dprotobuf-comp=${protobuf-comp}"
            "-Dprotobuf_generate_LANGUAGE=${protobuf_generate_LANGUAGE}"
            "-Ddll_export_decl=${_dll_export_decl}"
            "-Dprotobuf_generate_PROTOC_OUT_DIR=${protobuf_generate_PROTOC_OUT_DIR}"
            "-Ddll_desc_out=${_dll_desc_out}"
            "-Dprotobuf_include_path=\"${_protobuf_include_path}\""
            "-Dabs_file=${_abs_file}"
            "-DWRK_DIR_PROTO=${WRK_DIR_PROTO}"
            -P "${IGC_BUILD__IGC_SRC_DIR}/cmake/igc_run_protobuf_protocol.cmake"
          DEPENDS ${protobuf-comp} "${IGC_BUILD__IGC_SRC_DIR}/cmake/igc_run_protobuf_protocol.cmake" ${IGC_METRICS_PROTO_SCHEMAS}
        )
      endforeach()

      set_source_files_properties(${_generated_srcs} PROPERTIES GENERATED TRUE)
      list(APPEND _generated_srcs_all ${_generated_srcs})
      if(protobuf_generate_OUT_VAR)
        set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE)
      endif()
      if(protobuf_generate_TARGET)
        target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs})
      endif()
    endfunction()

    function(PROTOBUF_GENERATE_IMM_CPP SRCS HDRS)
      cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN})

      set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}")
      if(NOT _proto_files)
        message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
        return()
      endif()

      if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
        set(_append_arg APPEND_PATH)
      endif()

      if(protobuf_generate_cpp_DESCRIPTORS)
        set(_descriptors DESCRIPTORS)
      endif()

      if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
        set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
      endif()

      if(DEFINED Protobuf_IMPORT_DIRS)
        set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
      endif()

      set(_outvar)
      protobuf_generate_imm(${_append_arg} ${_descriptors} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files})

      set(${SRCS})
      set(${HDRS})
      if(protobuf_generate_cpp_DESCRIPTORS)
        set(${protobuf_generate_cpp_DESCRIPTORS})
      endif()

      foreach(_file ${_outvar})
        if(_file MATCHES "cc$")
          list(APPEND ${SRCS} ${_file})
        elseif(_file MATCHES "desc$")
          list(APPEND ${protobuf_generate_cpp_DESCRIPTORS} ${_file})
        else()
          list(APPEND ${HDRS} ${_file})
        endif()
      endforeach()
      set(${SRCS} ${${SRCS}} PARENT_SCOPE)
      set(${HDRS} ${${HDRS}} PARENT_SCOPE)
      if(protobuf_generate_cpp_DESCRIPTORS)
        set(${protobuf_generate_cpp_DESCRIPTORS} "${${protobuf_generate_cpp_DESCRIPTORS}}" PARENT_SCOPE)
      endif()
    endfunction()
  endif()
endif()