aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriniklyaev <iniklyaev@yandex-team.com>2024-11-18 09:20:42 +0300
committeriniklyaev <iniklyaev@yandex-team.com>2024-11-18 09:33:24 +0300
commit5111ad584756ce8d369dee46319b232b0b6abce2 (patch)
tree23bb9251940f17eff673745aa9a283511e666467
parent0868f381344a3ff1c5ad6e1ec566960ac51e301b (diff)
downloadydb-5111ad584756ce8d369dee46319b232b0b6abce2.tar.gz
PROTO_SCHEMA() module
commit_hash:3c9b927dbb3ddefcaa455eccb51ae1ded847c736
-rw-r--r--build/conf/go.conf12
-rw-r--r--build/conf/java.conf6
-rw-r--r--build/conf/proto.conf390
-rw-r--r--build/conf/python.conf14
-rw-r--r--build/conf/ts/ts.conf2
-rw-r--r--build/conf/ts/ts_test.conf8
-rw-r--r--build/ymake.core.conf10
7 files changed, 268 insertions, 174 deletions
diff --git a/build/conf/go.conf b/build/conf/go.conf
index ab87169dd4..4943bce8c0 100644
--- a/build/conf/go.conf
+++ b/build/conf/go.conf
@@ -225,17 +225,17 @@ GO_TOOL=$YMAKE_PYTHON3 ${input:"build/scripts/go_tool.py"} $_PROCESS_WHOLE_ARCHI
# tag:go-specific
macro _GO_LINK_LIB_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_FILES...) {
- .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_FBS:PEERS} --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
+ .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
}
# tag:go-specific
macro _GO_LINK_EXE_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_FILES...) {
- .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_FBS|;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${_EXTRA_OBJS} ${rootrel;tags_out=GO|GO_PROTO|GO_FBS|RESOURCE_LIB:PEERS} --ya-end-command-file ${hide;kv:"p LD"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"} && $_GO_LINK_EXE_EXT_CMD
+ .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${_EXTRA_OBJS} ${rootrel;tags_out=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} --ya-end-command-file ${hide;kv:"p LD"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"} && $_GO_LINK_EXE_EXT_CMD
}
# tag:go-specific
macro _GO_LINK_TEST_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_TEST_FILES[], GO_XTEST_FILES[], GO_FILES...) {
- .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++test-miner $GO_TEST_MINER ++test-import-path $GO_TEST_IMPORT_PATH ++peers ${rootrel;tags_in=local,GO|local,GO_PROGRAM|local,GO_PROTO|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_FBS;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${rootrel;tags_out=GO|GO_PROGRAM|GO_PROTO|GO_FBS|RESOURCE_LIB:PEERS} ++test_srcs ${input:GO_TEST_FILES} ++xtest_srcs ${input:GO_XTEST_FILES} ++cover_info $GO_COVER_INFO_VALUE ++skip-tests $_GO_SKIP_TEST_VALUE --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
+ .CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++test-miner $GO_TEST_MINER ++test-import-path $GO_TEST_IMPORT_PATH ++peers ${rootrel;tags_in=local,GO|local,GO_PROGRAM|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${rootrel;tags_out=GO|GO_PROGRAM|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} ++test_srcs ${input:GO_TEST_FILES} ++xtest_srcs ${input:GO_XTEST_FILES} ++cover_info $GO_COVER_INFO_VALUE ++skip-tests $_GO_SKIP_TEST_VALUE --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
}
# tag:go-specific
@@ -649,7 +649,7 @@ module _GO_BASE_UNIT: _BASE_UNIT {
ENABLE(_GO_MODULE)
SET(MODULE_TAG GO)
- SET(PEERDIR_TAGS GO GO_PROTO GO_FBS __EMPTY__ RESOURCE_LIB)
+ SET(PEERDIR_TAGS GO GO_PROTO GO_PROTO_FROM_SCHEMA GO_FBS __EMPTY__ RESOURCE_LIB)
DEFAULT(_GO_VET_TOOL)
DEFAULT(_GO_VET_FLAGS)
DEFAULT(_GO_VET_EXTS)
@@ -815,7 +815,7 @@ module GO_LIBRARY: _GO_BASE_UNIT {
.FINAL_TARGET=no
SET(_GO_TOOL_MODE lib)
SET(MODULE_TYPE LIBRARY)
- SET(PEERDIR_TAGS GO GO_PROTO GO_FBS __EMPTY__ RESOURCE_LIB PACKAGE_UNION)
+ SET(PEERDIR_TAGS GO GO_PROTO GO_PROTO_FROM_SCHEMA GO_FBS __EMPTY__ RESOURCE_LIB PACKAGE_UNION)
MODULE_SUFFIX=.a
}
@@ -956,7 +956,7 @@ module GO_TEST: GO_PROGRAM {
.ALLOWED=GO_SKIP_TESTS YT_SPEC
.FINAL_TARGET=no
SET(MODULE_TAG GO_TEST)
- SET(PEERDIR_TAGS GO GO_PROGRAM GO_PROTO GO_FBS __EMPTY__ RESOURCE_LIB)
+ SET(PEERDIR_TAGS GO GO_PROGRAM GO_PROTO GO_PROTO_FROM_SCHEMA GO_FBS __EMPTY__ RESOURCE_LIB)
SET(_GO_TOOL_MODE test)
SET(MODULE_TYPE PROGRAM)
ENABLE(GO_TEST_MODULE)
diff --git a/build/conf/java.conf b/build/conf/java.conf
index d029f6a379..4a7d5df844 100644
--- a/build/conf/java.conf
+++ b/build/conf/java.conf
@@ -375,7 +375,7 @@ module EXTERNAL_JAVA_LIBRARY: _BASE_UNIT {
MAVEN_EXPORT_COORDS_GLOBAL=$MAVEN_EXPORT_GROUP_ID:${MODULE_PREFIX}${REALPRJNAME}:${MAVEN_EXPORT_VERSION}:
}
- PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_FBS JAVA_IDL PACKAGE_UNION
+ PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_PROTO_FROM_SCHEMA JAVA_FBS JAVA_IDL PACKAGE_UNION
HAS_MANAGEABLE_PEERS=yes
DYNAMIC_LINK=yes
_PROTO_CMDLINE=$_JAVA_PROTO_CMDLINE
@@ -563,7 +563,7 @@ module _JAR_BASE: _BARE_UNIT {
SET(MODULE_TAG JAVA)
- PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_FBS JAVA_IDL DLL JAR_COMPILATION __EMPTY__ RESOURCE_LIB
+ PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_PROTO_FROM_SCHEMA JAVA_FBS JAVA_IDL DLL JAR_COMPILATION __EMPTY__ RESOURCE_LIB
HAS_MANAGEABLE_PEERS=yes
DYNAMIC_LINK=yes
@@ -2087,7 +2087,7 @@ module JSRC_LIBRARY: _BARE_UNIT {
.PEERDIR_POLICY=as_include
.FINAL_TARGET=no
.ALIASES=SRCS=FILES
- PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_FBS JAVA_IDL
+ PEERDIR_TAGS=JAVA JAVA_PROTO JAVA_PROTO_FROM_SCHEMA JAVA_FBS JAVA_IDL
MODULE_TYPE=LIBRARY
SET(MODULE_SUFFIX .jsrc)
SET(DONT_RESOLVE_INCLUDES yes)
diff --git a/build/conf/proto.conf b/build/conf/proto.conf
index a55bfbe7bd..17704bdfd0 100644
--- a/build/conf/proto.conf
+++ b/build/conf/proto.conf
@@ -655,6 +655,162 @@ CPP_PROTO_LIBRARY_SEM=$CPP_LIBRARY_SEM
JAVA_PROTO_LIBRARY_SEM=$BUILD_PROTO_JAR_SEM $_GRADLE_EXPORT_PUBLISHING_SEM
+module _CPP_PROTO : LIBRARY {
+ .ALLOWED=_EXPOSE LIST_PROTO
+ # TODO(svidyuk): think about marker which forces semantics inheritance
+ .SEM=CPP_PROTO_LIBRARY_SEM
+ FORCE_COVERAGE_DISABLED=yes
+ ENABLE(CPP_PROTO)
+ ENABLE(GEN_PROTO)
+ NO_CLANG_TIDY()
+ CPP_PROTOLIBS_DEBUG_INFO()
+ SET(PEERDIR_TAGS)
+
+ when ($BUILD_PROTO_AS_EVLOG == "yes" && $USE_VANILLA_PROTOC == "yes") {
+ _OK=no
+ }
+ ASSERT(_OK BUILD_PROTO_AS_EVLOG and USE_VANILLA_PROTOC are incompatible yet)
+
+ MODULE_SUFFIX=$_CPP_PROTO_MODULE_SUFFIX
+ MODULE_PREFIX=$_CPP_PROTO_MODULE_PREFIX
+
+ when ($_COMMON_GOOGLE_APIS != "None") {
+ PEERDIR += contrib/libs/googleapis-common-protos
+ }
+}
+
+module _JAVA_PROTO: EXTERNAL_JAVA_LIBRARY {
+ .EXTS=.jsrc
+ .ALLOWED=GRPC
+ .SEM=JAVA_PROTO_LIBRARY_SEM
+ SET(PEERDIR_TAGS JAVA)
+ ENABLE(JAVA_PROTO)
+ DISABLE(_NEED_SBOM_INFO)
+ PEERDIR+=$JAVA_PROTOBUF_PEERS
+
+ when ($KOTLIN_PROTO == "yes") {
+ KOTLIN_PROTO_PEERS=contrib/java/com/google/protobuf/protobuf-kotlin/${JAVA_PROTO_RUNTIME_VERSION}
+ KOTLIN_PROTO_FLAGS=--kotlin_out=$ARCADIA_BUILD_ROOT/java_out
+ }
+ when ($GRADLE_EXPORT_PUBLISHING == "yes") {
+ _GRADLE_EXPORT_PUBLISHING_SEM=$_DO_GRADLE_EXPORT_PUBLISHING_SEM
+ }
+
+ .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER USE_SKIFF CPP_PROTO_PLUGIN2 PY_PROTO_PLUGIN YMAPS_SPROTO RESOURCE
+ ADDINCL(FOR proto $PROTOBUF_INCLUDE_PATH)
+
+ when ($_COMMON_GOOGLE_APIS != "None") {
+ PEERDIR += contrib/java/com/google/api/grpc/proto-google-common-protos/${JAVA_PROTO_COMMON_VERSION}
+ ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
+ }
+}
+
+module _PY_PROTO: PY2_LIBRARY {
+ .ALIASES=SRCS=PY_SRCS
+ .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
+ .SEM=IGNORED
+ SET(PEERDIR_TAGS PY2)
+ ENABLE(PY_PROTO)
+ DISABLE(_NEED_SBOM_INFO)
+ OPTIMIZE_PY_PROTOS()
+ OBJ_SUF=.py2
+ # Can not use NO_LINT(), because is not allowed outside of contrib directory
+ SET(_NO_LINT_VALUE none_internal)
+
+ when ($_COMMON_GOOGLE_APIS != "None") {
+ PEERDIR += contrib/libs/googleapis-common-protos
+ }
+
+ _IGNORE_SELF_PEERS=
+ _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
+ when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
+ _IGNORE_PEERDIRSELF=CPP_PROTO
+ }
+ SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
+}
+
+module _PY3_PROTO: PY3_LIBRARY {
+ .ALIASES=SRCS=PY_SRCS
+ .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
+ .SEM=IGNORED
+ SET(PEERDIR_TAGS PY3)
+ ENABLE(PY3_PROTO)
+ DISABLE(_NEED_SBOM_INFO)
+ OPTIMIZE_PY_PROTOS()
+ OBJ_SUF=.py3
+ # Can not use NO_LINT(), because is not allowed outside of contrib directory
+ SET(_NO_LINT_VALUE none_internal)
+
+ when ($_COMMON_GOOGLE_APIS != "None") {
+ PEERDIR += contrib/libs/googleapis-common-protos
+ }
+
+ _IGNORE_SELF_PEERS=
+ _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
+ when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
+ _IGNORE_PEERDIRSELF=CPP_PROTO
+ }
+ SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
+}
+
+module _GO_PROTO: GO_LIBRARY {
+ .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO
+ .SEM=IGNORED
+ SET(PEERDIR_TAGS GO)
+ ENABLE(GO_PROTO)
+
+ when ($_COMMON_GOOGLE_APIS == "None") {
+ }
+ elsewhen ($_COMMON_GOOGLE_APIS == "") {
+ PEERDIR += $_GO_COMMON_GOOGLE_APIS
+ ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
+ }
+ otherwise {
+ PEERDIR += $_COMMON_GOOGLE_APIS
+ ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
+ }
+}
+
+module _TS_PROTO: _TS_PROTO_IMPL {
+ DISABLE(_NEED_SBOM_INFO)
+}
+
+module _TS_PREPARE_DEPS: _PREPARE_DEPS_BASE {
+ .IGNORED=PEERDIR
+ DISABLE(_NEED_SBOM_INFO)
+}
+
+module _DESC_PROTO: _BARE_UNIT {
+ .CMD=_PROTO_DESC_MERGE_CMD
+ .SEM=IGNORED
+ .EXTS=.desc .rawproto
+ .NODE_TYPE=Library
+ .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO RESOURCE GO_PROTO_PLUGIN GRPC
+ .ALIASES=SRCS=_SRCS_NO_GLOBAL
+
+ ENABLE(DESC_PROTO)
+ DISABLE(_NEED_SBOM_INFO)
+ MODULE_SUFFIX=.self.protodesc
+ SET(MODULE_TYPE LIBRARY)
+ SET(_MODDIR_HASH ${hash:MODDIR})
+
+ _EVLOG_CMDLINE=$_PROTO_DESC_CMDLINE
+ _PROTO_CMDLINE=$_PROTO_DESC_CMDLINE
+
+ when ($_COMMON_GOOGLE_APIS != "None") {
+ PEERDIR += contrib/libs/googleapis-common-protos
+ }
+
+ when ($NEED_GOOGLE_PROTO_PEERDIRS == "yes") {
+ when ($USE_VANILLA_PROTOC == "yes") {
+ PEERDIR += contrib/libs/protobuf_std/builtin_proto/protos_from_protobuf
+ }
+ otherwise {
+ PEERDIR += contrib/libs/protobuf/builtin_proto/protos_from_protoc
+ }
+ }
+}
+
# tag:proto
### @usage: PROTO_LIBRARY()
###
@@ -674,173 +830,44 @@ JAVA_PROTO_LIBRARY_SEM=$BUILD_PROTO_JAR_SEM $_GRADLE_EXPORT_PUBLISHING_SEM
###
### See: [GRPC()](#macro_GRPC), [OPTIMIZE_PY_PROTOS()](#macro_OPTIMIZE_PY_PROTOS), [INCLUDE_TAGS()](#macro_INCLUDE_TAGS), [EXCLUDE_TAGS()](#macro_EXCLUDE_TAGS)
multimodule PROTO_LIBRARY {
- module CPP_PROTO : LIBRARY {
- .ALLOWED=_EXPOSE LIST_PROTO
- # TODO(svidyuk): think about marker which forces semantics inheritance
- .SEM=CPP_PROTO_LIBRARY_SEM
- FORCE_COVERAGE_DISABLED=yes
- ENABLE(CPP_PROTO)
- ENABLE(GEN_PROTO)
- NO_CLANG_TIDY()
- CPP_PROTOLIBS_DEBUG_INFO()
- SET(PEERDIR_TAGS CPP_PROTO)
-
- when ($BUILD_PROTO_AS_EVLOG == "yes" && $USE_VANILLA_PROTOC == "yes") {
- _OK=no
- }
- ASSERT(_OK BUILD_PROTO_AS_EVLOG and USE_VANILLA_PROTOC are incompatible yet)
-
- MODULE_SUFFIX=$_CPP_PROTO_MODULE_SUFFIX
- MODULE_PREFIX=$_CPP_PROTO_MODULE_PREFIX
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/libs/googleapis-common-protos
- }
+ module CPP_PROTO: _CPP_PROTO {
+ SET_APPEND(PEERDIR_TAGS CPP_PROTO)
}
- module JAVA_PROTO: EXTERNAL_JAVA_LIBRARY {
- .EXTS=.jsrc
- .ALLOWED=GRPC
- .SEM=JAVA_PROTO_LIBRARY_SEM
- SET(PEERDIR_TAGS JAVA JAVA_PROTO)
- ENABLE(JAVA_PROTO)
- DISABLE(_NEED_SBOM_INFO)
- PEERDIR+=$JAVA_PROTOBUF_PEERS
-
- when ($KOTLIN_PROTO == "yes") {
- KOTLIN_PROTO_PEERS=contrib/java/com/google/protobuf/protobuf-kotlin/${JAVA_PROTO_RUNTIME_VERSION}
- KOTLIN_PROTO_FLAGS=--kotlin_out=$ARCADIA_BUILD_ROOT/java_out
- }
- when ($GRADLE_EXPORT_PUBLISHING == "yes") {
- _GRADLE_EXPORT_PUBLISHING_SEM=$_DO_GRADLE_EXPORT_PUBLISHING_SEM
- }
-
- .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER USE_SKIFF CPP_PROTO_PLUGIN2 PY_PROTO_PLUGIN YMAPS_SPROTO RESOURCE
- ADDINCL(FOR proto $PROTOBUF_INCLUDE_PATH)
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/java/com/google/api/grpc/proto-google-common-protos/${JAVA_PROTO_COMMON_VERSION}
- ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
- }
+ module JAVA_PROTO: _JAVA_PROTO {
+ SET_APPEND(PEERDIR_TAGS JAVA_PROTO)
}
- module PY_PROTO: PY2_LIBRARY {
- .ALIASES=SRCS=PY_SRCS
- .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
+ module PY_PROTO: _PY_PROTO {
+ SET_APPEND(PEERDIR_TAGS PY_PROTO)
.PEERDIRSELF=CPP_PROTO
- .SEM=IGNORED
- SET(PEERDIR_TAGS PY2 PY_PROTO)
- ENABLE(PY_PROTO)
- DISABLE(_NEED_SBOM_INFO)
- OPTIMIZE_PY_PROTOS()
- OBJ_SUF=.py2
- # Can not use NO_LINT(), because is not allowed outside of contrib directory
- SET(_NO_LINT_VALUE none_internal)
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/libs/googleapis-common-protos
- }
-
- _IGNORE_SELF_PEERS=
- _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
- when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
- _IGNORE_PEERDIRSELF=CPP_PROTO
- }
- SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
}
- module PY3_PROTO: PY3_LIBRARY {
- .ALIASES=SRCS=PY_SRCS
- .ALLOWED=OPTIMIZE_PY_PROTOS NO_OPTIMIZE_PY_PROTOS
+ module PY3_PROTO: _PY3_PROTO {
+ SET_APPEND(PEERDIR_TAGS PY3_PROTO)
.PEERDIRSELF=CPP_PROTO
- .SEM=IGNORED
- SET(PEERDIR_TAGS PY3 PY3_PROTO)
- ENABLE(PY3_PROTO)
- DISABLE(_NEED_SBOM_INFO)
- OPTIMIZE_PY_PROTOS()
- OBJ_SUF=.py3
- # Can not use NO_LINT(), because is not allowed outside of contrib directory
- SET(_NO_LINT_VALUE none_internal)
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/libs/googleapis-common-protos
- }
-
- _IGNORE_SELF_PEERS=
- _CPP_PROTO_LIBRARY=${MODDIR}/$_CPP_PROTO_MODULE_PREFIX$REALPRJNAME$_CPP_PROTO_MODULE_SUFFIX
- when ($OPTIMIZE_PY_PROTOS_FLAG == "no") {
- _IGNORE_PEERDIRSELF=CPP_PROTO
- }
- SET_APPEND(_WHOLE_ARCHIVE_LIBS_VALUE_GLOBAL $_CPP_PROTO_LIBRARY)
}
- module GO_PROTO: GO_LIBRARY {
- .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO
- .SEM=IGNORED
- SET(PEERDIR_TAGS GO GO_PROTO)
- ENABLE(GO_PROTO)
-
- when ($_COMMON_GOOGLE_APIS == "None") {
- }
- elsewhen ($_COMMON_GOOGLE_APIS == "") {
- PEERDIR += $_GO_COMMON_GOOGLE_APIS
- ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
- }
- otherwise {
- PEERDIR += $_COMMON_GOOGLE_APIS
- ADDINCL += GLOBAL FOR proto ${ARCADIA_ROOT}/contrib/libs/googleapis-common-protos
- }
+ module GO_PROTO: _GO_PROTO {
+ SET_APPEND(PEERDIR_TAGS GO_PROTO)
}
- module TS_PROTO: _TS_PROTO_IMPL {
+ module TS_PROTO: _TS_PROTO {
# opt-in. We don't want to have TS_PROTO by default
# To include TS_PROTO user have to set INCLUDE_TAGS(TS_PROTO TS_PREPARE_DEPS) in ya.make
.INCLUDE_TAG=no
- .EPILOGUE=_TS_CONFIG_EPILOGUE
.PEERDIRSELF=TS_PREPARE_DEPS
- DISABLE(_NEED_SBOM_INFO)
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/libs/googleapis-common-protos
- }
+ .EPILOGUE=_TS_CONFIG_EPILOGUE
+ SET_APPEND(PEERDIR_TAGS TS_PROTO)
}
- module TS_PREPARE_DEPS: _PREPARE_DEPS_BASE {
+ module TS_PREPARE_DEPS: _TS_PREPARE_DEPS {
.INCLUDE_TAG=no
- .IGNORED=PEERDIR SRCS GENERATE_ENUM_SERIALIZATION
- DISABLE(_NEED_SBOM_INFO)
- }
-
- module DESC_PROTO: _BARE_UNIT {
- .CMD=_PROTO_DESC_MERGE_CMD
- .SEM=IGNORED
- .EXTS=.desc .rawproto
- .NODE_TYPE=Library
- .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER YMAPS_SPROTO RESOURCE GO_PROTO_PLUGIN GRPC
- .ALIASES=SRCS=_SRCS_NO_GLOBAL
-
- SET(PEERDIR_TAGS DESC_PROTO)
- ENABLE(DESC_PROTO)
- DISABLE(_NEED_SBOM_INFO)
- MODULE_SUFFIX=.self.protodesc
- SET(MODULE_TYPE LIBRARY)
- SET(_MODDIR_HASH ${hash:MODDIR})
-
- _EVLOG_CMDLINE=$_PROTO_DESC_CMDLINE
- _PROTO_CMDLINE=$_PROTO_DESC_CMDLINE
-
- when ($_COMMON_GOOGLE_APIS != "None") {
- PEERDIR += contrib/libs/googleapis-common-protos
- }
+ SET_APPEND(PEERDIR_TAGS TS_PREPARE_DEPS)
+ }
- when ($NEED_GOOGLE_PROTO_PEERDIRS == "yes") {
- when ($USE_VANILLA_PROTOC == "yes") {
- PEERDIR += contrib/libs/protobuf_std/builtin_proto/protos_from_protobuf
- }
- otherwise {
- PEERDIR += contrib/libs/protobuf/builtin_proto/protos_from_protoc
- }
- }
+ module DESC_PROTO: _DESC_PROTO {
+ SET_APPEND(PEERDIR_TAGS DESC_PROTO)
}
}
@@ -852,7 +879,7 @@ module PROTO_DESCRIPTIONS: _BARE_UNIT {
.FINAL_TARGET=yes
SET(MODULE_TAG PROTO_DESCRIPTIONS)
- SET(PEERDIR_TAGS DESC_PROTO)
+ SET(PEERDIR_TAGS DESC_PROTO DESC_PROTO_FROM_SCHEMA)
SET(MODULE_SUFFIX .protodesc)
SET(MODULE_TYPE PROTO_DESCRIPTIONS)
}
@@ -862,6 +889,73 @@ module PROTO_REGISTRY: PROTO_DESCRIPTIONS {
SET(MODULE_TYPE PROTO_REGISTRY)
}
+# tag:proto
+### @usage: PROTO_SCHEMA()
+###
+### Build some variant of protocol buffers library or proto descriptions.
+###
+### When used as a PEERDIR from a language module like GO_PROGRAM it behaves like PROTO_LIBRARY.
+### When built directly it produces proto descriptions. When required by RECURSE it produces
+### both proto descriptions and language libraries.
+### PROTO_SCHEMA can depend on PROTO_LIBRARY, but PROTO_LIBRARY cannot depend on PROTO_SCHEMA.
+###
+### See: [PROTO_LIBRARY()](#module_PROTO_LIBRARY)
+multimodule PROTO_SCHEMA {
+ module CPP_PROTO_FROM_SCHEMA: _CPP_PROTO {
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS CPP_PROTO CPP_PROTO_FROM_SCHEMA)
+ }
+
+ module JAVA_PROTO_FROM_SCHEMA: _JAVA_PROTO {
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS JAVA_PROTO JAVA_PROTO_FROM_SCHEMA)
+ }
+
+ module PY_PROTO_FROM_SCHEMA: _PY_PROTO {
+ .PEERDIRSELF=CPP_PROTO_FROM_SCHEMA
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS PY_PROTO PY_PROTO_FROM_SCHEMA)
+ }
+
+ module PY3_PROTO_FROM_SCHEMA: _PY3_PROTO {
+ .PEERDIRSELF=CPP_PROTO_FROM_SCHEMA
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS PY3_PROTO PY3_PROTO_FROM_SCHEMA)
+ }
+
+ module GO_PROTO_FROM_SCHEMA: _GO_PROTO {
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS GO_PROTO GO_PROTO_FROM_SCHEMA)
+ }
+
+ module TS_PROTO_FROM_SCHEMA: _TS_PROTO {
+ # opt-in. We don't want to have TS_PROTO by default
+ # To include TS_PROTO user have to set INCLUDE_TAGS(TS_PROTO TS_PREPARE_DEPS) in ya.make
+ .INCLUDE_TAG=no
+ .PEERDIRSELF=TS_PREPARE_DEPS_FROM_SCHEMA
+ .EPILOGUE=_TS_CONFIG_EPILOGUE
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS TS_PROTO TS_PROTO_FROM_SCHEMA)
+ }
+
+ module TS_PREPARE_DEPS_FROM_SCHEMA: _TS_PREPARE_DEPS {
+ .INCLUDE_TAG=no
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS TS_PREPARE_DEPS TS_PREPARE_DEPS_FROM_SCHEMA)
+ }
+
+ module DESC_PROTO_FROM_SCHEMA: _DESC_PROTO {
+ DISABLE(START_TARGET)
+ SET_APPEND(PEERDIR_TAGS DESC_PROTO DESC_PROTO_FROM_SCHEMA)
+ }
+
+ module PROTO_DESCRIPTIONS_: PROTO_DESCRIPTIONS {
+ .PEERDIRSELF=DESC_PROTO_FROM_SCHEMA
+ .FINAL_TARGET=yes
+ SET_APPEND(PEERDIR_TAGS DESC_PROTO_FROM_SCHEMA)
+ }
+}
+
macro EVLOG_CMD(SRC) {
.CMD=$_EVLOG_CMDLINE
.SEM=$_EVLOG_CMDLINE
diff --git a/build/conf/python.conf b/build/conf/python.conf
index 214687990b..34786b2c53 100644
--- a/build/conf/python.conf
+++ b/build/conf/python.conf
@@ -559,7 +559,7 @@ module _PY_PACKAGE: UNION {
.ALLOWED=GRPC USE_SKIFF
.IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER
ENABLE(PY_PROTOS_FOR)
- SET(PEERDIR_TAGS PY_PROTO)
+ SET(PEERDIR_TAGS PY_PROTO PY_PROTO_FROM_SCHEMA)
SET(DONT_RESOLVE_INCLUDES no)
}
@@ -833,7 +833,7 @@ macro NO_PYTHON_INCLUDES() {
macro PYTHON2_ADDINCL() {
_PYTHON_ADDINCL()
SET(MODULE_TAG PY2_NATIVE)
- SET(PEERDIR_TAGS CPP_PROTO CPP_FBS CPP_ROS PY2_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS CPP_ROS PY2_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
}
# tag:python-specific tag:internal
@@ -842,7 +842,7 @@ macro PYTHON2_ADDINCL() {
macro _ARCADIA_PYTHON_ADDINCL() {
_PYTHON_ADDINCL()
SET(MODULE_TAG PY2)
- SET(PEERDIR_TAGS PY2 PY2_NATIVE PY_PROTO PY2_FBS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS PY2 PY2_NATIVE PY_PROTO PY_PROTO_FROM_SCHEMA PY2_FBS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
}
# tag:python-specific tag:internal
@@ -881,7 +881,7 @@ macro _PYTHON_ADDINCL() {
macro PYTHON3_ADDINCL() {
_PYTHON3_ADDINCL()
SET(MODULE_TAG PY3_NATIVE)
- SET(PEERDIR_TAGS CPP_PROTO CPP_FBS CPP_ROS PY3_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS CPP_ROS PY3_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
}
# tag:python-specific tag:internal
@@ -891,7 +891,7 @@ macro PYTHON3_ADDINCL() {
macro _ARCADIA_PYTHON3_ADDINCL() {
_PYTHON3_ADDINCL()
SET(MODULE_TAG PY3)
- SET(PEERDIR_TAGS PY3 PY3_BIN_LIB PY3TEST_LIBRARY PY3_NATIVE PY3_PROTO PY3_FBS PY3_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS PY3 PY3_BIN_LIB PY3TEST_LIBRARY PY3_NATIVE PY3_PROTO PY3_PROTO_FROM_SCHEMA PY3_FBS PY3_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
}
# tag:python-specific tag:internal
@@ -929,7 +929,7 @@ macro _PYTHON3_ADDINCL() {
### @see: [PY2_LIBRARY](#module_PY2_LIBRARY), [PY3_LIBRARY](#module_PY3_LIBRARY), [PY23_LIBRARY](#multimodule_PY23_LIBRARY)
macro USE_PYTHON2() {
_ARCADIA_PYTHON_ADDINCL()
- SET(PEERDIR_TAGS PY2 PY2_NATIVE CPP_PROTO CPP_FBS CPP_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS PY2 PY2_NATIVE CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS CPP_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
PEERDIR(contrib/libs/python)
}
@@ -946,7 +946,7 @@ macro USE_PYTHON2() {
### @see: [PY2_LIBRARY](#module_PY2_LIBRARY), [PY3_LIBRARY](#module_PY3_LIBRARY), [PY23_LIBRARY](#multimodule_PY23_LIBRARY)
macro USE_PYTHON3() {
_ARCADIA_PYTHON3_ADDINCL()
- SET(PEERDIR_TAGS PY3 PY3_BIN_LIB PY3TEST_LIBRARY PY3_NATIVE CPP_PROTO CPP_FBS CPP_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
+ SET(PEERDIR_TAGS PY3 PY3_BIN_LIB PY3TEST_LIBRARY PY3_NATIVE CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS CPP_ROS YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB)
PEERDIR(contrib/libs/python)
when ($USE_ARCADIA_PYTHON == "yes") {
diff --git a/build/conf/ts/ts.conf b/build/conf/ts/ts.conf
index 0fb8cba30d..f3149b3d3c 100644
--- a/build/conf/ts/ts.conf
+++ b/build/conf/ts/ts.conf
@@ -94,7 +94,7 @@ module _TS_BASE_UNIT: _BARE_UNIT {
SET(MODULE_TAG TS)
SET(MODULE_LANG TS)
# TS should peer to TS
- SET(PEERDIR_TAGS TS TS_PROTO)
+ SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
# .fake tells builder to not materialize it in results
SET(MODULE_SUFFIX .ts.fake)
diff --git a/build/conf/ts/ts_test.conf b/build/conf/ts/ts_test.conf
index be683c6ff1..c468139336 100644
--- a/build/conf/ts/ts_test.conf
+++ b/build/conf/ts/ts_test.conf
@@ -32,7 +32,7 @@ module TS_TEST_JEST_FOR: _TS_TEST_BASE {
.CMD=TS_TEST_JEST_CMD
# for multimodule peers we should choose NODE_MODULES
- SET(PEERDIR_TAGS TS TS_PROTO)
+ SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
# compatibility with old TS_TEST_SRCS
SET(TS_TEST_EXTENSION test.(ts|tsx|js|jsx))
@@ -67,7 +67,7 @@ module TS_TEST_HERMIONE_FOR: _TS_TEST_BASE {
.CMD=TS_TEST_HERMIONE_CMD
# for multimodule peers we should choose TS
- SET(PEERDIR_TAGS TS TS_PROTO)
+ SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
# compatibility with old TS_TEST_SRCS
SET(TS_TEST_EXTENSION hermione.(ts|js))
@@ -101,7 +101,7 @@ module TS_TEST_PLAYWRIGHT_FOR: _TS_TEST_BASE {
.CMD=TS_TEST_PLAYWRIGHT_CMD
# for multimodule peers we should choose TS
- SET(PEERDIR_TAGS TS TS_PROTO)
+ SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
# compatibility with old TS_TEST_SRCS
SET(TS_TEST_EXTENSION (playwright|spec).(ts|js))
@@ -134,7 +134,7 @@ module TS_TEST_PLAYWRIGHT_LARGE_FOR: _TS_TEST_BASE {
.CMD=TS_TEST_PLAYWRIGHT_LARGE_CMD
# for multimodule peers we should choose TS
- SET(PEERDIR_TAGS TS TS_PROTO)
+ SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA)
# compatibility with old TS_TEST_SRCS
SET(TS_TEST_EXTENSION (playwright|spec).(ts|js))
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index 64ed9b78da..a6e0b718b5 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -589,7 +589,7 @@ module GEN_LIBRARY: _BARE_UNIT {
module _BASE_UNIT: _BARE_UNIT {
.GLOBAL=_FBS_NAMESPACE_MAP
- PEERDIR_TAGS=CPP_PROTO CPP_FBS CPP_ROS H_IDL PY2 PY2_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB
+ PEERDIR_TAGS=CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS CPP_ROS H_IDL PY2 PY2_NATIVE YQL_UDF_STATIC __EMPTY__ RESOURCE_LIB DLL_LIB
_CPP_PROTO_WRAPPER_BASE=$YMAKE_PYTHON3 ${input:"build/scripts/cpp_proto_wrapper.py"}
_CPP_PROTO_CMDLINE_BASE=${cwd;rootdir;input:File} $PROTOC -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE ${pre=-I=:_PROTO__INCLUDE} -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_INCLUDE_PATH --cpp_out=${CPP_PROTO_PLUGINS}$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE $_PROTOC_FLAGS $PROTOC_STYLEGUIDE_OUT $PROTOC_PLUGIN_STYLEGUIDE ${hide:PROTO_FAKEID} ${input;rootrel:File}
@@ -2364,7 +2364,7 @@ multimodule PACKAGE {
.USE_PEERS_LATE_OUTS=yes
.PEERDIR_POLICY=as_build_from
.FINAL_TARGET=yes
- SET(PEERDIR_TAGS CPP_PROTO CPP_FBS PY2 PY3 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN PY3TEST_PROGRAM DLL GO_PROGRAM PACKAGE_UNION)
+ SET(PEERDIR_TAGS CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS PY2 PY3 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN PY3TEST_PROGRAM DLL GO_PROGRAM PACKAGE_UNION)
SET(MODULE_SUFFIX .final.pkg.fake)
SET(DONT_RESOLVE_INCLUDES yes)
@@ -2382,7 +2382,7 @@ multimodule PACKAGE {
.IGNORED=VCS_INFO_FILE
SET(MODULE_SUFFIX .pkg.fake)
- SET(PEERDIR_TAGS CPP_PROTO CPP_FBS PY2 PY3 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN PY3TEST_PROGRAM DLL GO_PROGRAM PACKAGE_UNION)
+ SET(PEERDIR_TAGS CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS PY2 PY3 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN PY3TEST_PROGRAM DLL GO_PROGRAM PACKAGE_UNION)
DISABLE(START_TARGET)
SET(_COPY_FILE_CONTEXT TEXT)
@@ -2404,7 +2404,7 @@ module CI_GROUP: _BARE_UNIT {
.RESTRICTED=SRCS
.USE_PEERS_LATE_OUTS=yes
MODULE_SUFFIX=.ci.pkg.fake
- PEERDIR_TAGS=CPP_PROTO PY3 PY3_NATIVE PY3_BIN PY3TEST_PROGRAM YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE DLL PACKAGE_FINAL
+ PEERDIR_TAGS=CPP_PROTO CPP_PROTO_FROM_SCHEMA PY3 PY3_NATIVE PY3_BIN PY3TEST_PROGRAM YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE DLL PACKAGE_FINAL
}
# tag:generic tag:internal
@@ -2429,7 +2429,7 @@ module UNION: _BASE_UNIT {
SET(MODULE_SUFFIX .pkg.fake)
SET(DONT_RESOLVE_INCLUDES yes)
SET(NEED_PLATFORM_PEERDIRS no)
- PEERDIR_TAGS=CPP_PROTO CPP_FBS PY2 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN DLL PACKAGE_UNION
+ PEERDIR_TAGS=CPP_PROTO CPP_PROTO_FROM_SCHEMA CPP_FBS PY2 PY2_NATIVE PY3_NATIVE YQL_UDF_SHARED __EMPTY__ RESOURCE_LIB DOCSBOOK JAR_RUNNABLE PY3_BIN DLL PACKAGE_UNION
UNION_OUTS=${hide;late_out:AUTO_INPUT}
when ($_UNION_EXPLICIT_OUTPUTS) {