proto.conf 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. # tag:tool-specific tag:proto
  2. PROTOC=${tool:"contrib/tools/protoc"}
  3. PROTOC_STYLEGUIDE_OUT=--cpp_styleguide_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE
  4. PROTOC_PLUGIN_STYLEGUIDE=--plugin=protoc-gen-cpp_styleguide=${tool:"contrib/tools/protoc/plugins/cpp_styleguide"}
  5. PROTOBUF_PATH=${ARCADIA_ROOT}/contrib/libs/protobuf/src
  6. USE_VANILLA_PROTOC=no
  7. PROTOC_TRANSITIVE_HEADERS=yes
  8. _PROTOC_FLAGS=
  9. # tag:proto
  10. PY_PROTOS_FOR=no
  11. BUILD_PROTO_AS_EVLOG=no
  12. # tag:proto
  13. PROTO_NAMESPACE=
  14. # tag:proto tag:python-specific
  15. GEN_PY_PROTOS=$YMAKE_PYTHON ${input:"build/scripts/gen_py_protos.py"}
  16. # tag:proto tag:cpp-specific
  17. PROTO_HEADER_EXTS=.pb.h
  18. CPP_PROTO_CMDLINE=
  19. CPP_PROTO_OPTS=
  20. CPP_PROTO_OUTS=
  21. CPP_PROTO_OUTS_SEM=
  22. CPP_PROTO_SUFFIXES=.pb.h .pb.cc
  23. CPP_PROTO_PLUGINS=
  24. # tag:proto tag:cpp-specific
  25. CPP_EV_OPTS=--plugin=protoc-gen-event2cpp=${tool:"tools/event2cpp"} --event2cpp_out=$ARCADIA_BUILD_ROOT -I=$ARCADIA_ROOT/library/cpp/eventlog
  26. CPP_EV_OUTS=
  27. CPP_EV_OUTS_SEM=
  28. # tag:proto tag:python-specific
  29. PY_PROTO_OPTS=
  30. PY_PROTO_OUTS=
  31. PY_PROTO_OUTS_INTERNAL=
  32. PY_PROTO_DEPS=
  33. PY_PROTO_SUFFIXES=_pb2.py
  34. PY_EVLOG_SUFFIXES=_ev_pb2.py
  35. # tag:proto tag:java-specific
  36. JAVA_PROTO_ARGS=
  37. # tag:proto tag:python-specific
  38. OPTIMIZE_PY_PROTOS_FLAG=no
  39. # tag:internal
  40. ### @usage: _ORDER_ADDINCL([BUILD ...] [SOURCE ...] Args...) # internal
  41. ###
  42. ### Order and filter ADDINCLs (Args - is intentionally omitted in ADDINCL macro)
  43. macro _ORDER_ADDINCL(BUILD[], SOURCE[], ARGS...) {
  44. ADDINCL($BUILD $SOURCE)
  45. }
  46. # tag:proto
  47. ### @usage: PROTO_ADDINCL([GLOBAL] [WITH_GEN] Path)
  48. ###
  49. ### This macro introduces proper ADDINCLs for .proto-files found in sources and
  50. ### .cpp/.h generated files, supplying them to appropriate commands and allowing
  51. ### proper dependency resolution at configure-time.
  52. ###
  53. ### Note: you normally shouldn't use this macro. ADDINCLs should be sent to user
  54. ### from dependency via PROTO_NAMESPACE macro
  55. macro PROTO_ADDINCL(GLOBAL?"GLOBAL":"", Path, WITH_GEN?"BUILD":"") {
  56. _ORDER_ADDINCL($WITH_GEN $GLOBAL FOR proto ${ARCADIA_BUILD_ROOT}/$Path SOURCE $GLOBAL FOR proto ${ARCADIA_ROOT}/$Path)
  57. ADDINCL($GLOBAL ${ARCADIA_BUILD_ROOT}/$Path)
  58. }
  59. # tag:proto
  60. ### @usage: PROTO_NAMESPACE([WITH_GEN] Namespace)
  61. ###
  62. ### Defines protobuf namespace (import/export path prefix) which should be used for imports and
  63. ### which defines output path for .proto generation.
  64. ###
  65. ### For proper importing and configure-time dependency management it sets ADDINCLs
  66. ### for both .cpp headers includes and .proto imports. If .proto expected to be used outside of the
  67. ### processing module use GLOBAL to send proper ADDINCLs to all (transitive) users. PEERDIR to
  68. ### PROTO_LIBRARY with PROTO_NAMESPACE() is enough at user side to correctly use the library.
  69. ### If generated .proto files are going to be used for building a module than use of WITH_GEN
  70. ### parameter will add appropriate dir from the build root for .proto files search.
  71. macro PROTO_NAMESPACE(GLOBAL?"GLOBAL":"", WITH_GEN?"WITH_GEN":"", Namespace) {
  72. SET(PROTO_NAMESPACE $Namespace)
  73. PROTO_ADDINCL(GLOBAL $WITH_GEN $Namespace)
  74. }
  75. # tag:proto
  76. ### @usage PROTOC_FATAL_WARNINGS()
  77. ###
  78. ### Treat protoc warnings as fatal errors that break the build, for example, unused imports
  79. ### Adds `--fatal_warnings` argument to protoc
  80. macro PROTOC_FATAL_WARNINGS() {
  81. SET_APPEND(_PROTOC_FLAGS --fatal_warnings)
  82. }
  83. # tag:proto tag:internal tag:python-specific
  84. ### @usage: OPTIMIZE_PY_PROTOS() # internal
  85. ###
  86. ### Enable Python proto optimization by embedding corresponding C++ code into binary.
  87. ### Python protobuf runtime will use C++ implementation instead of Python one if former is available.
  88. ### This is default mode for most PROTO_LIBRARY's and PY2_LIBRARY's, some system ones being exceptions.
  89. macro OPTIMIZE_PY_PROTOS() {
  90. SET(OPTIMIZE_PY_PROTOS_FLAG yes)
  91. }
  92. # tag:proto tag:python-specific
  93. ### @usage: NO_OPTIMIZE_PY_PROTOS()
  94. ###
  95. ### Disable Python proto optimization using embedding corresponding C++ code into binary.
  96. ### Python protobuf runtime will use C++ implementation instead of Python one if former is available.
  97. ### This is default mode only for some system libraries.
  98. macro NO_OPTIMIZE_PY_PROTOS() {
  99. SET(OPTIMIZE_PY_PROTOS_FLAG no)
  100. }
  101. # tag:proto tag:python-specific
  102. macro _PROTO_PLUGIN_ARGS_BASE(Name, Tool, OutParm...) {
  103. .CMD=--plugin=protoc-gen-${Name}=\${tool:"$Tool"} --${Name}_out=$ARCADIA_BUILD_ROOT/\$PROTO_NAMESPACE ${pre=--${Name}_opt=:OutParm}
  104. .SEM=IGNORED
  105. }
  106. # tag:proto tag:python-specific
  107. macro _ADD_PY_PROTO_OUT(Suf) {
  108. SET_APPEND(PY_PROTO_OUTS \${output;hide;noauto;norel;nopath;noext;suf=$Suf:File})
  109. SET_APPEND(PY_PROTO_OUTS_INTERNAL \${output;hide;noauto;norel;nopath;noext;suf=__int__$Suf:File} \${hide;kv:"ext_out_name_for_\${nopath;noext;suf=__int__$Suf:File} \${nopath;noext;suf=$Suf:File}"})
  110. # XXX fix variable expansion in plugins
  111. SET(PY_PROTO_SUFFIXES $PY_PROTO_SUFFIXES $Suf)
  112. }
  113. # tag:proto tag:python-specific
  114. ### @usage: PY_PROTO_PLUGIN(Name Ext Tool DEPS <Dependencies>)
  115. ###
  116. ### Define protoc plugin for python with given Name that emits extra output with provided Extension
  117. ### using Tool. Extra dependencies are passed via DEPS
  118. macro PY_PROTO_PLUGIN(NAME, EXT, TOOL, DEPS[]) {
  119. SET_APPEND(PY_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL))
  120. _ADD_PY_PROTO_OUT($EXT)
  121. # XXX fix variable expansion in plugins
  122. SET(PY_PROTO_DEPS $PY_PROTO_DEPS $DEPS)
  123. }
  124. # tag:proto tag:python-specific
  125. ### @usage: PY_PROTO_PLUGIN2(Name Ext1 Ext2 Tool DEPS <Dependencies>)
  126. ###
  127. ### Define protoc plugin for python with given Name that emits 2 extra outputs with provided Extensions
  128. ### using Tool. Extra dependencies are passed via DEPS
  129. macro PY_PROTO_PLUGIN2(NAME, EXT1, EXT2, TOOL, DEPS[]) {
  130. PY_PROTO_PLUGIN($NAME $EXT1 $TOOL DEPS $DEPS)
  131. _ADD_PY_PROTO_OUT($EXT2)
  132. }
  133. # tag:proto tag:java-specific
  134. macro _JAVA_PROTO_PLUGIN_ARGS_BASE(Name, Tool, OutParm...) {
  135. .CMD=--plugin=protoc-gen-${Name}=\${tool:"$Tool"} --${Name}_out=$ARCADIA_BUILD_ROOT/java_out
  136. }
  137. # tag:proto tag:java-specific
  138. ### @usage: JAVA_PROTO_PLUGIN(Name Tool DEPS <Dependencies>)
  139. ###
  140. ### Define protoc plugin for Java with given Name that emits extra outputs
  141. ### using Tool. Extra dependencies are passed via DEPS
  142. macro JAVA_PROTO_PLUGIN(NAME, TOOL, DEPS[]) {
  143. SET_APPEND(JAVA_PROTO_ARGS $_JAVA_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL))
  144. # XXX fix variable expansion in plugins
  145. SET(JAVA_PROTOBUF_PEERS $JAVA_PROTOBUF_PEERS $DEPS)
  146. }
  147. macro _ADD_SEM_PROP_IF_NON_EMPTY(Prop, Args...) {
  148. .SEM=${pre=&& set_target_property $Prop :Args}
  149. }
  150. # tag:proto tag:cpp-specific
  151. macro _ADD_CPP_PROTO_OUT(Suf) {
  152. .SEM=append_target_property PROTOC_EXTRA_OUTS $Suf ${output;hide;suf=.o:Suf} $_ADD_SEM_PROP_IF_NON_EMPTY(PROTO_NAMESPACE $PROTO_NAMESPACE)
  153. SET_APPEND(CPP_PROTO_OUTS \${output;hide;norel;nopath;noext;suf=$Suf:File})
  154. # XXX fix variable expansion in plugins
  155. SET(CPP_PROTO_SUFFIXES $CPP_PROTO_SUFFIXES $Suf)
  156. }
  157. # tag:proto tag:cpp-specific
  158. HAS_CPP_PROTOBUF_PEERS=no
  159. CPP_PROTOBUF_PEERS=
  160. # tag:proto tag:cpp-specific
  161. ### @usage: CPP_PROTO_PLUGIN0(Name Tool DEPS <Dependencies>)
  162. ###
  163. ### Define protoc plugin for C++ with given Name that emits code into regular outputs
  164. ### using Tool. Extra dependencies are passed via DEPS.
  165. macro CPP_PROTO_PLUGIN0(NAME, TOOL, DEPS[]) {
  166. .SEM=target_proto_plugin $NAME ${tool;rootrel:TOOL} ${output;hide;suf=.fake.o:NAME}
  167. SET_APPEND(CPP_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL))
  168. # XXX fix variable expansion in plugins
  169. ENABLE(HAS_CPP_PROTOBUF_PEERS)
  170. SET(CPP_PROTOBUF_PEERS $CPP_PROTOBUF_PEERS $DEPS)
  171. }
  172. # tag:proto tag:cpp-specific
  173. ### @usage: CPP_PROTO_PLUGIN(Name Tool Suf DEPS <Dependencies>)
  174. ###
  175. ### Define protoc plugin for C++ with given Name that emits code into 1 extra output
  176. ### using Tool. Extra dependencies are passed via DEPS.
  177. macro CPP_PROTO_PLUGIN(NAME, TOOL, SUF, DEPS[]) {
  178. CPP_PROTO_PLUGIN0($NAME $TOOL DEPS $DEPS)
  179. _ADD_CPP_PROTO_OUT($SUF)
  180. }
  181. # tag:proto tag:cpp-specific
  182. ### @usage: CPP_PROTO_PLUGIN2(Name Tool Suf1 Suf2 DEPS <Dependencies>)
  183. ###
  184. ### Define protoc plugin for C++ with given Name that emits code into 2 extra outputs
  185. ### using Tool. Extra dependencies are passed via DEPS.
  186. macro CPP_PROTO_PLUGIN2(NAME, TOOL, SUF1, SUF2, DEPS[]) {
  187. CPP_PROTO_PLUGIN($NAME $TOOL $SUF1 DEPS $DEPS)
  188. _ADD_CPP_PROTO_OUT($SUF2)
  189. SET_APPEND(CPP_PROTO_OUTS_SEM \${output;hide;norel;nopath;noext;suf=$SUF2:File})
  190. }
  191. # tag:proto
  192. ### @usage: USE_SKIFF() #wip, do not use
  193. ###
  194. ### Use mapreduce/yt/skiff_proto/plugin for C++
  195. macro USE_SKIFF() {
  196. # Move extra includes to INDUCED_DEPS macro in mapreduce/yt/skiff_proto/plugin/ya.make
  197. CPP_PROTO_PLUGIN0(skiff mapreduce/yt/skiff_proto/plugin DEPS mapreduce/yt/skiff_proto/lib)
  198. }
  199. # tag:go-specific
  200. _GO_COMMON_GOOGLE_APIS = \
  201. vendor/google.golang.org/genproto/googleapis/api/annotations \
  202. vendor/google.golang.org/genproto/googleapis/api/configchange \
  203. vendor/google.golang.org/genproto/googleapis/api/distribution \
  204. vendor/google.golang.org/genproto/googleapis/api/expr/v1alpha1 \
  205. vendor/google.golang.org/genproto/googleapis/api/expr/v1beta1 \
  206. vendor/google.golang.org/genproto/googleapis/api/httpbody \
  207. vendor/google.golang.org/genproto/googleapis/api/label \
  208. vendor/google.golang.org/genproto/googleapis/api/metric \
  209. vendor/google.golang.org/genproto/googleapis/api/monitoredres \
  210. vendor/google.golang.org/genproto/googleapis/api/serviceconfig \
  211. vendor/google.golang.org/genproto/googleapis/api/servicecontrol/v1 \
  212. vendor/google.golang.org/genproto/googleapis/api/servicemanagement/v1 \
  213. vendor/google.golang.org/genproto/googleapis/iam/admin/v1 \
  214. vendor/google.golang.org/genproto/googleapis/iam/credentials/v1 \
  215. vendor/google.golang.org/genproto/googleapis/iam/v1 \
  216. vendor/google.golang.org/genproto/googleapis/iam/v1/logging \
  217. vendor/google.golang.org/genproto/googleapis/logging/type \
  218. vendor/google.golang.org/genproto/googleapis/logging/v2 \
  219. vendor/google.golang.org/genproto/googleapis/rpc/code \
  220. vendor/google.golang.org/genproto/googleapis/rpc/errdetails \
  221. vendor/google.golang.org/genproto/googleapis/rpc/status \
  222. vendor/google.golang.org/genproto/googleapis/type/calendarperiod \
  223. vendor/google.golang.org/genproto/googleapis/type/color \
  224. vendor/google.golang.org/genproto/googleapis/type/date \
  225. vendor/google.golang.org/genproto/googleapis/type/dayofweek \
  226. vendor/google.golang.org/genproto/googleapis/type/expr \
  227. vendor/google.golang.org/genproto/googleapis/type/fraction \
  228. vendor/google.golang.org/genproto/googleapis/type/latlng \
  229. vendor/google.golang.org/genproto/googleapis/type/money \
  230. vendor/google.golang.org/genproto/googleapis/type/postaladdress \
  231. vendor/google.golang.org/genproto/googleapis/type/quaternion \
  232. vendor/google.golang.org/genproto/googleapis/type/timeofday
  233. # tag:go-specific
  234. _COMMON_GOOGLE_APIS=None
  235. # tag:go-specific
  236. ### @usage: USE_COMMON_GOOGLE_APIS([apis...])
  237. ###
  238. ### Use common-google-apis library set. Pass optional apis list to be used or use them all.
  239. ### This macro is properly handled for all languages including Go, where apis come in
  240. ## pregenerated form. In other languages apis are generated from sources in Arcadia.
  241. macro USE_COMMON_GOOGLE_APIS(APIS...) {
  242. SET(_COMMON_GOOGLE_APIS ${pre=vendor/google.golang.org/genproto/googleapis/:APIS})
  243. }
  244. # tag:go-specific tag:proto
  245. GO_PROTO_GEN_PLUGINS=
  246. GO_PROTO_OPTS=
  247. GO_PROTO_OUTS=
  248. GO_PROTO_GRPC_OPTS=
  249. GO_PROTO_GRPC_OUTS=
  250. GO_PROTO_V2=no
  251. _GO_PROTO_CHECK_OUTPUT=
  252. # tag:go-specific tag:proto
  253. GO_PROTOBUF_IMPORTS=\
  254. ${GOSTD}/sync \
  255. ${GOSTD}/reflect \
  256. ${GOSTD}/fmt \
  257. ${GOSTD}/math \
  258. vendor/github.com/golang/protobuf/proto \
  259. vendor/google.golang.org/protobuf/types/descriptorpb \
  260. vendor/google.golang.org/protobuf/runtime/protoimpl \
  261. vendor/google.golang.org/protobuf/runtime/protoiface \
  262. vendor/google.golang.org/protobuf/reflect/protoreflect
  263. # tag:go-specific tag:proto
  264. GO_PROTOBUF_WELLKNOWN_TYPES=\
  265. vendor/google.golang.org/protobuf/types/known/anypb \
  266. vendor/google.golang.org/protobuf/types/known/apipb \
  267. vendor/google.golang.org/protobuf/types/known/durationpb \
  268. vendor/google.golang.org/protobuf/types/known/emptypb \
  269. vendor/google.golang.org/protobuf/types/known/fieldmaskpb \
  270. vendor/google.golang.org/protobuf/types/known/sourcecontextpb \
  271. vendor/google.golang.org/protobuf/types/known/structpb \
  272. vendor/google.golang.org/protobuf/types/known/timestamppb \
  273. vendor/google.golang.org/protobuf/types/known/typepb \
  274. vendor/google.golang.org/protobuf/types/known/wrapperspb
  275. # tag:go-specific tag:proto
  276. ### @usage: GO_PROTO_PLUGIN(Name Ext Tool [DEPS dependencies...])
  277. ###
  278. ### Define protoc plugin for GO with given Name that emits extra output with provided extension
  279. ### Ext using Tool. Extra dependencies are passed via DEPS.
  280. macro GO_PROTO_PLUGIN(NAME, EXT, TOOL, DEPS[]) {
  281. SET_APPEND(GO_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL))
  282. SET_APPEND(GO_PROTO_OUTS \${output;hide;noauto;norel;nopath;noext;suf=$EXT:File})
  283. PEERDIR(${DEPS})
  284. }
  285. # tag:go-specific tag:proto
  286. GO_PROTO_CMDLINE=${cwd;rootdir;input:File} $YMAKE_PYTHON3 ${input:"build/scripts/go_proto_wrapper.py"} --arcadia-prefix $GO_ARCADIA_PROJECT_PREFIX --contrib-prefix $GO_CONTRIB_PROJECT_PREFIX --namespace ./$PROTO_NAMESPACE $_GO_PROTO_CHECK_OUTPUT --proto ${input;rootrel:File} -- $PROTOC -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH $_PROTOC_FLAGS
  287. # tag:go-specific tag:proto
  288. macro _GO_PROTO_CMD_IMPL(File, OPTS...) {
  289. .CMD=$GO_PROTO_CMDLINE $OPTS ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
  290. .PEERDIR=${GO_PROTOBUF_IMPORTS} ${GO_PROTOBUF_WELLKNOWN_TYPES}
  291. .ADDINCL=FOR proto contrib/libs/protobuf/src
  292. }
  293. # tag:go-specific tag:proto
  294. macro _GO_PROTO_CMD(File) {
  295. .CMD=$_GO_PROTO_CMD_IMPL($File $GO_PROTO_OPTS $GO_PROTO_OUTS)
  296. }
  297. # tag:proto
  298. ### @usage: YP_PROTO_YSON(Files... OUT_OPTS Opts...)
  299. ###
  300. ### Generate .yson.go from .proto using yp/go/yson/internal/proto-yson-gen/cmd/proto-yson-gen
  301. macro YP_PROTO_YSON(OUT_OPTS[], Files...) {
  302. .CMD=${cwd:BINDIR} $PROTOC --plugin=protoc-gen-custom=${tool:"yp/go/yson/internal/proto-yson-gen/cmd/proto-yson-gen"} -I=${ARCADIA_ROOT}/${PROTO_NAMESPACE} ${pre=-I=:_PROTO__INCLUDE} -I=${ARCADIA_ROOT} --custom_out="$OUT_OPTS paths=base_name:." --custom_opt="goroot=${GO_TOOLS_ROOT}" $_PROTOC_FLAGS ${input:Files} ${output;hide;noauto;nopath;noext;suf=.yson.go:Files}
  303. .ADDINCL=FOR proto ${ARCADIA_ROOT}/${MODDIR} FOR proto ${ARCADIA_ROOT}/${GO_TEST_IMPORT_PATH} FOR proto yt ${ARCADIA_BUILD_ROOT}/yt FOR proto contrib/libs/protobuf/src
  304. .PEERDIR=$GOSTD/strings $GOSTD/fmt $GOSTD/errors $GOSTD/encoding/json library/go/core/xerrors yt/go/yson yt/go/yterrors yp/go/yson/ytypes contrib/libs/protobuf
  305. }
  306. _SEM_CPP_PROTO_CMD=target_proto_messages PRIVATE ${input:File} $CPP_PROTO_OUTS_SEM ${output;hide;suf=${OBJ_SUF}.pb.o:File} ${hide;tool:"contrib/tools/protoc/bin"} ${hide;tool:"contrib/tools/protoc/plugins/cpp_styleguide"} \
  307. && set_global_flags COMMON_PROTOC_FLAGS \
  308. && target_proto_outs --cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $PROTOC_STYLEGUIDE_OUT \
  309. && target_proto_addincls ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH
  310. # tag:proto
  311. macro _CPP_PROTO_CMD(File) {
  312. .CMD=$CPP_PROTO_CMDLINE $CPP_PROTO_OPTS $CPP_PROTO_OUTS ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
  313. .SEM=$_SEM_CPP_PROTO_CMD
  314. .PEERDIR=contrib/libs/protobuf
  315. }
  316. # tag:proto
  317. macro _CPP_VANILLA_PROTO_CMD(File) {
  318. .CMD=$CPP_PROTO_CMDLINE $CPP_PROTO_OPTS $CPP_PROTO_OUTS ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
  319. .PEERDIR=contrib/libs/protobuf_std
  320. }
  321. _SEM_CPP_EV_CMD=target_ev_messages PRIVATE ${input:File} $CPP_EV_OUTS_SEM ${output;hide;suf=${OBJ_SUF}.pb.o:File} ${hide;tool:"tools/event2cpp/bin"} ${hide;tool:"contrib/tools/protoc/bin"} ${hide;tool:"contrib/tools/protoc/plugins/cpp_styleguide"} \
  322. && set_global_flags COMMON_PROTOC_FLAGS \
  323. && target_proto_outs --cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $PROTOC_STYLEGUIDE_OUT --event2cpp_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE \
  324. && target_proto_addincls ./$PROTO_NAMESPACE $ARCADIA_ROOT/$PROTO_NAMESPACE ${_PROTO__INCLUDE} $ARCADIA_BUILD_ROOT $PROTOBUF_PATH $ARCADIA_ROOT/library/cpp/eventlog
  325. # tag:proto
  326. macro _CPP_EVLOG_CMD(File) {
  327. .CMD=$CPP_PROTO_CMDLINE $CPP_EV_OPTS $CPP_EV_OUTS ${kv;hide:"p EV"} ${kv;hide:"pc yellow"}
  328. .SEM=$_SEM_CPP_EV_CMD
  329. .PEERDIR=library/cpp/eventlog contrib/libs/protobuf
  330. }
  331. # tag:proto
  332. macro _CPP_PROTO_EVLOG_CMD(File) {
  333. # process .proto as .ev
  334. .CMD=$CPP_PROTO_CMDLINE $CPP_EV_OPTS $CPP_PROTO_OUTS ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
  335. .PEERDIR=library/cpp/eventlog contrib/libs/protobuf
  336. }
  337. # tag:proto
  338. macro _CPP_CFGPROTO_CMD(File) {
  339. # keep extension in output just as in EV: this is hard-coded behaviour of protoc for non-.proto extensions
  340. .CMD=$CPP_PROTO_CMDLINE --plugin=protoc-gen-config=${tool:"library/cpp/proto_config/plugin"} --config_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $CPP_EV_OUTS ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
  341. .PEERDIR=library/cpp/proto_config/codegen library/cpp/proto_config/protos contrib/libs/protobuf
  342. }
  343. # tag:proto
  344. PY_PROTO_MYPY_ENABLED=yes
  345. PY_PROTO_MYPY_PLUGIN_BASE=--plugin=protoc-gen-mypy=${tool:"contrib/python/mypy-protobuf/bin/protoc-gen-mypy"} --mypy_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE
  346. # tag:proto tag:python-specific
  347. PY_PROTO_MYPY_SUFFIX=
  348. PY_PROTO_MYPY_PLUGIN=
  349. PY_PROTO_MYPY_PLUGIN_INTERNAL=
  350. # tag:proto tag:python-specific
  351. macro NO_MYPY() {
  352. DISABLE(PY_PROTO_MYPY_ENABLED)
  353. }
  354. # tag:proto tag:python-specific
  355. macro _PY_PROTO_CMD_BASE(File, Suf, Args...) {
  356. .CMD=$PROTOC -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH --python_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $_PROTOC_FLAGS ${input;rootrel:File} ${output;hide;noauto;norel;nopath;noext;suf=$Suf:File} ${kv;hide:"p PB"} ${kv;hide:"pc yellow"} $Args
  357. }
  358. # tag:proto tag:python-specific
  359. macro _PY_PROTO_CMD(File) {
  360. .CMD=${cwd;rootdir;input:File} $_PY_PROTO_CMD_BASE($File _pb2.py $PY_PROTO_OPTS $PY_PROTO_OUTS $PY_PROTO_MYPY_PLUGIN)
  361. }
  362. # tag:proto tag:python-specific
  363. macro _PY_PROTO_CMD_INTERNAL(File) {
  364. .CMD=${cwd;rootdir;input:File} $GEN_PY_PROTOS --suffixes $PY_PROTO_SUFFIXES $PY_PROTO_MYPY_SUFFIX -- $_PY_PROTO_CMD_BASE($File __int___pb2.py $PY_PROTO_OPTS $PY_PROTO_OUTS_INTERNAL ${hide;kv:"ext_out_name_for_${nopath;noext;suf=__int___pb2.py:File} ${nopath;noext;suf=_pb2.py:File}"} $PY_PROTO_MYPY_PLUGIN_INTERNAL)
  365. }
  366. # tag:proto tag:java-specific
  367. JAVA_PROTO_RUNTIME=
  368. # tag:proto tag:java-specific
  369. ### @usage: USE_JAVALITE()
  370. ### Use protobuf-javalite for Java
  371. macro USE_JAVALITE() {
  372. SET(JAVA_PROTO_RUNTIME javalite)
  373. }
  374. # tag:proto tag:java-specific
  375. JAVA_PROTO_RUNTIME_VERSION = 3.21.12
  376. JAVA_PROTO_COMMON_VERSION = 1.12.0
  377. KOTLIN_PROTO=no
  378. KOTLIN_PROTO_PEERS=
  379. when ($JAVA_PROTO_RUNTIME == "javalite") {
  380. _JAVA_PROTO_LITE_ARG=lite:
  381. JAVA_PROTOBUF_PEERS=contrib/java/com/google/protobuf/protobuf-javalite/${JAVA_PROTO_RUNTIME_VERSION} ${KOTLIN_PROTO_PEERS}
  382. JAVA_GRPC_STUB=contrib/java/io/grpc/grpc-stub/1.43.2
  383. JAVA_GRPC_PROTOBUF=contrib/java/io/grpc/grpc-protobuf/1.43.2
  384. }
  385. otherwise {
  386. _JAVA_PROTO_LITE_ARG=
  387. JAVA_PROTOBUF_PEERS=contrib/java/com/google/protobuf/protobuf-java/${JAVA_PROTO_RUNTIME_VERSION} ${KOTLIN_PROTO_PEERS}
  388. JAVA_GRPC_STUB=contrib/java/io/grpc/grpc-stub/1.43.2
  389. JAVA_GRPC_PROTOBUF=contrib/java/io/grpc/grpc-protobuf/1.43.2
  390. }
  391. KOTLIN_PROTO_FLAGS=
  392. # tag:proto tag:java-specific
  393. macro _JAVA_PROTO_CMD(File) {
  394. .CMD=${cwd;rootdir;input:File} $YMAKE_PYTHON ${input:"build/scripts/tared_protoc.py"} --tar-output ${output;norel;nopath;noext;suf=.jsrc:File} --protoc-out-dir $ARCADIA_BUILD_ROOT/java_out $PROTOC -I=./$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_ROOT --java_out=${_JAVA_PROTO_LITE_ARG}$ARCADIA_BUILD_ROOT/java_out ${KOTLIN_PROTO_FLAGS} $_PROTOC_FLAGS ${input;rootrel:File} ${kv;hide:"p PB"} ${kv;hide:"pc yellow"} $JAVA_PROTO_ARGS
  395. .SEM=proto_files ${input;rootrel:File} ${hide;output:File.jsrc}
  396. }
  397. # tag:proto tag:perl-specific tag:deprecated
  398. ### @usage: XS_PROTO(InputProto Dir Outputs...) # deprecated
  399. ###
  400. ### Generate Perl code from protobuf.
  401. ### In order to use this macro one should predict all outputs protoc will emit from input_proto file and enlist those as outputs.
  402. macro XS_PROTO(File, Dir, Outputs...) {
  403. .CMD=$PROTOC -I=${ARCADIA_ROOT}/${Dir} ${pre=-I=:_PROTO__INCLUDE} -I=${ARCADIA_ROOT} -I=${PROTOBUF_PATH} --perlxs_out=${BINDIR} $_PROTOC_FLAGS ${input:File} ${hide;output:Outputs} ${induced_deps=h+cpp;hide;nopath;noext;suf=.pb.h:File}
  404. PEERDIR(${Dir})
  405. ADDINCL(${ARCADIA_BUILD_ROOT}/${Dir})
  406. }
  407. # tag:proto tag:fbs
  408. ### @usage: PROTO2FBS(InputProto)
  409. ###
  410. ### Produce flatbuf schema out of protobuf description.
  411. macro PROTO2FBS(File) {
  412. .CMD=${cwd:BINDIR} ${tool:"contrib/tools/flatc"} -I . -I ${ARCADIA_ROOT} --proto ${input:File} ${output;hide;norel;noext:File.fbs} ${kv;hide:"p FBS"} ${kv;hide:"pc yellow"} && $MOVE_FILE ${BINDIR}/${nopath;noext:File.fbs} ${output;norel;noext:File.fbs}
  413. }
  414. # tag:proto tag:python-specific
  415. when ($PY_PROTOS_FOR == "yes") {
  416. PEERDIR+=contrib/libs/protobuf/python
  417. }
  418. # tag:python-specific
  419. macro _PY_EVLOG_CMD_BASE(File, Suf, Args...) {
  420. .CMD=$_PY_PROTO_CMD_BASE($File $Suf $Args)
  421. .PEERDIR=library/cpp/eventlog/proto
  422. }
  423. # tag:python-specific tag:proto
  424. macro _PY_EVLOG_CMD(File) {
  425. .CMD=${cwd;rootdir;input:File} $_PY_EVLOG_CMD_BASE($File _ev_pb2.py)
  426. }
  427. # tag:python-specific tag:proto
  428. macro _PY_EVLOG_CMD_INTERNAL(File) {
  429. .CMD=${cwd;rootdir;input:File} $GEN_PY_PROTOS --suffixes $PY_EVLOG_SUFFIXES -- $_PY_EVLOG_CMD_BASE($File __int___ev_pb2.py ${hide;kv:"ext_out_name_for_${nopath;noext;suf=__int___ev_pb2.py:File} ${nopath;noext;suf=_ev_pb2.py:File}"})
  430. }
  431. # tag:java-specific tag:proto
  432. macro _JAVA_EVLOG_CMD(File) {
  433. .CMD=$COPY_CMD ${input:File} ${output;nopath;noext;norel;suf=_ev.proto:File} ${kv;hide:"p EV"} ${kv;hide:"pc yellow"}
  434. .PEERDIR=library/cpp/eventlog/proto
  435. }
  436. # tag:proto tag:grpc
  437. _GRPC_ENABLED=no
  438. # tag:proto tag:grpc
  439. ### @usage: GRPC()
  440. ###
  441. ### Emit GRPC code for all .proto files in a PROTO_LIBRARY.
  442. ### This works for all available PROTO_LIBRARY versions (C++, Python 2.x, Python 3.x, Java and Go).
  443. macro GRPC() {
  444. ENABLE(_GRPC_ENABLED)
  445. # C++
  446. CPP_PROTO_PLUGIN2(grpc_cpp contrib/tools/protoc/plugins/grpc_cpp .grpc.pb.cc .grpc.pb.h DEPS contrib/libs/grpc)
  447. # Python
  448. PY_PROTO_PLUGIN(grpc_py _pb2_grpc.py contrib/tools/protoc/plugins/grpc_python DEPS contrib/python/grpcio)
  449. # Java
  450. JAVA_PROTO_PLUGIN(grpc_java contrib/tools/protoc/plugins/grpc_java DEPS $JAVA_GRPC_STUB $JAVA_GRPC_PROTOBUF)
  451. SET_APPEND(JAVA_PROTOBUF_PEERS contrib/java/javax/annotation/javax.annotation-api/1.3.1)
  452. }
  453. macro GO_PROTO_USE_V2() {
  454. ENABLE(GO_PROTO_V2)
  455. }
  456. # tag:proto
  457. ### @usage: RESOLVE_PROTO()
  458. ###
  459. ### Enable include resolving within UNIONs and let system .proto being resolved
  460. ### among .proto/.gztproto imports
  461. ###
  462. ### Note: it is currently impossible to enable resolving only for .proto, so resolving is enabled for all supported files
  463. ### also we only add ADDINCL for stock protobuf. So use this macro with care: it may cause resolving problems those are
  464. ### to be addressed by either ADDINCLs or marking them as TEXT. Please contact devtools for details.
  465. macro RESOLVE_PROTO() {
  466. SET(DONT_RESOLVE_INCLUDES no)
  467. ADDINCL(FOR proto $PROTOBUF_PATH)
  468. }
  469. # tag:python-specific tag:proto tag:deprecated
  470. ### @usage GENERATE_PY_PROTOS(ProtoFiles...) # deprecated
  471. ###
  472. ### Generate python bindings for protobuf files.
  473. ### Macro is obsolete and not recommended for use!
  474. macro GENERATE_PY_PROTOS(FILES...) {
  475. foreach (FILE : $FILES) {
  476. _PY_PROTO_CMD($FILE)
  477. }
  478. }
  479. # tag:python-specific tag:proto
  480. macro _GENERATE_PY_PROTOS_INTERNAL(FILES...) {
  481. foreach (FILE : $FILES) {
  482. _PY_PROTO_CMD_INTERNAL($FILE)
  483. }
  484. }
  485. # tag:python-specific
  486. macro _GENERATE_PY_EVS_INTERNAL(FILES...) {
  487. foreach (FILE : $FILES) {
  488. _PY_EVLOG_CMD_INTERNAL($FILE)
  489. }
  490. }
  491. ### @usage: LIST_PROTO([TO list.proto] Files...) # deprecated
  492. ###
  493. ### Create list of .proto files in a list-file (should be .proto, files.proto by default)
  494. ### with original .proto-files as list's dependencies.
  495. ###
  496. ### This allows to process files listed, passing list as an argument to the processor
  497. ###
  498. ### TODO: proper implementation needed
  499. macro LIST_PROTO(TO="files.proto", Files...) {
  500. .CMD=$YMAKE_PYTHON3 ${input:"build/scripts/list.py"} ${Files} ${input;hide:Files} ${stdout;output;noauto:TO} ${output_include;from_input;hide:Files} && $YMAKE_PYTHON ${input:"build/scripts/touch.py"} ${output;noext;suf=.pb.h:TO}
  501. _EXPOSE(${TO})
  502. }
  503. # tag:proto
  504. macro _PROTO_DESC_CMD(File) {
  505. .CMD=${cwd;rootdir;input:File} $PROTOC -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH --descriptor_set_out=${output;suf=.desc:File} --include_source_info $_PROTOC_FLAGS ${input;rootrel:File}
  506. }
  507. _PROTO_DESC_MERGE_CMD=$YMAKE_PYTHON ${input:"build/scripts/merge_files.py"} $TARGET $AUTO_INPUT ${kv;hide:"p PD"} ${kv;hide:"pc light-cyan"}
  508. _PROTO_DESC_MERGE_PEERS_CMD=$YMAKE_PYTHON ${input:"build/scripts/merge_files.py"} $TARGET $PEERS $SRCS_GLOBAL ${kv;hide:"p PD"} ${kv;hide:"pc light-cyan"}
  509. NEED_GOOGLE_PROTO_PEERDIRS=yes
  510. CPP_PROTO_LIBRARY_SEM=$CPP_LIBRARY_SEM
  511. JAVA_PROTO_LIBRARY_SEM=$BUILD_PROTO_JAR_SEM $_GRADLE_EXPORT_PUBLISHING_SEM
  512. # tag:proto
  513. ### @usage: PROTO_LIBRARY()
  514. ###
  515. ### Build some varian of protocol buffers library.
  516. ###
  517. ### The particular variant is selected based on where PEERDIR to PROTO_LIBRARY comes from.
  518. ###
  519. ### Now supported 5 variants: C++, Java, Python 2.x, Python 3.x and Go.
  520. ### When PEERDIR comes from module for particular language appropriate variant is selected.
  521. ### PROTO_LIBRARY also supports emission of GRPC code if GRPC() macro is specified.
  522. ### Notes:
  523. ### - Python versions emit C++ code in addition to Python as optimization.
  524. ### - In some PROTO_LIBRARY-es Java or Python versions are excluded via EXCLUDE_TAGS macros due to incompatibilities.
  525. ### - Use from DEPENDS or BUNDLE is not allowed
  526. ###
  527. ### Documentation: https://wiki.yandex-team.ru/yatool/proto_library/
  528. ###
  529. ### See: [GRPC()](#macro_GRPC), [OPTIMIZE_PY_PROTOS()](#macro_OPTIMIZE_PY_PROTOS), [INCLUDE_TAGS()](#macro_INCLUDE_TAGS), [EXCLUDE_TAGS()](#macro_EXCLUDE_TAGS)
  530. multimodule PROTO_LIBRARY {
  531. module CPP_PROTO : LIBRARY {
  532. .ALLOWED=_EXPOSE LIST_PROTO
  533. # TODO(svidyuk): think about marker which forces semantics inheritance
  534. .SEM=CPP_PROTO_LIBRARY_SEM
  535. FORCE_COVERAGE_DISABLED=yes
  536. ENABLE(CPP_PROTO)
  537. ENABLE(GEN_PROTO)
  538. NO_CLANG_TIDY()
  539. SET(PEERDIR_TAGS CPP_PROTO)
  540. when ($BUILD_PROTO_AS_EVLOG == "yes" && $USE_VANILLA_PROTOC == "yes") {
  541. _OK=no
  542. }
  543. ASSERT(_OK BUILD_PROTO_AS_EVLOG and USE_VANILLA_PROTOC are incompatible yet)
  544. MODULE_SUFFIX=$_CPP_PROTO_MODULE_SUFFIX
  545. MODULE_PREFIX=$_CPP_PROTO_MODULE_PREFIX
  546. when ($_COMMON_GOOGLE_APIS != "None") {
  547. PEERDIR += contrib/libs/googleapis-common-protos
  548. }
  549. }
  550. module JAVA_PROTO: EXTERNAL_JAVA_LIBRARY {
  551. .EXTS=.jsrc
  552. .ALLOWED=GRPC
  553. .SEM=JAVA_PROTO_LIBRARY_SEM
  554. SET(PEERDIR_TAGS JAVA_PROTO)
  555. ENABLE(JAVA_PROTO)
  556. PEERDIR+=$JAVA_PROTOBUF_PEERS
  557. when ($KOTLIN_PROTO == "yes") {
  558. KOTLIN_PROTO_PEERS=contrib/java/com/google/protobuf/protobuf-kotlin/${JAVA_PROTO_RUNTIME_VERSION}
  559. KOTLIN_PROTO_FLAGS=--kotlin_out=$ARCADIA_BUILD_ROOT/java_out
  560. }
  561. when ($GRADLE_EXPORT_PUBLISHING == "yes") {
  562. _GRADLE_EXPORT_PUBLISHING_SEM=$_DO_GRADLE_EXPORT_PUBLISHING_SEM
  563. }
  564. .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER USE_SKIFF CPP_PROTO_PLUGIN2 PY_PROTO_PLUGIN YMAPS_SPROTO RESOURCE
  565. ADDINCL(FOR proto $PROTOBUF_PATH)
  566. when ($_COMMON_GOOGLE_APIS != "None") {
  567. PEERDIR += contrib/java/com/google/api/grpc/proto-google-common-protos/${JAVA_PROTO_COMMON_VERSION}
  568. ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
  569. }
  570. }
  571. module PY_PROTO: PY2_LIBRARY {
  572. .ALIASES=SRCS=PY_SRCS
  573. .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
  574. .PEERDIRSELF=CPP_PROTO
  575. .SEM=IGNORED
  576. SET(PEERDIR_TAGS PY2 PY_PROTO)
  577. ENABLE(PY_PROTO)
  578. OPTIMIZE_PY_PROTOS()
  579. OBJ_SUF=.py2
  580. # Can not use NO_LINT(), because is not allowed outside of contrib directory
  581. SET(_NO_LINT_VALUE none_internal)
  582. when ($_COMMON_GOOGLE_APIS != "None") {
  583. PEERDIR += contrib/libs/googleapis-common-protos
  584. }
  585. _IGNORE_SELF_PEERS=
  586. _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
  587. when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
  588. _IGNORE_PEERDIRSELF=CPP_PROTO
  589. }
  590. SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
  591. }
  592. module PY3_PROTO: PY3_LIBRARY {
  593. .ALIASES=SRCS=PY_SRCS
  594. .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
  595. .PEERDIRSELF=CPP_PROTO
  596. .SEM=IGNORED
  597. SET(PEERDIR_TAGS PY3 PY3_PROTO)
  598. ENABLE(PY3_PROTO)
  599. OPTIMIZE_PY_PROTOS()
  600. OBJ_SUF=.py3
  601. # Can not use NO_LINT(), because is not allowed outside of contrib directory
  602. SET(_NO_LINT_VALUE none_internal)
  603. when ($_COMMON_GOOGLE_APIS != "None") {
  604. PEERDIR += contrib/libs/googleapis-common-protos
  605. }
  606. _IGNORE_SELF_PEERS=
  607. _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
  608. when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
  609. _IGNORE_PEERDIRSELF=CPP_PROTO
  610. }
  611. SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
  612. }
  613. module GO_PROTO: GO_LIBRARY {
  614. .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO
  615. .SEM=IGNORED
  616. SET(PEERDIR_TAGS GO GO_PROTO)
  617. ENABLE(GO_PROTO)
  618. when ($_COMMON_GOOGLE_APIS == "None") {
  619. }
  620. elsewhen ($_COMMON_GOOGLE_APIS == "") {
  621. PEERDIR += $_GO_COMMON_GOOGLE_APIS
  622. ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
  623. }
  624. otherwise {
  625. PEERDIR += $_COMMON_GOOGLE_APIS
  626. ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
  627. }
  628. }
  629. module DESC_PROTO: _BARE_UNIT {
  630. .CMD=_PROTO_DESC_MERGE_CMD
  631. .SEM=IGNORED
  632. .EXTS=.desc
  633. .NODE_TYPE=Library
  634. .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO RESOURCE GO_PROTO_PLUGIN GRPC
  635. SET(PEERDIR_TAGS DESC_PROTO)
  636. ENABLE(DESC_PROTO)
  637. MODULE_SUFFIX=.self.protodesc
  638. SET(MODULE_TYPE LIBRARY)
  639. MACRO_ALIAS(EVLOG_CMD _PROTO_DESC_CMD)
  640. MACRO_ALIAS(PROTO_CMD _PROTO_DESC_CMD)
  641. when ($_COMMON_GOOGLE_APIS != "None") {
  642. PEERDIR += contrib/libs/googleapis-common-protos
  643. }
  644. when ($NEED_GOOGLE_PROTO_PEERDIRS == "yes") {
  645. when ($USE_VANILLA_PROTOC == "yes") {
  646. PEERDIR += contrib/libs/protobuf_std/builtin_proto/protos_from_protobuf
  647. }
  648. otherwise {
  649. PEERDIR += contrib/libs/protobuf/builtin_proto/protos_from_protoc
  650. }
  651. }
  652. }
  653. }
  654. module PROTO_DESCRIPTIONS: _BARE_UNIT {
  655. .CMD=_PROTO_DESC_MERGE_PEERS_CMD
  656. .PEERDIR_POLICY=as_build_from
  657. .NODE_TYPE=Library
  658. .RESTRICTED=SRCS
  659. .FINAL_TARGET=yes
  660. SET(PEERDIR_TAGS DESC_PROTO)
  661. SET(MODULE_SUFFIX .protodesc)
  662. SET(MODULE_TYPE PROTO_DESCRIPTIONS)
  663. }
  664. module PROTO_REGISTRY: PROTO_DESCRIPTIONS {
  665. SET(MODULE_TYPE PROTO_REGISTRY)
  666. }