aboutsummaryrefslogtreecommitdiffstats
path: root/build/conf/project_specific
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
committeralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /build/conf/project_specific
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
downloadydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz
add ymake export to ydb
Diffstat (limited to 'build/conf/project_specific')
-rw-r--r--build/conf/project_specific/esp.conf136
-rw-r--r--build/conf/project_specific/maps/aar.conf338
-rw-r--r--build/conf/project_specific/maps/asrc.conf121
-rw-r--r--build/conf/project_specific/maps/mapkit.conf350
-rw-r--r--build/conf/project_specific/maps/sproto.conf21
-rw-r--r--build/conf/project_specific/other.conf11
-rw-r--r--build/conf/project_specific/uservices.conf40
-rw-r--r--build/conf/project_specific/yql_udf.conf247
-rw-r--r--build/conf/project_specific/yt.conf5
9 files changed, 1269 insertions, 0 deletions
diff --git a/build/conf/project_specific/esp.conf b/build/conf/project_specific/esp.conf
new file mode 100644
index 0000000000..ce939d1629
--- /dev/null
+++ b/build/conf/project_specific/esp.conf
@@ -0,0 +1,136 @@
+ESP_KCONFIGS=
+ESP_KCONFIGS_PROJBUILD=
+ESP_LDFRAGMENTS=
+ESP_SDKCONFIG_RENAMES=
+
+macro ESP_KCONFIG(Kconfig) {
+ SET_APPEND(ESP_KCONFIGS \${input;hide:$Kconfig})
+ SET_APPEND(ESP_KCONFIGS_GLOBAL ${pre=$ARCADIA_ROOT/$MODDIR/:Kconfig})
+}
+
+macro ESP_KCONFIG_PROJBUILD(Kconfig) {
+ SET_APPEND(ESP_KCONFIGS_PROJBUILD \${input;hide:$Kconfig})
+ SET_APPEND(ESP_KCONFIGS_PROJBUILD_GLOBAL ${pre=$ARCADIA_ROOT/$MODDIR/:Kconfig})
+}
+
+macro ESP_LDFRAGMENTS(Fragments...) {
+ SET_APPEND(ESP_LDFRAGMENTS ${pre=\$\{input\;hide\:\";suf=\"\}:Fragments})
+ SET_APPEND(ESP_LDFRAGMENTS_GLOBAL ${pre=$ARCADIA_ROOT/$MODDIR/:Fragments})
+}
+
+macro ESP_SDKCONFIG_RENAME(Rename) {
+ SET_APPEND(ESP_SDKCONFIG_RENAMES \${input;hide:$Rename})
+ SET_APPEND(ESP_SDKCONFIG_RENAMES_GLOBAL ${pre=$ARCADIA_ROOT/$MODDIR/:Rename})
+}
+
+ESP_LINK_LIB=$LINK_LIB $ESP_KCONFIGS $ESP_KCONFIGS_PROJBUILD $ESP_LDFRAGMENTS $ESP_SDKCONFIG_RENAMES
+
+ESP_CONFIG=contrib/libs/esp-idf/config
+
+module ESP_LIBRARY: LIBRARY {
+ .CMD=ESP_LINK_LIB
+ .GLOBAL=ESP_KCONFIGS ESP_KCONFIGS_PROJBUILD ESP_LDFRAGMENTS ESP_SDKCONFIG_RENAMES
+
+ ADDINCL(GLOBAL $ESP_CONFIG)
+}
+
+ESP_KCONFIGS_CMD=$WRITER_PY --file ${tmp:"kconfigs.in"} -m ${pre="source \"";suf="\"":ESP_KCONFIGS_GLOBAL}
+
+ESP_KCONFIGS_PROJBUILD_CMD=$WRITER_PY --file ${tmp:"kconfigs_projbuild.in"} -m ${pre="source \"";suf="\"":ESP_KCONFIGS_PROJBUILD_GLOBAL}
+
+ESP_SDKCONFIG_DEFAULTS=contrib/libs/esp-idf/sdkconfig.defaults
+
+macro _ESP_CONFGEN_DEFAULTS_HELPER(Defaults...) {
+ .CMD=${pre=--defaults :Defaults}
+}
+
+macro _ESP_CONFGEN_DEFAULTS_ARGS(Defaults...) {
+ .CMD=$_ESP_CONFGEN_DEFAULTS_HELPER(${input:Defaults})
+}
+
+ESP_CONFGEN_CMD= \
+ ${tool:"contrib/libs/esp-idf/tools/kconfig_new/confgen"} \
+ $_ESP_CONFGEN_DEFAULTS_ARGS($ESP_SDKCONFIG_DEFAULTS) \
+ --kconfig ${input:"contrib/libs/esp-idf/Kconfig"} \
+ --sdkconfig-rename ${input:"contrib/libs/esp-idf/sdkconfig.rename"} \
+ --env IDF_CMAKE=y \
+ --env IDF_TARGET=esp32c3 \
+ --env IDF_ENV_FPGA= \
+ --env IDF_PATH=$ARCADIA_ROOT/contrib/libs/esp-idf \
+ --env COMPONENT_KCONFIGS_SOURCE_FILE=${tmp:"kconfigs.in"} \
+ --env COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE=${tmp:"kconfigs_projbuild.in"} \
+ --env COMPONENT_SDKCONFIG_RENAMES=${join=" ":ESP_SDKCONFIG_RENAMES_GLOBAL} \
+ --output config ${output:"sdkconfig"} \
+ --output header ${output:"sdkconfig.h"}
+
+ESP_LIBRARIES_CMD=$WRITER_PY --file ${tmp:"ldgen_libraries"} -m $PEERS
+
+ESP_LDGEN_CMD= \
+ ${tool:"contrib/libs/esp-idf/tools/ldgen"} \
+ --config ${tmp:"sdkconfig"} \
+ --fragments $ESP_LDFRAGMENTS_GLOBAL \
+ --input ${input:"contrib/libs/esp-idf/components/esp_system/ld/esp32c3/sections.ld.in"} \
+ --output ${output:"sections.ld"} \
+ --kconfig ${input:"contrib/libs/esp-idf/Kconfig"} \
+ --env IDF_CMAKE=y \
+ --env IDF_TARGET=esp32c3 \
+ --env IDF_ENV_FPGA= \
+ --env IDF_PATH=$ARCADIA_ROOT/contrib/libs/esp-idf \
+ --env COMPONENT_KCONFIGS_SOURCE_FILE=${tmp:"kconfigs.in"} \
+ --env COMPONENT_KCONFIGS_PROJBUILD_SOURCE_FILE=${tmp:"kconfigs_projbuild.in"} \
+ --libraries-file ${tmp:"ldgen_libraries"} \
+ --objdump $OBJDUMP_TOOL
+
+ESP_FLASH_SIZE=4MB
+
+macro _ESP_ELF2IMAGE(Elf, Args...) {
+ .CMD=${cwd:BINDIR} ${tool:"contrib/tools/esptool/esptool"} --chip esp32c3 elf2image $Args --flash_mode dio --flash_freq 80m --flash_size $ESP_FLASH_SIZE --min-rev 3 -o ${output;noext:Elf.bin} $Elf
+}
+
+ESP_PARTITION_TABLE_OFFSET=0x8000
+ESP_PARTITION_TABLE=partitions.csv
+
+ESP_GEN_ESP32PART_CMD= \
+ ${tool:"contrib/libs/esp-idf/components/partition_table/gen_esp32part"} \
+ --flash-size $ESP_FLASH_SIZE \
+ --offset $ESP_PARTITION_TABLE_OFFSET \
+ --secure \
+ ${input:ESP_PARTITION_TABLE} \
+ ${output:"partition-table.bin"}
+
+ESP_LINK_EXE= \
+ && $ESP_KCONFIGS_CMD \
+ && $ESP_KCONFIGS_PROJBUILD_CMD \
+ && $ESP_CONFGEN_CMD \
+ && $ESP_LIBRARIES_CMD \
+ && $ESP_LDGEN_CMD \
+ && $ESP_GEN_ESP32PART_CMD \
+ && $LINK_EXE \
+ && $_ESP_ELF2IMAGE($MODULE_PREFIX$REALPRJNAME, "--secure-pad-v2")
+
+### @usage: ESP_PROGRAM([progname])
+###
+### Program module for Espressif microcontrollers.
+### Converts ELF to binary image file suitable for flashing.
+### Currently, only ESP32-C3 is supported.
+module ESP_PROGRAM: PROGRAM {
+ .CMD=ESP_LINK_EXE
+ .GLOBAL=ESP_KCONFIGS ESP_KCONFIGS_PROJBUILD ESP_LDFRAGMENTS ESP_SDKCONFIG_RENAMES
+ ALLOCATOR(FAKE)
+ NO_PLATFORM()
+ LINKER_SCRIPT_VALUE+=-T$ARCADIA_BUILD_ROOT/$MODDIR/sections.ld
+}
+
+ESP_BOOTLOADER_LINK_EXE= \
+ && $LINK_EXE \
+ && $_ESP_ELF2IMAGE($MODULE_PREFIX$REALPRJNAME, "--pad-to-size", "4KB")
+
+module ESP_BOOTLOADER: PROGRAM {
+ .CMD=ESP_BOOTLOADER_LINK_EXE
+ ALLOCATOR(FAKE)
+ NO_PLATFORM()
+}
+
+when ($ESP_BOOTLOADER_BUILD == "yes") {
+ CFLAGS+=-DBOOTLOADER_BUILD -fno-stack-protector
+}
diff --git a/build/conf/project_specific/maps/aar.conf b/build/conf/project_specific/maps/aar.conf
new file mode 100644
index 0000000000..6f03e07c1f
--- /dev/null
+++ b/build/conf/project_specific/maps/aar.conf
@@ -0,0 +1,338 @@
+
+_GRADLE_FLAGS_VALUE=
+### @usage: GRADLE_FLAGS(flags...) # internal
+###
+### SEt additional flags for gradle
+macro GRADLE_FLAGS(FLAGS...) {
+ SET_APPEND(_GRADLE_FLAGS_VALUE $FLAGS)
+}
+
+### @usage: PROGUARD_RULES(ProguardRuleFiles...)
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro PROGUARD_RULES(RULES...) {
+ SET_APPEND(_PROGUARD_RULES_GLOBAL $RULES)
+}
+
+### @usage: AARS(Aars...)
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro AARS(DEPS...) {
+ SET_APPEND(_AARS_GLOBAL $DEPS)
+}
+
+### @usage: MOBILE_DLL() # internal
+module MOBILE_DLL: DLL {
+ .CMD=LINK_MOBILE_DLL
+
+ PEERDIR(build/external_resources/android_sdk)
+ PEERDIR(build/external_resources/gradle)
+ PEERDIR(build/platform/java/jdk)
+ PEERDIR($JDK_RESOURCE_PEERDIR)
+
+ SET(BIN_AAR_DIR $BINDIR/aar)
+ SET(BIN_TMP_DIR $BINDIR/tmp)
+}
+
+_MOBILE_TEST_APK_AAR_MANIFEST_VALUE=
+### @usage: MOBILE_TEST_APK_AAR_MANIFEST(file) # internal
+macro MOBILE_TEST_APK_AAR_MANIFEST(FILE) {
+ SET(_MOBILE_TEST_APK_AAR_MANIFEST_VALUE $FILE)
+}
+
+_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE=
+### @usage: MOBILE_TEST_APK_AAR_PROGUARD_RULES(file) # internal
+macro MOBILE_TEST_APK_AAR_PROGUARD_RULES(FILE) {
+ SET(_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE $FILE)
+}
+
+_MOBILE_TEST_APK_AAR_AARS_VALUE=
+### @usage: MOBILE_TEST_APK_AAR_AARS(filenames...) # internal
+macro MOBILE_TEST_APK_AAR_AARS(AARS...) {
+ SET_APPEND(_MOBILE_TEST_APK_AAR_AARS_VALUE $AARS)
+}
+
+_MOBILE_TEST_APK_AAR_BUNDLES_VALUE=
+### @usage: MOBILE_TEST_APK_AAR_BUNDLES(filenames...) # internal
+macro MOBILE_TEST_APK_AAR_BUNDLES(BUNDLES...) {
+ SET_APPEND(_MOBILE_TEST_APK_AAR_BUNDLES_VALUE $BUNDLES)
+ BUNDLE_EXTRA_INPUTS($BUNDLES)
+}
+
+_MOBILE_TEST_APK_TEMPLATE_DIR=
+### @usage: MOBILE_TEST_APK_TEMPLATE(dir filenames...) # internal
+macro MOBILE_TEST_APK_TEMPLATE(TEMPLATE_DIR, INPUTS...) {
+ SET(_MOBILE_TEST_APK_TEMPLATE_DIR $TEMPLATE_DIR)
+ BUNDLE_EXTRA_INPUTS(${pre=$TEMPLATE_DIR/:INPUTS})
+}
+
+_MOBILE_TEST_APK_CMDLINE=\
+$FS_TOOLS md $BIN_TMP_DIR \
+&& $FS_TOOLS md $BINDIR/.android \
+&& $COPY_CMD $GRADLE_DEBUG_STORE_RESOURCE_GLOBAL/debug.keystore $BINDIR/.android/debug.keystore \
+&& $FS_TOOLS md $BINDIR/jni_libs/$ARCH_NAME \
+&& $YMAKE_PYTHON ${input:"build/scripts/extract_asrc.py"} --output $BIN_TMP_DIR --input ${suf=.asrc:PEERS} \
+&& $MOVE_FILE $OUTPUT $BINDIR/jni_libs/$ARCH_NAME/${pre=lib;suf=.so:_MOBILE_TEST_APK_LIBRARY_NAME} \
+&& $FS_TOOLS md $BIN_AAR_DIR \
+&& $YMAKE_PYTHON ${input:"build/scripts/gen_aar_gradle_script.py"} \
+${input;hide:EXTRA_INPUTS} \
+--aidl-dirs $BIN_TMP_DIR/aidl \
+--assets-dirs $BIN_TMP_DIR/assets \
+--java-dirs $BIN_TMP_DIR/src \
+--jni-libs-dirs $BINDIR/jni_libs \
+--res-dirs $BIN_TMP_DIR/res \
+--manifest ${input:_MOBILE_TEST_APK_AAR_MANIFEST_VALUE} \
+--proguard-rules ${input:_MOBILE_TEST_APK_AAR_PROGUARD_RULES_VALUE} ${input:_PROGUARD_RULES_GLOBAL} \
+--aars $_MOBILE_TEST_APK_AAR_AARS_VALUE $_AARS_GLOBAL \
+--bundles $_MOBILE_TEST_APK_AAR_BUNDLES_VALUE \
+--output-dir $BIN_AAR_DIR \
+--bundle-name unittest \
+--maven-repos ${MAPSMOBI_MAVEN_REPO_RESOURCE_GLOBAL} \
+&& ${cwd:BIN_AAR_DIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR assemble${_BUNDLE_BUILD_TYPE} ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} \
+&& $FS_TOOLS md $BIN_APK_DIR \
+&& $FS_TOOLS md $BIN_APK_DIR/res \
+&& $COPY_CMD $_MOBILE_TEST_APK_TEMPLATE_DIR/Manifest.xml $BIN_APK_DIR/Manifest.xml \
+&& $YMAKE_PYTHON ${input:"build/scripts/gen_test_apk_gradle_script.py"} \
+${input;hide:EXTRA_INPUTS} \
+--app-id $REALPRJNAME \
+--assets-dirs $_MOBILE_TEST_APK_ASSETS_DIRS_VALUE \
+--java-dirs $_MOBILE_TEST_APK_TEMPLATE_DIR/java \
+--jni-libs-dirs \
+--res-dirs $BIN_APK_DIR/res $_MOBILE_TEST_APK_TEMPLATE_DIR/res $BIN_TMP_DIR/res \
+--manifest Manifest.xml \
+--aars \
+--output-dir $BIN_APK_DIR \
+--bundle-name $REALPRJNAME \
+--bundles $BIN_AAR_DIR/build/outputs/aar/unittest-${tolower:_BUNDLE_BUILD_TYPE}.aar $_MOBILE_TEST_APK_AAR_BUNDLES_VALUE \
+--library-name $_MOBILE_TEST_APK_LIBRARY_NAME \
+--maven-repos ${MAPSMOBI_MAVEN_REPO_RESOURCE_GLOBAL} \
+&& ${cwd:BIN_APK_DIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR assembleDebug ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} \
+&& $COPY_CMD $BIN_APK_DIR/build/outputs/apk/${tolower:_BUNDLE_BUILD_TYPE}/$REALPRJNAME.apk ${OUTPUT}
+
+_MOBILE_TEST_APK_EXTRA_INPUTS_VALUE=
+
+macro _MOBILE_TEST_APK_CMD_IMPL(OUTPUT, EXTRA_INPUTS...) {
+ .CMD=$_MOBILE_TEST_APK_CMDLINE
+}
+
+_MOBILE_TEST_APK_CMD=$_MOBILE_TEST_APK_CMD_IMPL($TARGET $_BUNDLE_EXTRA_INPUTS_VALUE)
+
+LINK_MOBILE_TEST_APK=$LINK_DYN_LIB && $_MOBILE_TEST_APK_CMD
+
+### @usage: MOBILE_TEST_APK() # internal
+module MOBILE_TEST_APK: DLL {
+ .CMD=LINK_MOBILE_TEST_APK
+ .GLOBAL=_AARS _PROGUARD_RULES
+
+ PEERDIR(build/external_resources/android_sdk)
+ PEERDIR(build/external_resources/gradle)
+ PEERDIR(build/platform/java/jdk)
+ PEERDIR($JDK_RESOURCE_PEERDIR)
+
+ SET(MODULE_PREFIX)
+ SET(MODULE_SUFFIX .apk)
+
+ SET(BIN_AAR_DIR $BINDIR/aar)
+ SET(BIN_APK_DIR $BINDIR/apk)
+ SET(BIN_TMP_DIR $BINDIR/tmp)
+ SET(BIN_GRADLE_USER_HOME_DIR $BINDIR/gradle)
+
+ SET(_MOBILE_TEST_APK_LIBRARY_NAME unittests)
+
+ when ($OS_ANDROID == "yes") {
+ when ($ARCH_ARM7 == "yes") {
+ ARCH_NAME=armeabi-v7a
+ }
+ elsewhen ($ARCH_ARM64 == "yes") {
+ ARCH_NAME=arm64-v8a
+ }
+ elsewhen ($ARCH_I386 == "yes") {
+ ARCH_NAME=x86
+ }
+ elsewhen ($ARCH_X86_64 == "yes") {
+ ARCH_NAME=x86_64
+ }
+ otherwise {
+ ARCH_NAME=unsupported
+ }
+ }
+}
+
+
+### @usage: MOBILE_BOOST_TEST_APK() # internal
+module MOBILE_BOOST_TEST_APK: MOBILE_TEST_APK {
+ PEERDIR(devtools/dummy_arcadia/test/test_apk/template)
+ PEERDIR(build/external_resources/mapsmobi_maven_repo)
+ ADD_YTEST($MODULE_PREFIX$REALPRJNAME boost.test)
+
+ MOBILE_TEST_APK_TEMPLATE(${ARCADIA_ROOT}/devtools/dummy_arcadia/test/test_apk/template Manifest.xml java/com/yandex/test/unittests/RunTestsActivity.java java/com/yandex/test/unittests/CrashHandler.java res/values/strings.xml)
+}
+
+when ($BT_RELEASE) {
+ _BUNDLE_BUILD_TYPE=Release
+}
+otherwise {
+ _BUNDLE_BUILD_TYPE=Debug
+}
+
+_AAR_EXTRA_INPUTS_VALUE=
+
+_AAR_MANIFEST_VALUE=
+### @usage: AAR_MANIFEST(filename) # internal
+macro AAR_MANIFEST(FILE) {
+ SET(_AAR_MANIFEST_VALUE $FILE)
+}
+
+_AAR_PROGUARD_RULES_VALUE=
+### @usage: AAR_PROGUARD_RULES(filename) # internal
+macro AAR_PROGUARD_RULES(FILE) {
+ SET(_AAR_PROGUARD_RULES_VALUE $FILE)
+}
+
+_AAR_AARS_VALUE=
+### @usage: AAR_AARS(aars...) # internal
+macro AAR_AARS(Aars...) {
+ SET_APPEND(_AAR_AARS_VALUE $Aars)
+}
+
+_AAR_COMPILE_ONLY_AARS_VALUE=
+### @usage: AAR_COMPILE_ONLY_AARS(compile_only_aars...) # internal
+macro AAR_COMPILE_ONLY_AARS(Aars...) {
+ SET_APPEND(_AAR_COMPILE_ONLY_AARS_VALUE $Aars)
+}
+
+
+_AAR_AIDL_DIRS_VALUE=
+### @usage: AAR_AIDL_SRCS(dir filenames...) # internal
+macro AAR_AIDL_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_AAR_AIDL_DIRS_VALUE $PREFIX)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_AAR_ASSETS_DIRS_VALUE=
+### @usage: AAR_ASSETS_SRCS(dir filenames...) # internal
+macro AAR_ASSETS_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_AAR_ASSETS_DIRS_VALUE $PREFIX)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_AAR_BUNDLES_VALUE=
+### @usage: AAR_BUNDLES(filenames...) # internal
+macro AAR_BUNDLES(BUNDLES...) {
+ SET_APPEND(_AAR_BUNDLES_VALUE $BUNDLES)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE $BUNDLES)
+}
+
+_AAR_JNI_LIB_DIRS_VALUE=
+### @usage: AAR_JNI_LIBS(dir filenames...) # internal
+macro AAR_JNI_LIBS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_AAR_JNI_LIB_DIRS_VALUE $PREFIX)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_AAR_JAVA_DIRS_VALUE=
+### @usage: AAR_JAVA_SRCS(dir filenames...) # internal
+macro AAR_JAVA_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_AAR_JAVA_DIRS_VALUE $PREFIX)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_AAR_RES_DIRS_VALUE=
+### @usage: AAR_RES_SRCS(dir filenames...) # internal
+macro AAR_RES_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_AAR_RES_DIRS_VALUE $PREFIX)
+ SET_APPEND(_AAR_EXTRA_INPUTS_VALUE ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_AAR_LOCAL_MAVEN_REPO_VALUE=
+### @usage: AAR_LOCAL_MAVEN_REPO(repo...)
+macro AAR_LOCAL_MAVEN_REPO(REPO...) {
+ SET_APPEND(_AAR_LOCAL_MAVEN_REPO_VALUE $REPO)
+}
+
+_AAR_GRADLE_SCRIPT_GENERATOR_VALUE=
+### @usage: AAR_GRADLE_SCRIPT_GENERATOR(python_script)
+macro AAR_GRADLE_SCRIPT_GENERATOR(GENERATOR) {
+ SET(_AAR_GRADLE_SCRIPT_GENERATOR_VALUE $GENERATOR)
+}
+
+when ($AAR_NO_STRIP) {
+ _AAR_NO_STRIP_VALUE=--do-not-strip
+}
+otherwise {
+ _AAR_NO_STRIP_VALUE=
+}
+
+_AAR_CMDLINE=\
+$FS_TOOLS md $BIN_TMP_DIR \
+&& $FS_TOOLS md $BINDIR/.android \
+&& $COPY_CMD $GRADLE_DEBUG_STORE_RESOURCE_GLOBAL/debug.keystore $BINDIR/.android/debug.keystore \
+&& $YMAKE_PYTHON ${input:"build/scripts/extract_asrc.py"} --output $BIN_TMP_DIR --input ${suf=.asrc:PEERS} \
+&& $YMAKE_PYTHON ${input:_AAR_GRADLE_SCRIPT_GENERATOR_VALUE} \
+${input;hide:EXTRA_INPUTS} \
+--aidl-dirs $_AAR_AIDL_DIRS_VALUE $BIN_TMP_DIR/aidl \
+--assets-dirs $_AAR_ASSETS_DIRS_VALUE $BIN_TMP_DIR/assets \
+--java-dirs $_AAR_JAVA_DIRS_VALUE $BIN_TMP_DIR/src \
+--jni-libs-dirs $_AAR_JNI_LIB_DIRS_VALUE $BIN_TMP_DIR/jni_libs \
+--res-dirs $_AAR_RES_DIRS_VALUE $BIN_TMP_DIR/res \
+--manifest ${input:_AAR_MANIFEST_VALUE} \
+--proguard-rules ${input:_AAR_PROGUARD_RULES_VALUE} ${input:_PROGUARD_RULES_GLOBAL} \
+--aars $_AAR_AARS_VALUE $_AARS_GLOBAL \
+--compile-only-aars $_AAR_COMPILE_ONLY_AARS_VALUE \
+--bundles $_AAR_BUNDLES_VALUE \
+--output-dir $BINDIR \
+--bundle-name $REALPRJNAME \
+--peers $PEERS \
+--maven-repos $_AAR_LOCAL_MAVEN_REPO_VALUE \
+$_AAR_NO_STRIP_VALUE \
+&& ${cwd:BINDIR} ${GRADLE_RESOURCE_GLOBAL}/bin/gradle $_GRADLE_FLAGS_VALUE --no-daemon --offline -g $BIN_GRADLE_USER_HOME_DIR bundle${_BUNDLE_BUILD_TYPE}Aar ${env:"ANDROID_HOME=$ANDROID_SDK_RESOURCE_GLOBAL/android_sdk"} ${env:"JAVA_HOME=$JDK_RESOURCE"} ${env:"ANDROID_SDK_HOME=$BINDIR"} $VCS_INFO_DISABLE_CACHE__NO_UID__ \
+&& ${cwd:BINDIR} $COPY_CMD build/outputs/aar/${REALPRJNAME}-${tolower:_BUNDLE_BUILD_TYPE}.aar $TARGET \
+&& ${cwd:BINDIR} $COPY_CMD build/${suf=-pom.xml:REALPRJNAME} ${output;suf=-pom.xml:REALPRJNAME} \
+&& ${cwd:BINDIR} $COPY_CMD build/libs/${suf=-sources.jar:REALPRJNAME} ${output;suf=-sources.jar:REALPRJNAME}
+
+macro _AAR_CMD_IMPL(EXTRA_INPUTS...) {
+ .CMD=$_AAR_CMDLINE && $GENERATE_MF
+}
+
+AAR_CMD=$_AAR_CMD_IMPL($_AAR_EXTRA_INPUTS_VALUE)
+
+### @usage: AAR() # internal
+module AAR: _BASE_UNIT {
+ .CMD=AAR_CMD
+ .GLOBAL=_AARS _PROGUARD_RULES
+ .PEERDIR_POLICY=as_build_from
+ .FINAL_TARGET=yes
+
+ SET(MODULE_PREFIX)
+ SET(MODULE_SUFFIX .aar)
+ SET(DONT_RESOLVE_INCLUDES yes)
+ SET(NEED_PLATFORM_PEERDIRS no)
+ NO_PLATFORM()
+
+ PEERDIR(build/external_resources/android_sdk)
+ PEERDIR(build/external_resources/gradle)
+ PEERDIR(build/platform/java/jdk)
+ PEERDIR($JDK_RESOURCE_PEERDIR)
+
+ SET(BIN_TMP_DIR $BINDIR/tmp)
+ SET(BIN_GRADLE_USER_HOME_DIR $BINDIR/gradle)
+}
+
+_SECONDARY_OUTPUT_VALUE=
+
+### @usage: SECONDARY_OUTPUT(filename) # internal
+###
+### The use of this macro is strictly prohibited!!!
+macro SECONDARY_OUTPUT(OUTPUT) {
+ SET(_SECONDARY_OUTPUT_VALUE $OUTPUT)
+}
+
+_AAR_PROXY_LIBRARY_CMD=$LINK_LIB && $COPY_CMD $_SECONDARY_OUTPUT_VALUE ${input;hide:_SECONDARY_OUTPUT_VALUE} ${output:REALPRJNAME.aar}
+
+### @usage: AAR_PROXY_LIBRARY() # internal
+###
+### The use of this module is strictly prohibited!!!
+module AAR_PROXY_LIBRARY: _PROXY_LIBRARY {
+ .ALLOWED=SECONDARY_OUTPUT
+ .CMD=_AAR_PROXY_LIBRARY_CMD
+}
diff --git a/build/conf/project_specific/maps/asrc.conf b/build/conf/project_specific/maps/asrc.conf
new file mode 100644
index 0000000000..c910e6abff
--- /dev/null
+++ b/build/conf/project_specific/maps/asrc.conf
@@ -0,0 +1,121 @@
+_BUNDLE_DELIM_JAVA=__DELIM_JAVA__
+_BUNDLE_DELIM_RES=__DELIM_RES__
+_BUNDLE_DELIM_ASSETS=__DELIM_ASSETS__
+_BUNDLE_DELIM_AIDL=__DELIM_AIDL__
+
+_BUNDLE_EXTRA_INPUTS_VALUE=
+### @usage: BUNDLE_EXTRA_INPUTS(filenames...) # internal
+macro BUNDLE_EXTRA_INPUTS(INPUTS...) {
+ SET_APPEND(_BUNDLE_EXTRA_INPUTS_VALUE $INPUTS)
+}
+
+_BUNDLE_AIDL_SRCS_VALUE=
+### @usage: BUNDLE_AIDL_SRCS(dirname filenames...) # internal
+macro BUNDLE_AIDL_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_BUNDLE_AIDL_SRCS_VALUE $_BUNDLE_DELIM_AIDL $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+ BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_BUNDLE_JAVA_SRCS_VALUE=
+### @usage: BUNDLE_JAVA_SRCS(dirname filenames...) # internal
+macro BUNDLE_JAVA_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_BUNDLE_JAVA_SRCS_VALUE $_BUNDLE_DELIM_JAVA $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+ BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_BUNDLE_RES_SRCS_VALUE=
+### @usage: BUNDLE_RES_SRCS(dirname filenames...) # internal
+macro BUNDLE_RES_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_BUNDLE_RES_SRCS_VALUE $_BUNDLE_DELIM_RES $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+ BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_BUNDLE_ASSETS_SRCS_VALUE=
+### @usage: BUNDLE_ASSETS_SRCS(dirname filenames...) # internal
+macro BUNDLE_ASSETS_SRCS(PREFIX, ABSOLUTE[], FILES...) {
+ SET_APPEND(_BUNDLE_ASSETS_SRCS_VALUE $_BUNDLE_DELIM_ASSETS $PREFIX ${pre=$PREFIX/:FILES} ${ABSOLUTE})
+ BUNDLE_EXTRA_INPUTS(${pre=$PREFIX/:FILES} ${ABSOLUTE})
+}
+
+_BUNDLE_SRCS_VALUE=$_BUNDLE_AIDL_SRCS_VALUE $_BUNDLE_ASSETS_SRCS_VALUE $_BUNDLE_JAVA_SRCS_VALUE $_BUNDLE_RES_SRCS_VALUE
+
+macro _COMPILE_ASRC_IMPL(EXTRA_INPUTS...) {
+ .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output $TARGET ${kv;hide:"p AC"} $kv;hide:"pc light-blue"} ${kv;hide:"show_out"}
+}
+
+_COMPILE_ASRC=$_COMPILE_ASRC_IMPL($_ASRC_EXTRA_INPUTS_VALUE)
+
+COMPILE_ASRC_MF=$_COMPILE_ASRC && $GENERATE_MF
+
+### @usage: ASRC_LIBRARY() # internal
+module ASRC_LIBRARY: _BASE_UNIT {
+ .CMD=COMPILE_ASRC_MF
+ .PEERDIR_POLICY=as_include
+ .FINAL_TARGET=no
+ PEERDIR_TAGS=JAVA_PROTO JAVA_IDL
+ MODULE_TYPE=LIBRARY
+ SET(MODULE_SUFFIX .asrc)
+ SET(DONT_RESOLVE_INCLUDES yes)
+ SET(NEED_PLATFORM_PEERDIRS no)
+
+ NO_RUNTIME()
+}
+
+macro _MOBILE_LIBRARY_PREREQUISITES_IMPL(OUTPUT, EXTRA_INPUTS...) {
+ .CMD=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --input $_BUNDLE_SRCS_VALUE --output $OUTPUT ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"}
+}
+
+macro _MOBILE_LIBRARY_PREREQUISITES_CMD(OUTPUT, EXTRA_INPUTS...) {
+ .CMD=${output;hide:OUTPUT} ${input;hide:EXTRA_INPUTS} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"} $_MOBILE_LIBRARY_PREREQUISITES_IMPL($OUTPUT $EXTRA_INPUTS)
+}
+
+when ($OS_ANDROID == "yes") {
+ LINK_MOBILE_LIB=$LINK_LIB && $_MOBILE_LIBRARY_PREREQUISITES_CMD(${BINDIR}/$MODULE_PREFIX$REALPRJNAME$MODULE_SUFFIX.asrc $_BUNDLE_EXTRA_INPUTS_VALUE)
+}
+otherwise {
+ LINK_MOBILE_LIB=$LINK_LIB
+}
+
+### @usage: MOBILE_LIBRARY() # internal
+module MOBILE_LIBRARY: LIBRARY {
+ .CMD=LINK_MOBILE_LIB
+ DISABLE(NEED_ADD_FAKE_SRC)
+}
+
+_JSRC_PROXY_MOBILE_LIBRARY_CMDLINE=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --jsrcs ${ext=.jsrc;tags_in=local:PEERS} --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.asrc:REALPRJNAME} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"}
+
+macro _JSRC_PROXY_MOBILE_LIBRARY_CMD_IMPL(EXTRA_INPUTS...) {
+ .CMD=$_JSRC_PROXY_MOBILE_LIBRARY_CMDLINE
+}
+
+JSRC_PROXY_MOBILE_LIBRARY_CMD=$LINK_LIB && $_JSRC_PROXY_MOBILE_LIBRARY_CMD_IMPL($_BUNDLE_EXTRA_INPUTS_VALUE)
+
+### @usage: JSRC_PROXY_MOBILE_LIBRARY() # internal
+module JSRC_PROXY_MOBILE_LIBRARY: MOBILE_LIBRARY {
+ .CMD=JSRC_PROXY_MOBILE_LIBRARY_CMD
+ .PEERDIR_POLICY=as_build_from
+ .PROXY=yes
+
+ SET(MODULE_TYPE LIBRARY)
+ DISABLE(NEED_ADD_FAKE_SRC)
+
+ PEERDIR_TAGS=JAVA_PROTO JAVA_IDL
+
+ SET(BIN_TMP_DIR ${BINDIR}/tmp)
+
+ NO_UTIL()
+}
+
+_MOBILE_DLL_PREREQUISITES_CMDLINE=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON ${input:"build/scripts/link_asrc.py"} --work $BINDIR --asrcs ${PEERS.arcs} --input $_BUNDLE_SRCS_VALUE ${input;hide:EXTRA_INPUTS} --output ${output;pre=$MODULE_PREFIX;suf=$MODULE_SUFFIX.asrc:REALPRJNAME} ${kv;hide:"p AC"} ${kv;hide:"pc lite-blue"} ${kv;hide:"show_out"}
+
+macro _MOBILE_DLL_PREREQUISITES_CMD(EXTRA_INPUTS...) {
+ .CMD=$_MOBILE_DLL_PREREQUISITES_CMDLINE
+}
+
+when ($OS_ANDROID == "yes") {
+ LINK_MOBILE_DLL=$LINK_DYN_LIB && $_MOBILE_DLL_PREREQUISITES_CMD($_BUNDLE_EXTRA_INPUTS_VALUE)
+}
+otherwise {
+ LINK_MOBILE_DLL=$LINK_DYN_LIB
+}
+
diff --git a/build/conf/project_specific/maps/mapkit.conf b/build/conf/project_specific/maps/mapkit.conf
new file mode 100644
index 0000000000..53455b2428
--- /dev/null
+++ b/build/conf/project_specific/maps/mapkit.conf
@@ -0,0 +1,350 @@
+MAPKIT_IDL_INCLUDES=
+macro MAPKIT_ADDINCL(Dirs...) {
+ ADDINCL(${pre=FOR idl :Dirs})
+ SET_APPEND(MAPKIT_IDL_INCLUDES $Dirs)
+}
+
+### @usage: MAPS_IDL_ADDINCL(dirnames...) # internal
+###
+### Warpper for MAPKIT_ADDINCL macro which is used for mobile mapkit build
+macro MAPS_IDL_ADDINCL(Dirs...) {
+ MAPKIT_ADDINCL($Dirs)
+}
+
+### @usage: _MAPKITIDL_PROXY(args...) # internal
+###
+### Proxy macro for maps_mobile_idl plugin
+macro _MAPKITIDL_PROXY(Args...) {
+ _PROCESS_MAPS_MOBILE_IDL($Args)
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_TEXT_DEPS ${ext=idl:Args})
+}
+
+MAPS_IDL_FILTER=
+
+### @usage: MAPS_IDL_SRCS(filenames...) # internal
+###
+### Warpper for MAPKITIDL macro which is used for mobile mapkit build
+macro MAPS_IDL_SRCS(Srcs...) {
+ _MAPKITIDL_PROXY($Srcs ${MAPS_IDL_FILTER})
+}
+
+### @usage: MAPS_IDL_GLOBAL_SRCS(filenames...) # internal
+###
+### Warpper for MAPKITIDL macro which is used for mobile mapkit build
+macro MAPS_IDL_GLOBAL_SRCS(Srcs...) {
+ _MAPKITIDL_PROXY(GLOBAL_OUTPUTS $Srcs ${MAPS_IDL_FILTER})
+}
+
+### @usage: MAPSMOBI_SRCS(filenames...) # internal
+###
+### Make all source files listed as GLOBAL or not (depending on the value of
+### MAPSMOBI_USE_SRCS_GLOBAL). Be careful since the value of
+### MAPSMOBI_USE_SRCS_GLOBAL matters! If the value of this variable is equal to
+### GLOBAL then call to MAPSMOBI_SRCS() macro behaves like call to
+### GLOBAL_SRCS() macro otherwise the value of MAPSMOBI_USE_SRCS_GLOBAL is
+### treated as a file name and a call to MAPSMOBI_SRCS() macro behaves like a
+### call to SRCS() macro with additional argument which is the value of
+### MAPSMOBI_USE_SRCS_GLOBAL variable
+macro MAPSMOBI_SRCS(FILES...) {
+ ALL_SRCS(${MAPSMOBI_USE_SRCS_GLOBAL} $FILES)
+}
+
+BEFORE_PEERS=
+AFTER_PEERS=
+when ($MAPKIT_WHOLE_ARCHIVE == "yes") {
+ when($OS_LINUX) {
+ BEFORE_PEERS += $START_WHOLE_ARCHIVE_VALUE
+ AFTER_PEERS += $END_WHOLE_ARCHIVE_VALUE
+ }
+ elsewhen($OS_DARWIN) {
+ LDFLAGS+=-Wl,-all_load
+ }
+}
+
+### @usage: MAPKIT_ENABLE_WHOLE_ARCHIVE() # internal deprecated
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPKIT_ENABLE_WHOLE_ARCHIVE() {
+ ENABLE(MAPKIT_WHOLE_ARCHIVE)
+}
+
+### @usage: USE_IDL_CPP()
+###
+### This macro forces to use H_CPP_IDL (implementation library) variant of
+### MAPS_IDL_LIBRARY multimodule instead of H_IDL (header only library) variant
+### which is used by default
+macro USE_IDL_CPP() {
+ SET(PEERDIR_TAGS __EMPTY__ CPP_PROTO H_CPP_IDL)
+}
+
+
+_LINK_JSRC=${cwd:ARCADIA_BUILD_ROOT} $YMAKE_PYTHON3 ${input:"build/scripts/link_jsrc.py"} --input $AUTO_INPUT --output $TARGET ${kv;hide:"p JL"} ${kv;hide:"pc light-blue"} ${kv;hide:"show_out"}
+_LINK_JSRC_MF=$_LINK_JSRC && $GENERATE_MF
+
+### @usage: MAPS_IDL_JSRC_LIBRARY
+###
+### Create .jsrc output - archive of megred .jsrc inputs
+module MAPS_IDL_JSRC_LIBRARY: JSRC_LIBRARY {
+ .CMD=_LINK_JSRC_MF
+ .EXTS=.jsrc
+}
+
+### _MAPS_IDL_LIBRARY_EPILOGUE() #internal
+###
+### This macro executes macros which should be invoked after all user specified macros in the ya.make file
+macro _MAPS_IDL_LIBRARY_EPILOGUE() {
+ _GLOB(MAPKIT_IDL_FRAMEWORK_FILES ${ARCADIA_ROOT}/${MAPKIT_IDL_FRAMEWORK}/*.framework)
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS $MAPKIT_IDL_FRAMEWORK_FILES)
+}
+
+### @usage: MAPS_IDL_LIBRARY()
+###
+### Definition of multimodule that builds various variants of libraries.
+### The particular variant is selected based on where PEERDIR to IDL_LIBRARY comes from.
+### Now supported 2 variants: C++, Java
+### Java version is not really a library but an archive of generated Java sources
+multimodule MAPS_IDL_LIBRARY {
+ module H_IDL: LIBRARY {
+ .ALIASES=SRCS=MAPS_IDL_SRCS GLOBAL_SRCS=MAPS_IDL_GLOBAL_SRCS ADDINCL=MAPKIT_ADDINCL MAPSMOBI_SRCS=MAPS_IDL_SRCS
+ .EPILOGUE=_MAPS_IDL_LIBRARY_EPILOGUE
+
+ ENABLE(H_IDL)
+ ENABLE(CPP_IDL)
+ SET(PEERDIR_TAGS H_IDL CPP_PROTO __EMPTY__)
+ SET(MAPS_IDL_FILTER FILTER .h)
+
+ NO_UTIL()
+
+ PROTO_ADDINCL(${MAPKIT_PROTO_ROOT})
+ }
+
+ module H_CPP_IDL: LIBRARY {
+ .ALIASES=SRCS=MAPS_IDL_SRCS GLOBAL_SRCS=MAPS_IDL_GLOBAL_SRCS ADDINCL=MAPKIT_ADDINCL MAPSMOBI_SRCS=MAPS_IDL_SRCS
+ .DEFAULT_NAME_GENERATOR=DirName
+ .PEERDIRSELF=H_IDL
+ .EPILOGUE=_MAPS_IDL_LIBRARY_EPILOGUE
+
+ ENABLE(H_CPP_IDL)
+ ENABLE(CPP_IDL)
+ SET(PEERDIR_TAGS H_IDL CPP_PROTO __EMPTY__)
+ SET(MAPS_IDL_FILTER FILTER .cpp .m .mm .dart)
+ DISABLE(START_TARGET)
+
+ NO_UTIL()
+ }
+
+ module JAVA_IDL: MAPS_IDL_JSRC_LIBRARY {
+ .ALIASES=SRCS=MAPS_IDL_SRCS GLOBAL_SRCS=MAPS_IDL_SRCS ADDINCL=MAPKIT_ADDINCL MAPSMOBI_SRCS=MAPS_IDL_SRCS
+ .IGNORED=CPP_ADDINCL
+ .EPILOGUE=_MAPS_IDL_LIBRARY_EPILOGUE
+ SET(PEERDIR_TAGS JAVA_IDL JAVA_PROTO)
+ SET(MAPS_IDL_FILTER FILTER .java)
+ ENABLE(JAVA_IDL)
+
+ PROTO_ADDINCL(${MAPKIT_PROTO_ROOT})
+ }
+}
+
+_IDL_TOOL_EXTRA_ARGS=
+when ($MAPS_MOBILE_USE_STD_VARIANT == "yes") {
+ _IDL_TOOL_EXTRA_ARGS+=--use-std-variant
+}
+when ($MAPS_MOBILE_PUBLIC_API == "yes") {
+ _IDL_TOOL_EXTRA_ARGS+=--public
+}
+when ($MAPS_MOBILE_ENABLE_NAVI_SERIALIZATION == "yes") {
+ _IDL_TOOL_EXTRA_ARGS+=--enable-navi-serialization
+}
+
+_IDL_TOOL_CMDLINE=$GENERATE_MF && ${cwd:ARCADIA_ROOT} ${tool:"tools/idl/bin"} --in-proto-root maps/doc/proto --base-proto-package yandex.maps.proto ${pre=--out-base-root :OUT_BASE_ROOT} ${pre=--out-android-root :OUT_ANDROID_ROOT} ${pre=--out-ios-root :OUT_IOS_ROOT} ${pre=--out-dart-root :OUT_BASE_ROOT} ${pre=--out-dart-cpp-root :OUT_BASE_ROOT} ${pre=-F :FRAMEWORK_DIRS} ${pre=-I :INCLUDES} ${_IDL_TOOL_EXTRA_ARGS} ${hide;input:IN} ${hide;output:OUT} ${hide;output;noauto:OUT_NOAUTO} ${hide;output_include:OUTPUT_INCLUDES} ${IDLS} ${kv;hide:"p ID"} ${kv;hide:"pc white"} ${hide:MAPSMOBI_FAKEID} ${hide;suf=filter_in;join=|:FILTER_IN} ${hide;suf=filter_out;join=|:FILTER_OUT} ${kv;hide:"show_out"}
+
+### @usage: _RUN_IDL_TOOL(...) # internal
+###
+### Run idl tool within non-JAVA_IDL submodule. This macro is called from _PROCESS_MAPS_MOBILE_IDL macro.
+macro _RUN_IDL_TOOL(OUT_BASE_ROOT="", OUT_ANDROID_ROOT="", OUT_IOS_ROOT="", IN[], OUT[], OUT_NOAUTO[], OUTPUT_INCLUDES[], INCLUDES[], FRAMEWORK_DIRS[], IDLS[], FILTER_IN[], FILTER_OUT[]) {
+ .CMD=$_IDL_TOOL_CMDLINE
+}
+
+### @usage: _RUN_IDL_TOOL(...) # internal
+###
+### Run idl tool within JAVA_IDL submodule. This macro is called from _PROCESS_MAPS_MOBILE_IDL macro.
+macro _RUN_IDL_TOOL_JAVA(OUT_BASE_ROOT="", OUT_ANDROID_ROOT="", OUT_IOS_ROOT="", IN[], OUT[], OUT_NOAUTO[], OUTPUT_INCLUDES[], INCLUDES[], FRAMEWORK_DIRS[], IDLS[], FILTER_IN[], FILTER_OUT[]) {
+ .CMD=$_IDL_TOOL_CMDLINE && $YMAKE_PYTHON3 ${input:"build/scripts/tar_sources.py"} --output ${output;suf=$_HASH_HELPER($IDLS).jsrc:"_"} --input $OUT_ANDROID_ROOT --exts .java
+}
+
+### @usage: MAPSMOBI_COLLECT_ASSETS_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_ASSETS_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*)
+ RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPSMOBI_COLLECT_AIDL_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_AIDL_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*.aidl)
+ RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPSMOBI_COLLECT_JAVA_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_JAVA_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*.java)
+ RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPSMOBI_COLLECT_JNI_LIBS_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_JNI_LIBS_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*.so)
+ RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPSMOBI_COLLECT_RES_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_RES_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*.(xml|png))
+ RESTRICT_PATH(maps/mobile maps/automotive MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPSMOBI_COLLECT_TPL_FILES(varname [dir]) # internal
+###
+### This macro is strictly prohibited to use outside of mapsmobi project
+macro MAPSMOBI_COLLECT_TPL_FILES(VAR, DIR="") {
+ _GLOB($VAR ${suf=/:DIR}**/*.tpl)
+ RESTRICT_PATH(tools/idl MSG This macro is for use in mapsmobi projects)
+}
+
+### @usage: MAPS_GARDEN_COLLECT_MODULE_TRAITS(varnamei dir) # internal
+###
+### This macro is strictly prohibited to use outside of maps/garden project
+macro MAPS_GARDEN_COLLECT_MODULE_TRAITS(VAR, DIR) {
+ _GLOB($VAR $DIR/*/module_traits.json)
+ RESTRICT_PATH(maps/garden/sdk/module_traits/tests/module_traits_bundle MSG This macro is for use in maps/garden project)
+}
+
+# mapsmobi build configuration
+
+MAPSMOBI_FAKEID=${FAKEID}_r9927169
+MAPSMOBI_BUILD=
+YANDEX_EXPORT=
+MAPSMOBI_CPP_PROTO_PLUGINS=
+STATIC_STL=
+EXPORT_ALL_SYMBOLS=
+when ($MAPSMOBI_BUILD_HOST || $MAPSMOBI_BUILD_TARGET) {
+ MAPSMOBI_BUILD=yes
+}
+when ($MAPSMOBI_BUILD) {
+ CFLAGS+=-DMOBILE_BUILD ${hide:MAPSMOBI_FAKEID}
+ MAPKIT_BASE_PROTO_PACKAGE=yandex.maps.proto
+ MAPKIT_PROTO_ROOT=maps/doc/proto
+ MAPKIT_IDL_FRAMEWORK=maps/mobile/libs/idl_frameworks
+}
+when ($MAPSMOBI_BUILD_TARGET) {
+ ALLOCATOR=FAKE
+ USE_VANILLA_PROTOC=yes
+ PROTOBUF_LITE=yes
+ CPP_PROTO_PLUGINS=lite${pre=,:MAPSMOBI_CPP_PROTO_PLUGINS}:
+ when ($OPENSOURCE != "yes") {
+ SYSINCL+=build/yandex_specific/sysincl/mapsmobi.yml
+ }
+
+ CFLAGS+=-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DBOOST_CB_DISABLE_DEBUG -DBOOST_COROUTINES_NO_DEPRECATION_WARNING -DYANDEX_EXPORT=${YANDEX_EXPORT}
+}
+when ($MAPSMOBI_BUILD_TARGET && $OS_ANDROID) {
+ JDK_REAL_VERSION=11
+ MAPSMOBI_CPP_PROTO_PLUGINS="dllexport_decl=YANDEX_EXPORT"
+ YANDEX_EXPORT=__attribute__((visibility(\"default\")))
+ CFLAGS+=-fvisibility=hidden
+
+ when ($MAPS_MOBILE_EXPORT_CPP_API) {
+ LDFLAGS+=-lc++_shared
+ CFLAGS+=-DZLIB_DLL
+ CFLAGS+=-DPROTOBUF_USE_DLLS -DLIBPROTOBUF_EXPORTS
+ CFLAGS+=-DPNG_IMPEXP=${YANDEX_EXPORT}
+ CFLAGS+=-DBOOST_ALL_DYN_LINK
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=${YANDEX_EXPORT}
+ DYNAMIC_BOOST=yes
+ }
+ otherwise {
+ STATIC_STL=yes
+ YANDEX_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_VISIBLE=
+ LDFLAGS+=-lc++_static -Wl,--exclude-libs,ALL -static-libstdc++
+ USE_GLOBAL_CMD=no
+ }
+
+ when ($EXPORT_ALL_SYMBOLS) {
+ CFLAGS+=-fvisibility=default
+ }
+
+ when ($NO_DEBUGINFO != "yes" && $REDUCED_DEBUGINFO) {
+ CFLAGS+=-g1
+ }
+
+ CFLAGS+=-DANDROID -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -Wa,--noexecstack
+ CFLAGS+=-Qunused-arguments -Wno-unused-function -Wno-pessimizing-move -Wno-missing-field-initializers -Wno-missing-braces -Wno-unused-parameter -Wno-vexing-parse -Wno-sign-compare -Wno-deprecated-declarations
+
+ LDFLAGS+=-lc -lm -llog -Bsymbolic -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--no-undefined
+
+ when ($BT_RELEASE || $BT_RELWITHDEBINFO) {
+ CFLAGS+=-fomit-frame-pointer -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
+ LDFLAGS+=-Wl,--gc-sections -Wl,--build-id
+ }
+
+ when ($ARCH_ARM7) {
+ CFLAGS+=-mfloat-abi=softfp
+ #Android clang overaligns some float types which causes NEON programs to fail on old Android versions. So we disable NEON.
+ #See https://github.com/android/ndk/issues/640 for more information
+ CFLAGS+=-mfpu=vfpv3-d16
+ }
+ elsewhen ($ARCH_ARM64) {
+ }
+ elsewhen ($ARCH_I386) {
+ CFLAGS+=-fstrict-aliasing -mstackrealign -DBOOST_CONTEXT_TLS_STACK_PROTECTOR
+ }
+ elsewhen ($ARCH_X86_64) {
+ CFLAGS+=-fstrict-aliasing -mstackrealign -march=x86-64 -msse4.2 -mpopcnt -m64 -DBOOST_CONTEXT_TLS_STACK_PROTECTOR
+ }
+ otherwise {
+ PEERDIR+=__unsupported_architecture_for_android__
+ }
+}
+when ($MAPSMOBI_BUILD_TARGET && $OS_DARWIN) {
+ QT_REQUIRED=yes
+ LDFLAGS+=-lc++
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_VISIBLE=
+}
+when ($MAPSMOBI_BUILD_TARGET && $OS_IOS) {
+ CFLAGS+=-DIOS -stdlib=libc++ -fvisibility=hidden
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_VISIBLE=
+ when(!$MAPS_MOBILE_PUBLIC_API || $OS_IOSSIM) {
+ CFLAGS+=-DBUILDING_WITH_VULKAN_IOS
+ BUILDING_WITH_VULKAN_IOS=yes
+ }
+}
+when ($MAPSMOBI_BUILD_TARGET && $OS_LINUX) {
+ when ($NO_GRAPHICS != "yes") {
+ QT_REQUIRED=yes
+ OPENGL_REQUIRED=yes
+ }
+ OS_SDK=ubuntu-16
+ PIC=yes
+ LDFLAGS+=-lstdc++ -lgcc_s
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_VISIBLE=
+}
+when ($MAPSMOBI_BUILD_TARGET && $OS_YOCTO) {
+ QT_REQUIRED=yes
+ PIC=yes
+ CFLAGS+=-DBOOST_SYMBOL_EXPORT=
+ CFLAGS+=-DBOOST_SYMBOL_VISIBLE=
+}
diff --git a/build/conf/project_specific/maps/sproto.conf b/build/conf/project_specific/maps/sproto.conf
new file mode 100644
index 0000000000..95234b5f75
--- /dev/null
+++ b/build/conf/project_specific/maps/sproto.conf
@@ -0,0 +1,21 @@
+### @usage: EXPORT_YMAPS_PROTO() # maps-specific
+###
+### Maps-specific .proto handling: IMPORT_YMAPS_PROTO() + maps protobuf namespace.
+macro EXPORT_YMAPS_PROTO() {
+ PROTO_NAMESPACE(maps/doc/proto)
+}
+
+macro _YMAPS_GENERATE_SPROTO_HEADER(File) {
+ .CMD=${cwd;rootdir;input:File} ${tool:"maps/libs/sproto/sprotoc"} -I=./$PROTO_NAMESPACE -I=$ARCADIA_ROOT/$PROTO_NAMESPACE -I=$ARCADIA_BUILD_ROOT -I=$PROTOBUF_PATH --sproto_out=$ARCADIA_BUILD_ROOT/$PROTO_NAMESPACE ${input;rootrel:File} ${output;hide;norel;nopath;noext:File.sproto.h} ${kv;hide:"p PB"} ${kv;hide:"pc yellow"}
+ .PEERDIR=maps/libs/sproto
+}
+
+### @usage: YMAPS_SPROTO(ProtoFiles...) # maps-specific
+###
+### Maps-specific .proto handling: generate .sproto.h files using maps/libs/sproto/sprotoc.
+macro YMAPS_SPROTO(FILES...) {
+ SET(PROTO_HEADER_EXTS .pb.h .sproto.h)
+ foreach (FILE : $FILES) {
+ [.proto]=$_YMAPS_GENERATE_SPROTO_HEADER($FILE)
+ }
+}
diff --git a/build/conf/project_specific/other.conf b/build/conf/project_specific/other.conf
new file mode 100644
index 0000000000..d187e706c4
--- /dev/null
+++ b/build/conf/project_specific/other.conf
@@ -0,0 +1,11 @@
+# Catboost
+BUILD_CATBOOST_SCRIPT=build/scripts/build_catboost.py
+### @usage: BUILD_CATBOOST(cbmodel cbname)
+###
+### Generate catboost model and access code.
+### cbmodel - CatBoost model file name (*.cmb).
+### cbname - name for a variable (of NCatboostCalcer::TCatboostCalcer type) to be available in CPP code.
+### CatBoost specific macro.
+macro BUILD_CATBOOST(CbModel, CbName) {
+ .CMD=$YMAKE_PYTHON ${input:BUILD_CATBOOST_SCRIPT} build_cb_f $ARCADIA_ROOT $ARCH_TOOL ${input:CbModel} $CbName ${output;pre=cb.:CbName.cpp} ${output;hide;pre=CB_External_;suf=.rodata:CbName} ${output_include;hide:"kernel/catboost/catboost_calcer.h"} ${kv;hide:"p CB"} ${kv;hide:"pc yellow"}
+}
diff --git a/build/conf/project_specific/uservices.conf b/build/conf/project_specific/uservices.conf
new file mode 100644
index 0000000000..5bb931744c
--- /dev/null
+++ b/build/conf/project_specific/uservices.conf
@@ -0,0 +1,40 @@
+macro _MOVE(Src, OUT="", OUT_NOAUTO="", CPP_DEPS[], OUTPUT_INCLUDES[]) {
+ .CMD=$MOVE_FILE ${input:Src} ${output;norel:OUT} ${output;noauto;norel:OUT_NOAUTO} ${induced_deps=h+cpp;hide:CPP_DEPS} ${output_includes;hide:OUTPUT_INCLUDES} ${kv;hide:"p MV"} ${kv;hide:"pc light-cyan"}
+}
+
+macro USRV_BUILD(FROM="Please specify generated .tar-file as FROM", DEPS_FILE="NO_DEPS", OUT_NOAUTO[], Files...) {
+ .CMD=${tool:"taxi/uservices/arc-gen/unpack-tar"} --source ${input:FROM} --target ${BINDIR} --suffix .usrv ${Files} ${OUT_NOAUTO} ${output;noauto;hide;suf=.usrv:OUT_NOAUTO} ${output;noauto;hide;suf=.usrv:Files} ${kv;hide:"p USB"} ${kv;hide:"pc light-cyan"}
+ _PROCESS_USRV_FILES(${DEPS_FILE} ${Files} OUT_NOAUTO ${OUT_NOAUTO})
+}
+
+macro _PROCESS_USRV_FILES(DepsFile, Files...) {
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${DepsFile})
+}
+
+macro _USRV_ALL_SRCS_HELPER(SUFFIX, RECURSIVE?"/**/*${SUFFIX}.(c|cc|cpp|h|hpp|hxx|make)":"/*${SUFFIX}.(c|cc|cpp|h|hpp|hxx|make)", DIRS[], EXCLUDE[]) {
+ _GLOB(_ALL_USRV_SOURCES ${suf=${RECURSIVE}:DIRS} EXCLUDE $EXCLUDE)
+ SRCS($_ALL_USRV_SOURCES)
+}
+
+
+### @usage: USRV_ALL_SRCS([RECURSIVE] [Dirs...] [EXCLUDE <globs...>])
+###
+### SRCS for all C++ sources in current or given directories.
+### C++ files are ones with following extensions: `.c`, `.cc`, `.cpp`, `.h`, `.hpp` and `.hxx`.
+###
+### If dirs are omitted the current one is used.
+###
+### @params:
+### - `Dirs` - start directories for files lookup
+### - `RECURSIVE`- makes lookup recursive with resprect to Dirs
+### - `SUFFIX` - file name should end with the provided suffix
+### - `EXCLUDE` - glob pattern to be excluded from results. In recursive mode use recursive pattern (`**`) to
+### exclude files in subdirectories
+###
+### Note: Only one such macro per module is allowed
+### Note: This macro is restricted to taxi/uservices
+### Note: Macro is designed to reject any ya.make files in Dirs except current one
+macro USRV_ALL_SRCS(RECURSIVE?"RECURSIVE":"", SUFFIX="", EXCLUDE[], Dirs...) {
+ RESTRICT_PATH(devtools/dummy_arcadia/models/macros/uservices taxi/uservices)
+ _USRV_ALL_SRCS_HELPER(${SUFFIX} ${RECURSIVE} DIRS ./${Dirs} EXCLUDE ya.make $EXCLUDE)
+}
diff --git a/build/conf/project_specific/yql_udf.conf b/build/conf/project_specific/yql_udf.conf
new file mode 100644
index 0000000000..91ca0a3362
--- /dev/null
+++ b/build/conf/project_specific/yql_udf.conf
@@ -0,0 +1,247 @@
+when ($SANITIZER_TYPE || $USE_ARCADIA_PYTHON == "no" || $UDF_NO_PROBE == "yes" || $MUSL == "yes" || $TIDY == "yes") {
+ YQL_UDF_LINK_CMD=$LINK_DYN_LIB
+ YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB
+}
+otherwise {
+ YQL_UDF_LINK_CMD=$LINK_DYN_LIB && ${tool:"yql/tools/udf_probe"} $TARGET ${kv;hide:"p UD"}
+ YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB && ${tool:"yql/tools/udf_probe"} $TARGET ${kv;hide:"p UD"}
+}
+
+### @usage: UDF_BASE(name [EXPORTS symlist_file] [PREFIX prefix]) #internal
+###
+### The base logic of all UDF extension modules (User-Defined Functions).
+### Processing EXPORTS and PREFIX is the same as for DLL.
+###
+### https://wiki.yandex-team.ru/robot/manual/kiwi/userguide/#polzovatelskiefunkciiudftriggerykwcalc
+module UDF_BASE: DLL_UNIT {
+ when ($MSVC != "yes" && $DARWIN != "yes") {
+ LDFLAGS+= -Wl,-Bsymbolic
+ }
+}
+
+UDF_NO_PROBE="no"
+### @usage: UDF_NO_PROBE()
+###
+### Disable UDF import check at build stage
+macro UDF_NO_PROBE() {
+ ENABLE(UDF_NO_PROBE)
+}
+
+### @usage: YQL_UDF_TEST([name])
+###
+### The module to test YQL C++ UDF.
+###
+### Documentation: https://yql.yandex-team.ru/docs/yt/libraries/testing/
+### Documentation about the Arcadia test system: https://wiki.yandex-team.ru/yatool/test/
+module YQL_UDF_TEST: PY3TEST_BIN {
+ PEERDIR(yql/library/udf_test)
+ PEERDIR(yt/python/client_lite)
+
+ DEPENDS(yql/tools/astdiff)
+ DEPENDS(yql/tools/udf_resolver)
+ DEPENDS(yql/tools/yqlrun)
+ DATA(arcadia/ydb/library/yql/mount)
+ DATA(arcadia/yql/cfg/tests)
+}
+
+### @usage: _ADD_YQL_UDF_DEPS()
+###
+### Add all needed PEERDIRs to a YQL_UDF.
+###
+### https://yql.yandex-team.ru/docs/yt/udf/cpp/
+macro _ADD_YQL_UDF_DEPS() {
+ PEERDIR(ydb/library/yql/public/udf)
+ PEERDIR(ydb/library/yql/public/udf/support)
+}
+
+### @usage: _MAKE_YQL_UDF()
+###
+### Make module definition an YQL UDF: add all needed dependencies, properties and flags
+###
+### https://yql.yandex-team.ru/docs/yt/udf/cpp/
+macro _MAKE_YQL_UDF() {
+ _ADD_YQL_UDF_DEPS()
+ SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
+ # For Windows using declspecs
+ DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/ydb/library/yql/public/udf/udfs_exports.exports)
+
+ when ($WINDOWS == "yes") {
+ YQL_UDF_EXPORT=
+ }
+
+ SET(EXPORTS_FILE $YQL_UDF_EXPORT)
+}
+
+### @usage: YQL_UDF_MODULE(name)
+###
+### The extension module for YQL with C++ UDF (User Defined Function YQL)
+###
+### https://yql.yandex-team.ru/docs/yt/udf/cpp/
+module YQL_UDF_MODULE: UDF_BASE {
+ .CMD=YQL_UDF_LINK_CMD
+ _MAKE_YQL_UDF()
+ PROVIDES(YqlServicePolicy)
+}
+
+module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM {
+ .CMD=YQL_UDF_LINK_PRG_CMD
+ _MAKE_YQL_UDF()
+}
+
+UDF_SHARED_SEM=IGNORED
+
+### @usage: YQL_UDF(name)
+###
+### User-defined function for YQL
+###
+### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros.
+### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs.
+###
+### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE)
+multimodule YQL_UDF {
+ module YQL_UDF_SHARED: YQL_UDF_MODULE {
+ .SEM=UDF_SHARED_SEM
+ NO_CLANG_TIDY()
+ }
+ module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
+ .ALIASES=SRCS=GLOBAL_SRCS
+ .SEM=CPP_LIBRARY_SEM
+ .GLOBAL_SEM=CPP_OBJ_LIBRARY_SEM
+ OBJ_SUF=.udfs
+ _ADD_YQL_UDF_DEPS()
+ # disable credits generation for static library
+ SET(CREDITS_FLAGS)
+ when ($MSVC == "yes" || $CYGWIN == "yes") {
+ MODULE_SUFFIX=.static.lib
+ }
+ }
+}
+
+### @usage: YQL_ABI_VERSION(major minor release))
+###
+### Specifying the supported ABI for YQL_UDF.
+###
+### @see: [YQL_UDF()](#multimodule_YQL_UDF)
+macro YQL_ABI_VERSION(Major, Minor, Patch) {
+ YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch
+ SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
+}
+
+### @usage: YQL_LAST_ABI_VERSION()
+###
+### Use the last ABI for YQL_UDF
+###
+macro YQL_LAST_ABI_VERSION() {
+ YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION
+ SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
+}
+
+### @usage: YQL_PYTHON_UDF(name)
+###
+### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
+### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
+###
+### https://yql.yandex-team.ru/docs/yt/udf/python/
+module YQL_PYTHON_UDF: YQL_UDF_MODULE {
+ .IGNORED=USE_PYTHON2
+ .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
+
+ USE_PYTHON2()
+ _ARCADIA_PYTHON_ADDINCL()
+ PEERDIR(build/platform/python/ldflags)
+ PEERDIR(library/python/type_info)
+
+ DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
+
+ when ($WINDOWS == "yes") {
+ YQL_PYTHON_UDF_EXPORT=
+ }
+
+ ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
+ ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+ SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+}
+
+### @usage: YQL_PYTHON_UDF_PROGRAM(name)
+###
+### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
+### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
+###
+### https://yql.yandex-team.ru/docs/yt/udf/python/
+module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE {
+ .IGNORED=USE_PYTHON2
+ .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
+ USE_PYTHON2()
+ _ARCADIA_PYTHON_ADDINCL()
+ PEERDIR(build/platform/python/ldflags)
+ PEERDIR(library/python/type_info)
+
+ DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
+
+ when ($WINDOWS == "yes") {
+ YQL_PYTHON_UDF_EXPORT=
+ }
+
+ ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
+ ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+ SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+}
+
+### @usage: YQL_PYTHON3_UDF(name)
+###
+### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL).
+### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
+###
+### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
+module YQL_PYTHON3_UDF: YQL_UDF_MODULE {
+ .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3
+ _ARCADIA_PYTHON3_ADDINCL()
+ PEERDIR(build/platform/python/ldflags)
+ PEERDIR(library/python/type_info)
+
+ DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
+
+ when ($WINDOWS == "yes") {
+ YQL_PYTHON_UDF_EXPORT=
+ }
+
+ ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
+ ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+ SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
+}
+
+macro _MAKE_YQL_PYTHON_UDF_TEST() {
+ PEERDIR(library/python/pytest)
+ DEPENDS(yql/tools/run_python_udf)
+ SETUP_PYTEST_BIN(RUNNER_BIN $(BUILD_ROOT)/yql/tools/run_python_udf/run_python_udf)
+}
+
+### @usage: YQL_PYTHON_UDF_TEST(name)
+###
+### The Python test for Python YQL UDF (Python User Defined Function for YQL). The code should be a proper YQL_PYTHON_UDF.
+###
+### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
+###
+### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
+###
+### @example: https://a.yandex-team.ru/arc/trunk/arcadia/yql/udfs/test/simple/ya.make
+###
+### @see: [YQL_PYTHON_UDF()](#module_YQL_PYTHON_UDF)
+module YQL_PYTHON_UDF_TEST: YQL_PYTHON_UDF {
+ _MAKE_YQL_PYTHON_UDF_TEST()
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
+}
+
+### @usage: YQL_PYTHON3_UDF_TEST(name)
+###
+### The Python test for Python 3.x YQL UDF (User Defined Function for YQL). The code should be a proper YQL_PYTHON3_UDF.
+###
+### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
+###
+### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
+###
+### @see: [YQL_PYTHON3_UDF()](#module_YQL_PYTHON3_UDF)
+module YQL_PYTHON3_UDF_TEST: YQL_PYTHON3_UDF {
+ _MAKE_YQL_PYTHON_UDF_TEST()
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
+}
diff --git a/build/conf/project_specific/yt.conf b/build/conf/project_specific/yt.conf
new file mode 100644
index 0000000000..5bd292108f
--- /dev/null
+++ b/build/conf/project_specific/yt.conf
@@ -0,0 +1,5 @@
+macro GENERATE_YT_RECORD(Yaml, OUTPUT_INCLUDES[]) {
+ .CMD=${tool:"yt/yt/tools/record_codegen"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${output;hide;norel;noext;suf=.record.h:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output_include;hide:OUTPUT_INCLUDES} ${output_include;hide:"yt/yt/client/table_client/record_codegen_deps.h"} ${kv;hide:"p RC"}
+ .SEM=find_package Python3 && add_custom_command OUTPUT ${output;norel;noext;suf=.record.cpp:Yaml} ${output;norel;noext;suf=.record.h:Yaml} DEPENDS ${input:Yaml} ${input:"yt/yt/tools/record_codegen/__main__.py"} COMMAND Python3::Interpreter ${input:"yt/yt/tools/record_codegen/__main__.py"} --input ${input:Yaml} --output-root $ARCADIA_BUILD_ROOT --output-cpp ${output;norel;noext;suf=.record.cpp:Yaml} ${pre=--output-include :OUTPUT_INCLUDES} ${output;hide;norel;noext;suf=.record.h:Yaml}
+ PEERDIR(yt/yt/client)
+}