aboutsummaryrefslogtreecommitdiffstats
path: root/build/platform
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/platform
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/platform')
-rw-r--r--build/platform/android_sdk/ya.make20
-rw-r--r--build/platform/bfd/ya.make9
-rw-r--r--build/platform/binutils/binutils.resource7
-rw-r--r--build/platform/binutils/ya.make8
-rw-r--r--build/platform/cctools/ya.make12
-rw-r--r--build/platform/clang/arch.cmake27
-rwxr-xr-xbuild/platform/clang/clang-windows.sh31
-rw-r--r--build/platform/clang/ya.make24
-rw-r--r--build/platform/coverage_push_tool/ya.make10
-rw-r--r--build/platform/cuda/cuda_runtime_include.h13
-rw-r--r--build/platform/cuda/stdtree/ya.make13
-rw-r--r--build/platform/cuda/ya.make195
-rw-r--r--build/platform/gold/ya.make12
-rw-r--r--build/platform/intel_fpga_sdk/ya.make9
-rw-r--r--build/platform/ios_sdk/ya.make17
-rw-r--r--build/platform/java/error_prone/2.10.0/ya.make4
-rw-r--r--build/platform/java/error_prone/2.3.1/ya.make4
-rw-r--r--build/platform/java/error_prone/2.7.1/ya.make4
-rw-r--r--build/platform/java/error_prone/ya.make28
-rw-r--r--build/platform/java/groovy/ya.make10
-rw-r--r--build/platform/java/jacoco-agent/ya.make9
-rw-r--r--build/platform/java/jdk/jdk10/ya.make20
-rw-r--r--build/platform/java/jdk/jdk11/ya.make31
-rw-r--r--build/platform/java/jdk/jdk12/ya.make20
-rw-r--r--build/platform/java/jdk/jdk13/ya.make28
-rw-r--r--build/platform/java/jdk/jdk14/ya.make20
-rw-r--r--build/platform/java/jdk/jdk15/ya.make22
-rw-r--r--build/platform/java/jdk/jdk16/ya.make23
-rw-r--r--build/platform/java/jdk/jdk17/ya.make23
-rw-r--r--build/platform/java/jdk/jdk8/ya.make23
-rw-r--r--build/platform/java/jdk/resources.inc49
-rw-r--r--build/platform/java/jdk/ya.make311
-rw-r--r--build/platform/java/jni/ya.make29
-rw-r--r--build/platform/java/jstyle_lib/ya.make11
-rw-r--r--build/platform/java/kotlin/ya.make31
-rw-r--r--build/platform/java/kythe/ya.make10
-rw-r--r--build/platform/java/scriptgen/ya.make27
-rw-r--r--build/platform/java/uberjar/uberjar10/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar11/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar12/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar13/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar14/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar15/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar16/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar17/ya.make6
-rw-r--r--build/platform/java/uberjar/uberjar8/ya.make6
-rw-r--r--build/platform/java/uberjar/ya.make39
-rw-r--r--build/platform/java/ya.make10
-rw-r--r--build/platform/linux_sdk/README.md7
-rw-r--r--build/platform/linux_sdk/ya.make55
-rw-r--r--build/platform/lld/ya.make62
-rw-r--r--build/platform/local_so/readme.md3
-rw-r--r--build/platform/local_so/ya.make9
-rw-r--r--build/platform/macos_sdk/ya.make20
-rw-r--r--build/platform/macos_system_stl/ya.make15
-rw-r--r--build/platform/mapkit/ya.make32
-rw-r--r--build/platform/msvc/ya.make19
-rw-r--r--build/platform/nodejs/readme.md5
-rw-r--r--build/platform/nodejs/resources.inc2
-rw-r--r--build/platform/nodejs/ya.make17
-rw-r--r--build/platform/opengl/ya.make27
-rw-r--r--build/platform/perl/5.14/ya.make11
-rw-r--r--build/platform/perl/5.18/ya.make11
-rw-r--r--build/platform/perl/5.22/ya.make11
-rw-r--r--build/platform/perl/5.26/ya.make11
-rw-r--r--build/platform/perl/5.30/ya.make11
-rw-r--r--build/platform/perl/perl.inc33
-rw-r--r--build/platform/perl/perl_5.18.patch51
-rw-r--r--build/platform/perl/ya.make28
-rw-r--r--build/platform/python/ldflags/ya.make17
-rw-r--r--build/platform/python/python27/ya.make22
-rw-r--r--build/platform/python/python310/ya.make30
-rw-r--r--build/platform/python/python34/ya.make18
-rw-r--r--build/platform/python/python35/ya.make18
-rw-r--r--build/platform/python/python36/ya.make18
-rw-r--r--build/platform/python/python37/ya.make18
-rw-r--r--build/platform/python/python38/ya.make23
-rw-r--r--build/platform/python/python39/ya.make22
-rw-r--r--build/platform/python/readme.md83
-rw-r--r--build/platform/python/resources.inc32
-rw-r--r--build/platform/python/tests/test_common.py31
-rw-r--r--build/platform/python/tests/testlib.py21
-rw-r--r--build/platform/python/tests/ya.make36
-rw-r--r--build/platform/python/ya.make136
-rw-r--r--build/platform/python/ymake_python3/ya.make33
-rw-r--r--build/platform/qt/ya.make34
-rw-r--r--build/platform/test_tool/a.yaml16
-rw-r--r--build/platform/test_tool/host.ya.make.inc16
-rw-r--r--build/platform/test_tool/ya.make20
-rw-r--r--build/platform/wine/ya.make10
-rw-r--r--build/platform/xcode/swift/ya.make12
-rw-r--r--build/platform/xcode/tools/ya.make4
-rw-r--r--build/platform/xcode/tools/ya.make.inc9
-rw-r--r--build/platform/xcode/ya.make.inc16
-rw-r--r--build/platform/yfm/ya.make19
-rw-r--r--build/platform/yocto_sdk/yocto_sdk/ya.make11
96 files changed, 2412 insertions, 0 deletions
diff --git a/build/platform/android_sdk/ya.make b/build/platform/android_sdk/ya.make
new file mode 100644
index 0000000000..1e726065da
--- /dev/null
+++ b/build/platform/android_sdk/ya.make
@@ -0,0 +1,20 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:mapkit)
+
+IF (NOT OS_ANDROID)
+ MESSAGE(FATAL_ERROR Unsupported platform)
+ENDIF()
+
+IF (HOST_OS_LINUX)
+ # Android SDK for linux: Build-Tools 30.0.3, Platform 30
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ ANDROID_SDK
+ sbr:2564045529 FOR LINUX
+ )
+ DECLARE_EXTERNAL_RESOURCE(ANDROID_AVD sbr:2563860055)
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported host platform)
+ENDIF()
+
+END()
diff --git a/build/platform/bfd/ya.make b/build/platform/bfd/ya.make
new file mode 100644
index 0000000000..67501f665f
--- /dev/null
+++ b/build/platform/bfd/ya.make
@@ -0,0 +1,9 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/binutils/binutils.resource)
+
+LDFLAGS(-fuse-ld=$BINUTILS_ROOT_RESOURCE_GLOBAL/bin/ld.bfd)
+
+END()
diff --git a/build/platform/binutils/binutils.resource b/build/platform/binutils/binutils.resource
new file mode 100644
index 0000000000..28823ecd80
--- /dev/null
+++ b/build/platform/binutils/binutils.resource
@@ -0,0 +1,7 @@
+IF (HOST_OS_DARWIN AND OS_LINUX AND ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(BINUTILS_ROOT sbr:333256689)
+ELSEIF (HOST_OS_LINUX AND OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(BINUTILS_ROOT sbr:360916612)
+ELSE()
+ MESSAGE(FATAL_ERROR "There is no binutils for selected build configuration")
+ENDIF()
diff --git a/build/platform/binutils/ya.make b/build/platform/binutils/ya.make
new file mode 100644
index 0000000000..aedcb12f23
--- /dev/null
+++ b/build/platform/binutils/ya.make
@@ -0,0 +1,8 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib somov)
+
+INCLUDE(binutils.resource)
+
+END()
+
diff --git a/build/platform/cctools/ya.make b/build/platform/cctools/ya.make
new file mode 100644
index 0000000000..c17a6abc67
--- /dev/null
+++ b/build/platform/cctools/ya.make
@@ -0,0 +1,12 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ CCTOOLS_ROOT
+ sbr:2135298496 FOR LINUX
+ sbr:2135992724 FOR DARWIN
+ sbr:2135992724 FOR DARWIN-ARM64
+)
+
+END()
diff --git a/build/platform/clang/arch.cmake b/build/platform/clang/arch.cmake
new file mode 100644
index 0000000000..db0ae243e6
--- /dev/null
+++ b/build/platform/clang/arch.cmake
@@ -0,0 +1,27 @@
+# See https://github.com/llvm/llvm-project/blob/master/compiler-rt/cmake/builtin-config-ix.cmake
+
+IF (ARCH_I386 OR ARCH_I686)
+ SET(CLANG_ARCH i386)
+ELSEIF (ARCH_X86_64)
+ SET(CLANG_ARCH x86_64)
+ELSEIF (ARCH_ARM7 OR ARCH_ARM7_NEON)
+ SET(CLANG_ARCH armv7)
+ELSEIF (ARCH_ARM64 OR ARCH_AARCH64)
+ IF (OS_DARWIN OR OS_IOS)
+ SET(CLANG_ARCH arm64)
+ ELSE()
+ SET(CLANG_ARCH aarch64)
+ ENDIF()
+ELSEIF (ARCH_PPC64LE)
+ SET(CLANG_ARCH powerpc64le)
+ELSE()
+ MESSAGE(FATAL_ERROR "Unknown architecture")
+ENDIF()
+
+IF (OS_DARWIN)
+ SET(CLANG_RT_SUFFIX "_osx")
+ SET(CLANG_RT_DLLSUFFIX "_osx_dynamic")
+ELSE()
+ SET(CLANG_RT_SUFFIX "-${CLANG_ARCH}")
+ SET(CLANG_RT_DLLSUFFIX "-${CLANG_ARCH}")
+ENDIF()
diff --git a/build/platform/clang/clang-windows.sh b/build/platform/clang/clang-windows.sh
new file mode 100755
index 0000000000..73552e62c8
--- /dev/null
+++ b/build/platform/clang/clang-windows.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+version="${1:-11.0.0}"
+major="${version%%.*}"
+
+arcadia="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../../.. && pwd)"
+tmp="${TMPDIR:-/tmp}/clang"
+exe="LLVM-${version}-win64.exe"
+dir="clang-${version}-win"
+tar="${dir}.tar.gz"
+
+set -x
+
+mkdir -p "$tmp"
+cd "$tmp"
+test -e "$exe" || wget "https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/${exe}"
+
+rm -rf "$dir"
+mkdir -p "$dir"
+cd "$dir"
+7z x ../"$exe"
+
+"$arcadia"/ya \
+ make "$arcadia"/contrib/libs/llvm${major}/tools/{llvm-as,llvm-link,opt} \
+ -DNO_DEBUGINFO -r --target-platform=windows --no-src-links -I bin
+
+tar czf "../$tar" *
+
+printf '%q ' ya upload "$tmp/$tar" -d "Clang $version for Windows" --ttl inf --owner BUILD_TOOLS --type CLANG_TOOLKIT --attr platform=win32 --attr "version=$version"
+echo
diff --git a/build/platform/clang/ya.make b/build/platform/clang/ya.make
new file mode 100644
index 0000000000..342b928637
--- /dev/null
+++ b/build/platform/clang/ya.make
@@ -0,0 +1,24 @@
+RESOURCES_LIBRARY()
+
+LICENSE(BSD-3-Clause)
+
+OWNER(g:contrib)
+
+IF (CLANG10BC AND CLANG10 AND HOST_OS_LINUX)
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ CLANG # Clang 10
+ sbr:1871274282 FOR LINUX
+ sbr:1844539535 FOR DARWIN
+ )
+ELSE()
+ # Remove -std=c++17 flag from LLVM_COMPILE_CXX and CLANG_EMIT_AST_CXX macro when update clang to 11
+ # DEVTOOLS-7845
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ CLANG # Clang 7
+ sbr:707372498 FOR LINUX # In 942524429 and 958916803 llvm-link does not run.
+ sbr:942053644 FOR DARWIN
+ sbr:1006151596 FOR WIN32 # Generated by ./clang-windows.sh 7.1.0
+ )
+ENDIF()
+
+END()
diff --git a/build/platform/coverage_push_tool/ya.make b/build/platform/coverage_push_tool/ya.make
new file mode 100644
index 0000000000..675569dbe5
--- /dev/null
+++ b/build/platform/coverage_push_tool/ya.make
@@ -0,0 +1,10 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+IF(USE_SYSTEM_COVERAGE_PUSH_TOOL)
+ MESSAGE(WARNING System coverage push tool $USE_SYSTEM_COVERAGE_PUSH_TOOL will be used)
+ELSEIF(HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(COVERAGE_PUSH_TOOL sbr:1748856682)
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported host for COVERAGE_PUSH_TOOL)
+ENDIF()
+END()
diff --git a/build/platform/cuda/cuda_runtime_include.h b/build/platform/cuda/cuda_runtime_include.h
new file mode 100644
index 0000000000..e60aacc4fb
--- /dev/null
+++ b/build/platform/cuda/cuda_runtime_include.h
@@ -0,0 +1,13 @@
+#pragma once
+
+// Компилятор nvcc из CUDA Toolkit при компиляции файла включает неявную зависимость
+// $CUDA_ROOT/include/cuda_runtime.h, которая в свою очередь включает другие файлы
+// из $CUDA_ROOT, а так же из стандартной библиотеки C++. Файлы из внешних ресурсов
+// не доступны на этапе конфигурирования сборки, и зависимости из них не учитываются.
+// Это, в частности, приводит к поломке сборки с использованием nvcc в режиме sandboxing-а.
+
+// Здесь перечислены такие зависимости. Этот файл добавляется в качестве дополнительной
+// зависимости к каждой компиляции nvcc.
+
+#include <cmath>
+#include <new>
diff --git a/build/platform/cuda/stdtree/ya.make b/build/platform/cuda/stdtree/ya.make
new file mode 100644
index 0000000000..01feaee51e
--- /dev/null
+++ b/build/platform/cuda/stdtree/ya.make
@@ -0,0 +1,13 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib heretic)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(STD_TREE sbr:1094784663)
+ELSE()
+ MESSAGE(FATAL_ERROR "No stdc++ tree part for the selected platform found")
+ENDIF()
+LDFLAGS("-L$STD_TREE_RESOURCE_GLOBAL")
+EXTRALIBS(tree)
+
+END()
diff --git a/build/platform/cuda/ya.make b/build/platform/cuda/ya.make
new file mode 100644
index 0000000000..3615f682cd
--- /dev/null
+++ b/build/platform/cuda/ya.make
@@ -0,0 +1,195 @@
+RESOURCES_LIBRARY()
+
+# https://wiki.yandex-team.ru/devtools/cuda/
+
+OWNER(g:contrib somov)
+
+IF (NOT HAVE_CUDA)
+ MESSAGE(FATAL_ERROR "No CUDA Toolkit for your build")
+ENDIF()
+
+IF (USE_ARCADIA_CUDA)
+ IF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
+ IF (OS_LINUX AND ARCH_X86_64)
+ IF (CUDA_VERSION == "11.4")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2410761119) # CUDA Toolkit 11.4.2 for Linux x86-64
+ ELSEIF (CUDA_VERSION == "11.3")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2213063565) # CUDA Toolkit 11.3.1 for Linux x86-64
+ ELSEIF (CUDA_VERSION == "11.2")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2073566375) # CUDA Toolkit 11.2.2 for Linux x86-64
+ ELSEIF (CUDA_VERSION == "11.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1882836946) # CUDA Toolkit 11.1.1 for Linux x86-64
+ ELSEIF (CUDA_VERSION == "11.0")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1647896014) # CUDA Toolkit 11.0.2 for Linux x86-64
+ ELSEIF (CUDA_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2077988857) # CUDA Toolkit 10.1.168 for Linux x86-64
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+ ELSEIF(OS_LINUX AND ARCH_AARCH64)
+ IF (CUDA_VERSION == "11.3")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2227720086) # CUDA Toolkit 11.3.20210513 (11.3.1) for Linux x86-64 with linux-aarch64 support
+ # host tools installer https://sandbox.yandex-team.ru/resource/2227828799/view
+ # cross compile parts installer https://sandbox.yandex-team.ru/resource/2227885870/view
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_LINUX AND HOST_ARCH_PPC64LE)
+ IF (OS_LINUX AND ARCH_PPC64LE)
+ IF (CUDA_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1586537264) # CUDA Toolkit 10.1.168 for Linux ppc64le
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
+ IF (OS_DARWIN AND ARCH_X86_64)
+ IF (CUDA_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:978727023) # CUDA Toolkit 10.1.168 for macOS x86-64
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
+ IF (OS_WINDOWS AND ARCH_X86_64)
+ IF (CUDA_VERSION == "11.3")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:2215101513) # CUDA Toolkit 11.3.1 for Windows x86-64
+ ELSEIF (CUDA_VERSION == "11.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:1896564605) # CUDA Toolkit 11.1.1 for Windows x86-64
+ ELSEIF (CUDA_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA sbr:978734165) # CUDA Toolkit 10.1.168 for Windows x86-64
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_NOT_FOUND)
+ ENDIF()
+ENDIF()
+
+IF (USE_ARCADIA_CUDA_HOST_COMPILER)
+ IF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
+ IF (OS_LINUX AND ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1886578148) # Clang 11.0.0 for linux-x86_64
+ IF (CUDA_VERSION VERSION_LT "11.2")
+ # Equivalent to nvcc -allow-unsupported-compiler (present since 11.0).
+ CFLAGS(GLOBAL "-D__NV_NO_HOST_COMPILER_CHECK")
+ ENDIF()
+ ELSEIF(OS_LINUX AND ARCH_AARCH64)
+ DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1886578148) # Clang 11.0.0 for linux-x86_64
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_LINUX AND HOST_ARCH_PPC64LE)
+ IF (OS_LINUX AND ARCH_PPC64LE)
+ IF (CUDA_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:1566513994) # Clang 7.0 for Linux ppc64le (not latest)
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
+ IF (OS_DARWIN AND ARCH_X86_64)
+ SET(__XCODE_RESOURCE_NAME CUDA_HOST_TOOLCHAIN)
+ IF (CUDA_VERSION == "10.1")
+ SET(__XCODE_TOOLCHAIN_VERSION "9.2") # (not latest)
+ ELSE()
+ SET(__XCODE_TOOLCHAIN_VERSION "")
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+ IF (__XCODE_TOOLCHAIN_VERSION)
+ INCLUDE(${ARCADIA_ROOT}/build/platform/xcode/ya.make.inc)
+ ENDIF()
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+
+ ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
+ IF (OS_WINDOWS AND ARCH_X86_64)
+ # To create this toolchain, install MSVS on Windows and run:
+ # devtools/tools_build/pack_sdk.py msvc out.tar
+ # Note: it will contain patched "VC/Auxiliary/Build/vcvarsall.bat"
+ # to prevent "nvcc fatal : Host compiler targets unsupported OS."
+ IF (CUDA_HOST_MSVC_VERSION == "14.28.29910")
+ DECLARE_EXTERNAL_RESOURCE(CUDA_HOST_TOOLCHAIN sbr:2153212401)
+ ELSE()
+ MESSAGE(FATAL_ERROR "Unexpected or unspecified Microsoft Visual C++ CUDA host compiler version")
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+
+ ELSE()
+ ENABLE(CUDA_HOST_COMPILER_NOT_FOUND)
+ ENDIF()
+ENDIF()
+
+IF (CUDA_NOT_FOUND)
+ MESSAGE(FATAL_ERROR "No CUDA Toolkit for the selected platform")
+ENDIF()
+
+IF (CUDA_HOST_COMPILER_NOT_FOUND)
+ MESSAGE(FATAL_ERROR "No CUDA host compiler for the selected platform and CUDA Toolkit version ${CUDA_VERSION}")
+ENDIF()
+
+# Use thrust and cub from Arcadia, not from HPC SDK
+# NB:
+# it would be better to use PEERDIR instead,
+# but ymake does not allow PEERDIRs from RESOURCES_LIBRARY.
+ADDINCL(
+ GLOBAL contrib/libs/nvidia/thrust
+ GLOBAL contrib/libs/nvidia/cub
+)
+
+IF (HOST_OS_WINDOWS)
+ SET_APPEND_WITH_GLOBAL(USER_CFLAGS GLOBAL "\"-I${CUDA_ROOT}/include\"")
+ELSE()
+ CFLAGS(GLOBAL "-I${CUDA_ROOT}/include")
+ENDIF()
+
+IF (HOST_OS_WINDOWS)
+ SET_APPEND(LDFLAGS_GLOBAL "\"/LIBPATH:${CUDA_ROOT}/lib/x64\"")
+ELSEIF(HOST_OS_LINUX AND OS_LINUX AND ARCH_AARCH64)
+ LDFLAGS("-L${CUDA_ROOT}/targets/sbsa-linux/lib")
+ELSEIF(HOST_OS_LINUX)
+ LDFLAGS("-L${CUDA_ROOT}/lib64")
+ELSE()
+ LDFLAGS("-L${CUDA_ROOT}/lib")
+ENDIF()
+
+IF (CUDA_REQUIRED)
+ IF(HOST_OS_LINUX)
+ LDFLAGS("-L${CUDA_ROOT}/lib64/stubs")
+ EXTRALIBS(-lcuda)
+ ELSEIF(HOST_OS_DARWIN)
+ LDFLAGS("-F${CUDA_ROOT}/lib/stubs -framework CUDA")
+ ENDIF()
+ENDIF()
+
+IF (HOST_OS_WINDOWS)
+ LDFLAGS(cudadevrt.lib cudart_static.lib)
+ELSE()
+ EXTRALIBS(-lcudadevrt -lcudart_static -lculibos)
+ENDIF()
+
+END()
diff --git a/build/platform/gold/ya.make b/build/platform/gold/ya.make
new file mode 100644
index 0000000000..91f01602f7
--- /dev/null
+++ b/build/platform/gold/ya.make
@@ -0,0 +1,12 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/binutils/binutils.resource)
+
+LDFLAGS(
+ -fuse-ld=$BINUTILS_ROOT_RESOURCE_GLOBAL/bin/ld.gold
+ -Wl,-z,noexecstack
+)
+
+END()
diff --git a/build/platform/intel_fpga_sdk/ya.make b/build/platform/intel_fpga_sdk/ya.make
new file mode 100644
index 0000000000..5cefb02250
--- /dev/null
+++ b/build/platform/intel_fpga_sdk/ya.make
@@ -0,0 +1,9 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+DECLARE_EXTERNAL_RESOURCE(INTEL_FPGA_SDK sbr:606576548)
+
+LDFLAGS(-L$INTEL_FPGA_SDK_RESOURCE_GLOBAL/lib)
+
+END()
diff --git a/build/platform/ios_sdk/ya.make b/build/platform/ios_sdk/ya.make
new file mode 100644
index 0000000000..b1246a70b9
--- /dev/null
+++ b/build/platform/ios_sdk/ya.make
@@ -0,0 +1,17 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(NEED_PLATFORM_PEERDIRS no)
+
+IF (OS_IOS AND NOT OS_IOSSIM)
+ # iOS 14.5 SDK / Xcode 12.5.1 (12E507)
+ DECLARE_EXTERNAL_RESOURCE(IOS_SDK_ROOT sbr:2661782168)
+ELSEIF (OS_IOSSIM)
+ # iOS Simulator 14.5 SDK / Xcode 12.5.1 (12E507)
+ DECLARE_EXTERNAL_RESOURCE(IOS_SDK_ROOT sbr:2661786760)
+ELSE()
+ MESSAGE(FATAL_ERROR "There is no iOS SDK for the selected target platform")
+ENDIF()
+
+END()
diff --git a/build/platform/java/error_prone/2.10.0/ya.make b/build/platform/java/error_prone/2.10.0/ya.make
new file mode 100644
index 0000000000..d08a624350
--- /dev/null
+++ b/build/platform/java/error_prone/2.10.0/ya.make
@@ -0,0 +1,4 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE_2_10_0 sbr:2649935593)
+END()
diff --git a/build/platform/java/error_prone/2.3.1/ya.make b/build/platform/java/error_prone/2.3.1/ya.make
new file mode 100644
index 0000000000..5d2267036f
--- /dev/null
+++ b/build/platform/java/error_prone/2.3.1/ya.make
@@ -0,0 +1,4 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE_2_3_1 sbr:616853779)
+END()
diff --git a/build/platform/java/error_prone/2.7.1/ya.make b/build/platform/java/error_prone/2.7.1/ya.make
new file mode 100644
index 0000000000..81a345ba98
--- /dev/null
+++ b/build/platform/java/error_prone/2.7.1/ya.make
@@ -0,0 +1,4 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE_2_7_1 sbr:2202855601)
+END()
diff --git a/build/platform/java/error_prone/ya.make b/build/platform/java/error_prone/ya.make
new file mode 100644
index 0000000000..ee2eceafc0
--- /dev/null
+++ b/build/platform/java/error_prone/ya.make
@@ -0,0 +1,28 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+IF(USE_SYSTEM_ERROR_PRONE)
+ MESSAGE(WARNING System Error Prone $USE_SYSTEM_ERROR_PRONE will be used)
+ELSEIF(ERROR_PRONE_VERSION == "2.3.1")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:616853779)
+ELSEIF(ERROR_PRONE_VERSION == "2.3.2")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:760800655)
+ELSEIF(ERROR_PRONE_VERSION == "2.3.3")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:919320393)
+ELSEIF(ERROR_PRONE_VERSION == "2.4.0")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:1585305794)
+ELSEIF(ERROR_PRONE_VERSION == "2.6.0")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:2139890169)
+ELSEIF(ERROR_PRONE_VERSION == "2.7.1")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:2202855601)
+ELSEIF(ERROR_PRONE_VERSION == "2.10.0")
+ DECLARE_EXTERNAL_RESOURCE(ERROR_PRONE sbr:2649935593)
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported Error Prone version: $ERROR_PRONE_VERSION)
+ENDIF()
+END()
+
+RECURSE(
+ 2.10.0
+ 2.7.1
+ 2.3.1
+)
diff --git a/build/platform/java/groovy/ya.make b/build/platform/java/groovy/ya.make
new file mode 100644
index 0000000000..01058729b2
--- /dev/null
+++ b/build/platform/java/groovy/ya.make
@@ -0,0 +1,10 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+IF(USE_SYSTEM_GROOVY_COMPILER)
+ MESSAGE(WARNING System groovy $USE_SYSTEM_GROOVY_COMPILER will be used)
+ELSEIF(GROOVY_VERSION == "3.0.5")
+ DECLARE_EXTERNAL_RESOURCE(GROOVY_COMPILER sbr:1710622475)
+ELSE()
+ MESSAGE(FATAL_ERROR Unexpected groovy version ${GROOVY_VERSION})
+ENDIF()
+END()
diff --git a/build/platform/java/jacoco-agent/ya.make b/build/platform/java/jacoco-agent/ya.make
new file mode 100644
index 0000000000..c298dc9020
--- /dev/null
+++ b/build/platform/java/jacoco-agent/ya.make
@@ -0,0 +1,9 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+IF(USE_SYSTEM_JACOCO_AGENT)
+ MESSAGE(WARNING System jacoco agent $USE_SYSTEM_JACOCO_AGENT will be used)
+ELSE()
+ DECLARE_EXTERNAL_RESOURCE(JACOCO_AGENT sbr:2493693569)
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk10/ya.make b/build/platform/java/jdk/jdk10/ya.make
new file mode 100644
index 0000000000..83a420a81f
--- /dev/null
+++ b/build/platform/java/jdk/jdk10/ya.make
@@ -0,0 +1,20 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK10
+ ${JDK10_DARWIN} FOR DARWIN
+ ${JDK10_LINUX} FOR LINUX
+ ${JDK10_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK10 ${JDK10_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK10 ${JDK10_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK10 ${JDK10_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk11/ya.make b/build/platform/java/jdk/jdk11/ya.make
new file mode 100644
index 0000000000..ae450c9c97
--- /dev/null
+++ b/build/platform/java/jdk/jdk11/ya.make
@@ -0,0 +1,31 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK11
+ ${JDK11_DARWIN} FOR DARWIN
+ ${JDK11_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK11_LINUX} FOR LINUX
+ ${JDK11_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK11 ${JDK11_DARWIN_ARM64})
+ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK11 ${JDK11_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK11 ${JDK11_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK11 ${JDK11_WINDOWS})
+ENDIF()
+
+IF(SANITIZER_TYPE == "address")
+ IF(HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(JDK_FOR_TESTS11 ${JDK11_LINUX_ASAN})
+ ELSE()
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK11 with asan)
+ ENDIF()
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk12/ya.make b/build/platform/java/jdk/jdk12/ya.make
new file mode 100644
index 0000000000..3ab3553338
--- /dev/null
+++ b/build/platform/java/jdk/jdk12/ya.make
@@ -0,0 +1,20 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK12
+ ${JDK12_DARWIN} FOR DARWIN
+ ${JDK12_LINUX} FOR LINUX
+ ${JDK12_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK12 ${JDK12_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK12 ${JDK12_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK12 ${JDK12_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk13/ya.make b/build/platform/java/jdk/jdk13/ya.make
new file mode 100644
index 0000000000..527af68fb2
--- /dev/null
+++ b/build/platform/java/jdk/jdk13/ya.make
@@ -0,0 +1,28 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK13
+ ${JDK13_DARWIN} FOR DARWIN
+ ${JDK13_LINUX} FOR LINUX
+ ${JDK13_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK13 ${JDK13_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK13 ${JDK13_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK13 ${JDK13_WINDOWS})
+ENDIF()
+
+IF(SANITIZER_TYPE == "address")
+ IF(HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(JDK_FOR_TESTS ${JDK13_LINUX_ASAN})
+ ELSE()
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK13 with asan)
+ ENDIF()
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk14/ya.make b/build/platform/java/jdk/jdk14/ya.make
new file mode 100644
index 0000000000..ed08c1a7fb
--- /dev/null
+++ b/build/platform/java/jdk/jdk14/ya.make
@@ -0,0 +1,20 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK14
+ ${JDK14_DARWIN} FOR DARWIN
+ ${JDK14_LINUX} FOR LINUX
+ ${JDK14_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK14 ${JDK14_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK14 ${JDK14_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK14 ${JDK14_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk15/ya.make b/build/platform/java/jdk/jdk15/ya.make
new file mode 100644
index 0000000000..0746e27405
--- /dev/null
+++ b/build/platform/java/jdk/jdk15/ya.make
@@ -0,0 +1,22 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK15
+ ${JDK15_DARWIN} FOR DARWIN
+ ${JDK15_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK15_LINUX} FOR LINUX
+ ${JDK15_WINDOWS} FOR WIN32
+)
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK15 ${JDK15_DARWIN_ARM64})
+ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK15 ${JDK15_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK15 ${JDK15_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK15 ${JDK15_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk16/ya.make b/build/platform/java/jdk/jdk16/ya.make
new file mode 100644
index 0000000000..2fc2f16418
--- /dev/null
+++ b/build/platform/java/jdk/jdk16/ya.make
@@ -0,0 +1,23 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK16
+ ${JDK16_DARWIN} FOR DARWIN
+ ${JDK16_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK16_LINUX} FOR LINUX
+ ${JDK16_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK16 ${JDK16_DARWIN_ARM64})
+ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK16 ${JDK16_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK16 ${JDK16_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK16 ${JDK16_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk17/ya.make b/build/platform/java/jdk/jdk17/ya.make
new file mode 100644
index 0000000000..97aa391945
--- /dev/null
+++ b/build/platform/java/jdk/jdk17/ya.make
@@ -0,0 +1,23 @@
+OWNER(heretic)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK17
+ ${JDK17_DARWIN} FOR DARWIN
+ ${JDK17_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK17_LINUX} FOR LINUX
+ ${JDK17_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK17 ${JDK17_DARWIN_ARM64})
+ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK17 ${JDK17_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK17 ${JDK17_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK17 ${JDK17_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/jdk8/ya.make b/build/platform/java/jdk/jdk8/ya.make
new file mode 100644
index 0000000000..7386b4731c
--- /dev/null
+++ b/build/platform/java/jdk/jdk8/ya.make
@@ -0,0 +1,23 @@
+OWNER(trenin17)
+RESOURCES_LIBRARY()
+INCLUDE(${ARCADIA_ROOT}/build/platform/java/jdk/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK8
+ ${JDK8_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK8_DARWIN} FOR DARWIN
+ ${JDK8_LINUX} FOR LINUX
+ ${JDK8_WINDOWS} FOR WIN32
+)
+
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK8 ${JDK8_DARWIN_ARM64})
+ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK8 ${JDK8_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK8 ${JDK8_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK8 ${JDK8_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/java/jdk/resources.inc b/build/platform/java/jdk/resources.inc
new file mode 100644
index 0000000000..7413263cd9
--- /dev/null
+++ b/build/platform/java/jdk/resources.inc
@@ -0,0 +1,49 @@
+# JDK 17
+SET(JDK17_DARWIN_ARM64 sbr:2720893567)
+SET(JDK17_DARWIN sbr:2720886299)
+SET(JDK17_LINUX sbr:2720875090)
+SET(JDK17_WINDOWS sbr:2720881931)
+
+# JDK 16
+SET(JDK16_DARWIN_ARM64 sbr:2197985911)
+SET(JDK16_DARWIN sbr:2197936962)
+SET(JDK16_LINUX sbr:2197854301)
+SET(JDK16_WINDOWS sbr:2197964128)
+
+# JDK 15
+SET(JDK15_DARWIN sbr:1901471162)
+SET(JDK15_DARWIN_ARM64 sbr:2107376046)
+SET(JDK15_LINUX sbr:1901452000)
+SET(JDK15_WINDOWS sbr:1901563630)
+
+# JDK 14
+SET(JDK14_DARWIN sbr:1714972232)
+SET(JDK14_LINUX sbr:1714966923)
+SET(JDK14_WINDOWS sbr:1714975688)
+
+# JDK 13
+SET(JDK13_DARWIN sbr:1327581343)
+SET(JDK13_LINUX sbr:1327248424)
+SET(JDK13_WINDOWS sbr:1327617393)
+
+SET(JDK13_LINUX_ASAN sbr:1327513158)
+# JDK 12
+SET(JDK12_DARWIN sbr:1128561457)
+SET(JDK12_LINUX sbr:1128737735)
+SET(JDK12_WINDOWS sbr:1128743394)
+# JDK 11
+SET(JDK11_DARWIN sbr:1903539486)
+SET(JDK11_DARWIN_ARM64 sbr:2107253283)
+SET(JDK11_LINUX sbr:1903522585)
+SET(JDK11_WINDOWS sbr:1903567822)
+
+SET(JDK11_LINUX_ASAN sbr:1323637508)
+# JDK 10
+SET(JDK10_DARWIN sbr:545649998)
+SET(JDK10_LINUX sbr:545649806)
+SET(JDK10_WINDOWS sbr:545648079)
+# JDK 8
+SET(JDK8_DARWIN_ARM64 sbr:1901326056)
+SET(JDK8_DARWIN sbr:1901326056)
+SET(JDK8_LINUX sbr:1901306329)
+SET(JDK8_WINDOWS sbr:1901510679)
diff --git a/build/platform/java/jdk/ya.make b/build/platform/java/jdk/ya.make
new file mode 100644
index 0000000000..909ae36e18
--- /dev/null
+++ b/build/platform/java/jdk/ya.make
@@ -0,0 +1,311 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+
+INCLUDE(resources.inc)
+
+IF(JDK_VERSION == "17")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK17_DARWIN} FOR DARWIN
+ ${JDK17_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK17_LINUX} FOR LINUX
+ ${JDK17_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK17)
+ ENDIF()
+ELSEIF(JDK_VERSION == "16")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK16_DARWIN} FOR DARWIN
+ ${JDK16_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK16_LINUX} FOR LINUX
+ ${JDK16_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK16)
+ ENDIF()
+ELSEIF(JDK_VERSION == "15")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK15_DARWIN} FOR DARWIN
+ ${JDK15_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK15_LINUX} FOR LINUX
+ ${JDK15_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK15)
+ ENDIF()
+ELSEIF(JDK_VERSION == "14")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK14_DARWIN} FOR DARWIN
+ ${JDK14_LINUX} FOR LINUX
+ ${JDK14_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK14)
+ ENDIF()
+ELSEIF(JDK_VERSION == "13")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK13_DARWIN} FOR DARWIN
+ ${JDK13_LINUX} FOR LINUX
+ ${JDK13_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK13)
+ ENDIF()
+ELSEIF(JDK_VERSION == "12")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK12_DARWIN} FOR DARWIN
+ ${JDK12_LINUX} FOR LINUX
+ ${JDK12_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK12)
+ ENDIF()
+ELSEIF(JDK_VERSION == "11")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK11_DARWIN} FOR DARWIN
+ ${JDK11_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK11_LINUX} FOR LINUX
+ ${JDK11_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK11)
+ ENDIF()
+ELSEIF(JDK_VERSION == "10")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK10_DARWIN} FOR DARWIN
+ ${JDK10_LINUX} FOR LINUX
+ ${JDK10_WINDOWS} FOR WIN32
+ )
+ELSEIF(JDK_VERSION == "8")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK_DEFAULT
+ ${JDK8_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK8_DARWIN} FOR DARWIN
+ ${JDK8_LINUX} FOR LINUX
+ ${JDK8_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK8)
+ ENDIF()
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported JDK version)
+ENDIF()
+
+IF(USE_SYSTEM_JDK)
+ MESSAGE(WARNING System JDK $USE_SYSTEM_JDK will be used)
+ELSEIF(JDK_VERSION == "17")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK17_DARWIN} FOR DARWIN
+ ${JDK17_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK17_LINUX} FOR LINUX
+ ${JDK17_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK17)
+ ENDIF()
+
+ IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK17_DARWIN_ARM64})
+ ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK17_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK17_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK17_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "16")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK16_DARWIN} FOR DARWIN
+ ${JDK16_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK16_LINUX} FOR LINUX
+ ${JDK16_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK16)
+ ENDIF()
+
+ IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK16_DARWIN_ARM64})
+ ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK16_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK16_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK16_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "15")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK15_DARWIN} FOR DARWIN
+ ${JDK15_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK15_LINUX} FOR LINUX
+ ${JDK15_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK15)
+ ENDIF()
+
+ IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK15_DARWIN_ARM64})
+ ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK15_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK15_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK15_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "14")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK14_DARWIN} FOR DARWIN
+ ${JDK14_LINUX} FOR LINUX
+ ${JDK14_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK14)
+ ENDIF()
+
+ IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK14_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK14_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK14_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "13")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK13_DARWIN} FOR DARWIN
+ ${JDK13_LINUX} FOR LINUX
+ ${JDK13_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK13)
+ ENDIF()
+ IF(SANITIZER_TYPE == "address")
+ IF(HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(JDK_FOR_TESTS ${JDK13_LINUX_ASAN})
+ ELSE()
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK13 with asan)
+ ENDIF()
+ ENDIF()
+
+ IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK13_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK13_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK13_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "12")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK12_DARWIN} FOR DARWIN
+ ${JDK12_LINUX} FOR LINUX
+ ${JDK12_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK12)
+ ENDIF()
+
+ IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK12_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK12_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK12_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "11")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK11_DARWIN} FOR DARWIN
+ ${JDK11_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK11_LINUX} FOR LINUX
+ ${JDK11_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK11)
+ ENDIF()
+ IF(SANITIZER_TYPE == "address")
+ IF(HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(JDK_FOR_TESTS ${JDK11_LINUX_ASAN})
+ ELSE()
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK11 with asan)
+ ENDIF()
+ ENDIF()
+
+ IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK11_DARWIN_ARM64})
+ ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK11_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK11_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK11_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "10")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK10_DARWIN} FOR DARWIN
+ ${JDK10_LINUX} FOR LINUX
+ ${JDK10_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK10)
+ ENDIF()
+
+ IF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK10_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK10_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK10_WINDOWS})
+ ENDIF()
+ELSEIF(JDK_VERSION == "8")
+ DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ JDK
+ ${JDK8_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${JDK8_DARWIN} FOR DARWIN
+ ${JDK8_LINUX} FOR LINUX
+ ${JDK8_WINDOWS} FOR WIN32
+ )
+ IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for JDK8)
+ ENDIF()
+
+ IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK8_DARWIN_ARM64})
+ ELSEIF(OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK8_DARWIN})
+ ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK8_LINUX})
+ ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_JDK ${JDK8_WINDOWS})
+ ENDIF()
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported JDK version)
+ENDIF()
+
+END()
+
+RECURSE(
+ jdk8
+ jdk10
+ jdk11
+ jdk12
+ jdk13
+ jdk14
+ jdk15
+ jdk16
+ jdk17
+)
diff --git a/build/platform/java/jni/ya.make b/build/platform/java/jni/ya.make
new file mode 100644
index 0000000000..9d8dab98b1
--- /dev/null
+++ b/build/platform/java/jni/ya.make
@@ -0,0 +1,29 @@
+LIBRARY()
+OWNER(heretic)
+
+PEERDIR(
+ build/platform/java/jdk
+ ${JDK_RESOURCE_PEERDIR}
+)
+
+IF(OS_DARWIN)
+ SET(PLATFORM_NAME darwin)
+ELSEIF(OS_LINUX)
+ SET(PLATFORM_NAME linux)
+ELSEIF(OS_WINDOWS)
+ SET(PLATFORM_NAME win32)
+ENDIF()
+
+IF (USE_SYSTEM_JDK)
+ SET(JDK_ROOT ${USE_SYSTEM_JDK})
+ELSE()
+ SET(JDK_ROOT ${JDK_DEFAULT_RESOURCE_GLOBAL})
+ENDIF()
+IF (PLATFORM_NAME)
+ CFLAGS(GLOBAL -I${JDK_ROOT}/include)
+ CFLAGS(GLOBAL -I${JDK_ROOT}/include/${PLATFORM_NAME})
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported platform for jni)
+ENDIF()
+
+END()
diff --git a/build/platform/java/jstyle_lib/ya.make b/build/platform/java/jstyle_lib/ya.make
new file mode 100644
index 0000000000..fa55e63071
--- /dev/null
+++ b/build/platform/java/jstyle_lib/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(heretic)
+
+IF (USE_SYSTEM_JSTYLE_LIB)
+ MESSAGE(WARNING System java codestyle library $USE_SYSTEM_JSTYLE_LIB will be used)
+ELSE()
+ DECLARE_EXTERNAL_RESOURCE(JSTYLE_LIB sbr:2525400095)
+ENDIF()
+
+END()
diff --git a/build/platform/java/kotlin/ya.make b/build/platform/java/kotlin/ya.make
new file mode 100644
index 0000000000..b4c0b0b83a
--- /dev/null
+++ b/build/platform/java/kotlin/ya.make
@@ -0,0 +1,31 @@
+# how to build: https://a.yandex-team.ru/arc/trunk/arcadia/devtools/kotlin_compiler_uberjar
+RESOURCES_LIBRARY()
+OWNER(heretic)
+IF(USE_SYSTEM_KOTLIN_COMPILER)
+ MESSAGE(WARNING System kotlin $USE_SYSTEM_KOTLIN_COMPILER will be used)
+ELSEIF(KOTLIN_VERSION == "1.3.72")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:1463870128)
+ELSEIF(KOTLIN_VERSION == "1.4.0")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:1708283452)
+ELSEIF(KOTLIN_VERSION == "1.4.10")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:1730522145)
+ELSEIF(KOTLIN_VERSION == "1.4.20")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:1869719387)
+ELSEIF(KOTLIN_VERSION == "1.4.30")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:1974389794)
+ELSEIF(KOTLIN_VERSION == "1.5.10")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2183338194)
+ELSEIF(KOTLIN_VERSION == "1.5.20")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2257446523)
+ELSEIF(KOTLIN_VERSION == "1.5.21")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2285312314)
+ELSEIF(KOTLIN_VERSION == "1.5.30")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2382793744)
+ELSEIF(KOTLIN_VERSION == "1.5.31")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2444978303)
+ELSEIF(KOTLIN_VERSION == "1.6.10")
+ DECLARE_EXTERNAL_RESOURCE(KOTLIN_COMPILER sbr:2754878302)
+ELSE()
+ MESSAGE(FATAL_ERROR Unexpected KOTLIN_VERSION ${KOTLIN_VERSION})
+ENDIF()
+END()
diff --git a/build/platform/java/kythe/ya.make b/build/platform/java/kythe/ya.make
new file mode 100644
index 0000000000..d5a9237f68
--- /dev/null
+++ b/build/platform/java/kythe/ya.make
@@ -0,0 +1,10 @@
+RESOURCES_LIBRARY()
+OWNER(g:ymake)
+
+IF(USE_SYSTEM_KYTHE)
+ MESSAGE(WARNING System Kythe $USE_SYSTEM_KYTHE will be used)
+ELSE()
+ DECLARE_EXTERNAL_RESOURCE(KYTHE sbr:837801347)
+ENDIF()
+
+END()
diff --git a/build/platform/java/scriptgen/ya.make b/build/platform/java/scriptgen/ya.make
new file mode 100644
index 0000000000..d296097f52
--- /dev/null
+++ b/build/platform/java/scriptgen/ya.make
@@ -0,0 +1,27 @@
+RESOURCES_LIBRARY()
+OWNER(g:ymake)
+
+SET(SCRIPTGEN_LINUX sbr:2654452283)
+SET(SCRIPTGEN_DARWIN_ARM64 sbr:2654451866)
+SET(SCRIPTGEN_DARWIN sbr:2654452096)
+SET(SCRIPTGEN_WIN32 sbr:2654451225)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ SCRIPTGEN
+ ${SCRIPTGEN_LINUX} FOR LINUX
+ ${SCRIPTGEN_DARWIN} FOR DARWIN
+ ${SCRIPTGEN_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${SCRIPTGEN_WIN32} FOR WIN32
+)
+
+IF(OS_DARWIN AND ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_SCRIPTGEN ${SCRIPTGEN_DARWIN_ARM64})
+ELSEIF(OS_DARWIN AND ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(WITH_SCRIPTGEN ${SCRIPTGEN_DARWIN})
+ELSEIF(OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(WITH_SCRIPTGEN ${SCRIPTGEN_LINUX})
+ELSEIF(OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(WITH_SCRIPTGEN ${SCRIPTGEN_WIN32})
+ENDIF()
+
+END()
diff --git a/build/platform/java/uberjar/uberjar10/ya.make b/build/platform/java/uberjar/uberjar10/ya.make
new file mode 100644
index 0000000000..29829b4cd0
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar10/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR10 sbr:720309903)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar11/ya.make b/build/platform/java/uberjar/uberjar11/ya.make
new file mode 100644
index 0000000000..69ae705253
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar11/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR11 sbr:962498940)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar12/ya.make b/build/platform/java/uberjar/uberjar12/ya.make
new file mode 100644
index 0000000000..88ff579eca
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar12/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR12 sbr:962498940)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar13/ya.make b/build/platform/java/uberjar/uberjar13/ya.make
new file mode 100644
index 0000000000..62c70ca3a1
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar13/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR13 sbr:1165818979)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar14/ya.make b/build/platform/java/uberjar/uberjar14/ya.make
new file mode 100644
index 0000000000..45e7deab2f
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar14/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR14 sbr:1407329657)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar15/ya.make b/build/platform/java/uberjar/uberjar15/ya.make
new file mode 100644
index 0000000000..49fdd64317
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar15/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR15 sbr:2074702997)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar16/ya.make b/build/platform/java/uberjar/uberjar16/ya.make
new file mode 100644
index 0000000000..ca4cefc1b1
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar16/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR16 sbr:2199772343)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar17/ya.make b/build/platform/java/uberjar/uberjar17/ya.make
new file mode 100644
index 0000000000..bc9bf4411b
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar17/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+# same resource as 16
+DECLARE_EXTERNAL_RESOURCE(UBERJAR17 sbr:2199772343)
+
+END()
diff --git a/build/platform/java/uberjar/uberjar8/ya.make b/build/platform/java/uberjar/uberjar8/ya.make
new file mode 100644
index 0000000000..45aec41508
--- /dev/null
+++ b/build/platform/java/uberjar/uberjar8/ya.make
@@ -0,0 +1,6 @@
+RESOURCES_LIBRARY()
+OWNER(trenin17)
+
+DECLARE_EXTERNAL_RESOURCE(UBERJAR8 sbr:962511340)
+
+END()
diff --git a/build/platform/java/uberjar/ya.make b/build/platform/java/uberjar/ya.make
new file mode 100644
index 0000000000..29c934d5b1
--- /dev/null
+++ b/build/platform/java/uberjar/ya.make
@@ -0,0 +1,39 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+
+IF(USE_SYSTEM_UBERJAR)
+ MESSAGE(WARNING System uberjar $USE_SYSTEM_UBERJAR will be used)
+ELSEIF(JDK_VERSION == "17")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:2199772343)
+ELSEIF(JDK_VERSION == "16")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:2199772343)
+ELSEIF(JDK_VERSION == "15")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:2074702997)
+ELSEIF(JDK_VERSION == "14")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:1407329657)
+ELSEIF(JDK_VERSION == "13")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:1165818979)
+ELSEIF(JDK_VERSION == "12")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:962498940)
+ELSEIF(JDK_VERSION == "11")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:962498940)
+ELSEIF(JDK_VERSION == "10" OR JDK10) # !JDK10 flag is deprecated, this check should be removed later
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:720309903)
+ELSEIF(JDK_VERSION == "8")
+ DECLARE_EXTERNAL_RESOURCE(UBERJAR sbr:962511340)
+ELSE()
+ MESSAGE(FATAL_ERROR Uberjar is not supported for selected JDK version)
+ENDIF()
+
+END()
+
+RECURSE(
+ uberjar8
+ uberjar10
+ uberjar11
+ uberjar12
+ uberjar13
+ uberjar14
+ uberjar15
+ uberjar16
+)
diff --git a/build/platform/java/ya.make b/build/platform/java/ya.make
new file mode 100644
index 0000000000..7194053b98
--- /dev/null
+++ b/build/platform/java/ya.make
@@ -0,0 +1,10 @@
+RECURSE(
+ jdk
+ jni
+ uberjar
+ error_prone
+ jacoco-agent
+ kotlin
+ jstyle_lib
+ scriptgen
+)
diff --git a/build/platform/linux_sdk/README.md b/build/platform/linux_sdk/README.md
new file mode 100644
index 0000000000..ff846cefbf
--- /dev/null
+++ b/build/platform/linux_sdk/README.md
@@ -0,0 +1,7 @@
+### Правки в Ubuntu 14.04 SDK
+* `lib/x86_64-linux-gnu/libc-2.19.so` — удалены dynamic версии символов
+ * `__cxa_thread_atexit_impl`
+ * `getauxval`
+ * `__getauxval`
+* `usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19` — удалены dynamic версии символов
+ * `__cxa_thread_atexit_impl`
diff --git a/build/platform/linux_sdk/ya.make b/build/platform/linux_sdk/ya.make
new file mode 100644
index 0000000000..add74eee9e
--- /dev/null
+++ b/build/platform/linux_sdk/ya.make
@@ -0,0 +1,55 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib somov)
+
+NO_PLATFORM_RESOURCES()
+
+SET(NEED_PLATFORM_PEERDIRS no)
+
+IF (OS_SDK == "local")
+ # Implementation is in $S/build/ymake.core.conf
+ELSEIF (ARCH_X86_64)
+ IF (OS_SDK == "ubuntu-10")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:244388930)
+ ELSEIF (OS_SDK == "ubuntu-12")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:244387436)
+ ELSEIF (OS_SDK == "ubuntu-14")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:1966560555)
+ ELSEIF (OS_SDK == "ubuntu-16")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:243881345)
+ ELSEIF (OS_SDK == "ubuntu-18")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:617908641)
+ ELSEIF (OS_SDK == "ubuntu-20")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:2635714620)
+ ELSE()
+ MESSAGE(FATAL_ERROR "There is no ${OS_SDK} SDK for x86-64")
+ ENDIF()
+ELSEIF (ARCH_AARCH64)
+ IF (OS_SDK == "ubuntu-16")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:309054781)
+ ELSE()
+ MESSAGE(FATAL_ERROR "There is no ${OS_SDK} SDK for AArch64/ARMv8 64 bit")
+ ENDIF()
+ELSEIF (ARCH_PPC64LE)
+ IF (OS_SDK == "ubuntu-14")
+ IF (HOST_ARCH_PPC64LE)
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:1570528338)
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:233217651)
+ ENDIF()
+ ELSE()
+ MESSAGE(FATAL_ERROR "There is no ${OS_SDK} SDK for PPC64LE")
+ ENDIF()
+ELSEIF (ARCH_ARM7)
+ IF (ARM7_FLOAT_ABI == "hard" AND OS_SDK == "ubuntu-16")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:1323200692)
+ ELSEIF (ARM7_FLOAT_ABI == "softfp" AND OS_SDK == "ubuntu-18")
+ DECLARE_EXTERNAL_RESOURCE(OS_SDK_ROOT sbr:2402287545)
+ ELSE()
+ MESSAGE(FATAL_ERROR "There is no ${OS_SDK} SDK for ARMv7 32 bit (float ABI: ${ARM7_FLOAT_ABI})")
+ ENDIF()
+ELSE()
+ MESSAGE(FATAL_ERROR "Unexpected OS_SDK value: ${OS_SDK}")
+ENDIF()
+
+END()
diff --git a/build/platform/lld/ya.make b/build/platform/lld/ya.make
new file mode 100644
index 0000000000..c046e89098
--- /dev/null
+++ b/build/platform/lld/ya.make
@@ -0,0 +1,62 @@
+RESOURCES_LIBRARY()
+
+LICENSE(Service-Prebuilt-Tool)
+
+OWNER(somov)
+
+IF (USE_LTO OR USE_THINLTO)
+ IF (CLANG7 OR CLANG8)
+ # Use LLD 8 for old Clang because its IR code fails LLD 11 validation.
+ ENABLE(USE_LLD8)
+ ELSEIF (CLANG11)
+ # DEVTOOLSSUPPORT-9065
+ ENABLE(USE_LLD11)
+ ENDIF()
+ENDIF()
+
+IF (OS_ANDROID)
+ # Use LLD shipped with Android NDK.
+ LDFLAGS("-fuse-ld=lld")
+ELSEIF (USE_LLD8)
+ IF (HOST_OS_LINUX)
+ IF (HOST_ARCH_PPC64LE)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1610790447)
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1063258680)
+ ENDIF()
+ ELSEIF (HOST_OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1063258537)
+ ENDIF()
+
+ LDFLAGS("-fuse-ld=$LLD_ROOT_RESOURCE_GLOBAL/ld")
+ELSEIF (USE_LLD11)
+ IF (HOST_OS_LINUX)
+ IF (HOST_ARCH_PPC64LE)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1843381106)
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1843327433)
+ ENDIF()
+ ELSEIF (HOST_OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:1843327928)
+ ENDIF()
+
+ LDFLAGS("-fuse-ld=$LLD_ROOT_RESOURCE_GLOBAL/ld" "-Wl,--no-rosegment")
+ELSE()
+ IF (HOST_OS_LINUX)
+ IF (HOST_ARCH_PPC64LE)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:2283417120)
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:2283360772)
+ ENDIF()
+ ELSEIF (HOST_OS_DARWIN)
+ IF (HOST_ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:2283439721)
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(LLD_ROOT sbr:2283429958)
+ ENDIF()
+ ENDIF()
+
+ LDFLAGS("-fuse-ld=$LLD_ROOT_RESOURCE_GLOBAL/ld" "-Wl,--no-rosegment")
+ENDIF()
+
+END()
diff --git a/build/platform/local_so/readme.md b/build/platform/local_so/readme.md
new file mode 100644
index 0000000000..1bcad54581
--- /dev/null
+++ b/build/platform/local_so/readme.md
@@ -0,0 +1,3 @@
+This is supporting library for DYNAMIC_LIBRARY module.
+
+It sets LDFLAG that brings support of dynamic loading fron binary's directory on Linux, Darwin etc. On Windows this behavior is enabled by default.
diff --git a/build/platform/local_so/ya.make b/build/platform/local_so/ya.make
new file mode 100644
index 0000000000..70b72f653c
--- /dev/null
+++ b/build/platform/local_so/ya.make
@@ -0,0 +1,9 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:ymake)
+
+IF (NOT OS_WINDOWS)
+ SET_APPEND(RPATH_GLOBAL '-Wl,-rpath,$ORIGIN')
+ENDIF()
+
+END()
diff --git a/build/platform/macos_sdk/ya.make b/build/platform/macos_sdk/ya.make
new file mode 100644
index 0000000000..6fb8dc54c0
--- /dev/null
+++ b/build/platform/macos_sdk/ya.make
@@ -0,0 +1,20 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+# macOS 11.1 Big Sur SDK / Xcode 12.4 (12D4e)
+DECLARE_EXTERNAL_RESOURCE(MACOS_SDK sbr:2088833948)
+
+IF (USE_STL_SYSTEM)
+ SET(__XCODE_RESOURCE_NAME CPP_XCODE_TOOLCHAIN_ROOT)
+ SET(__XCODE_TOOLCHAIN_VERSION ${CPP_XCODE_TOOLCHAIN_VERSION})
+ INCLUDE(${ARCADIA_ROOT}/build/platform/xcode/ya.make.inc)
+ CFLAGS(
+ GLOBAL -F$MACOS_SDK_RESOURCE_GLOBAL/System/Library/Frameworks
+ )
+ LDFLAGS(
+ -F$MACOS_SDK_RESOURCE_GLOBAL/System/Library/Frameworks
+ )
+ENDIF()
+
+END()
diff --git a/build/platform/macos_system_stl/ya.make b/build/platform/macos_system_stl/ya.make
new file mode 100644
index 0000000000..4631bbc57a
--- /dev/null
+++ b/build/platform/macos_system_stl/ya.make
@@ -0,0 +1,15 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:cpp-contrib)
+
+# Taken from the default toolchain of the Xcode 12.5.1
+DECLARE_EXTERNAL_RESOURCE(MACOS_SYSTEM_STL sbr:2561940097)
+
+# xcode toolchain allready contains system headers
+IF (USE_STL_SYSTEM AND NOT XCODE)
+ CFLAGS(
+ GLOBAL -I${MACOS_SYSTEM_STL_RESOURCE_GLOBAL}/include
+ )
+ENDIF()
+
+END()
diff --git a/build/platform/mapkit/ya.make b/build/platform/mapkit/ya.make
new file mode 100644
index 0000000000..513dff5bcf
--- /dev/null
+++ b/build/platform/mapkit/ya.make
@@ -0,0 +1,32 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+NO_PLATFORM()
+
+IF (OS_ANDROID)
+ IF (MAPS_MOBILE_EXPORT_CPP_API)
+ # Sandbox Resource ID duplicates
+ # arcadia/sandbox/projects/maps/mobile/MapsMobileMakeArtifacts/__init__.py
+ DECLARE_EXTERNAL_RESOURCE(MAPKIT_ANDROID_LIBCXX_HEADERS sbr:2527848662)
+ CFLAGS(GLOBAL -nostdinc++ GLOBAL -cxx-isystem GLOBAL $MAPKIT_ANDROID_LIBCXX_HEADERS_RESOURCE_GLOBAL)
+ ENDIF()
+
+ DECLARE_EXTERNAL_RESOURCE(MAPKIT_ANDROID_LIBCXX_LIBRARIES sbr:2527853263)
+
+ IF (ARCH_ARM7)
+ SET(ARCH_NAME arm)
+ ELSEIF (ARCH_ARM64)
+ SET(ARCH_NAME arm64)
+ ELSEIF (ARCH_I686)
+ SET(ARCH_NAME x86)
+ ELSEIF (ARCH_X86_64)
+ SET(ARCH_NAME x86-64)
+ ENDIF()
+
+ SET(LIBS $MAPKIT_ANDROID_LIBCXX_LIBRARIES_RESOURCE_GLOBAL/$ARCH_NAME)
+
+ LDFLAGS(-L$LIBS)
+ENDIF()
+
+END()
diff --git a/build/platform/msvc/ya.make b/build/platform/msvc/ya.make
new file mode 100644
index 0000000000..ccb602c280
--- /dev/null
+++ b/build/platform/msvc/ya.make
@@ -0,0 +1,19 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+IF (WINDOWS_KITS_VERSION == "10.0.10586.0")
+ DECLARE_EXTERNAL_RESOURCE(WINDOWS_KITS sbr:544779014)
+ELSEIF (WINDOWS_KITS_VERSION == "10.0.16299.0")
+ DECLARE_EXTERNAL_RESOURCE(WINDOWS_KITS sbr:1379398385)
+ELSEIF (WINDOWS_KITS_VERSION == "10.0.18362.0")
+ DECLARE_EXTERNAL_RESOURCE(WINDOWS_KITS sbr:1939557911)
+ELSE()
+ MESSAGE(FATAL_ERROR "We have no Windows Kits version ${WINDOWS_KITS_VERSION}")
+ENDIF()
+
+IF (CLANG_CL)
+ DECLARE_EXTERNAL_RESOURCE(MSVC_FOR_CLANG sbr:1383387533) # Microsoft Visual C++ 2017 14.16.27023 (15.9.5)
+ENDIF()
+
+END()
diff --git a/build/platform/nodejs/readme.md b/build/platform/nodejs/readme.md
new file mode 100644
index 0000000000..92fbcfe699
--- /dev/null
+++ b/build/platform/nodejs/readme.md
@@ -0,0 +1,5 @@
+# Node.js bundle
+
+В бандле находится аркадийная Node.js (`contrib/libs/nodejs_12`) для Linux и Darwin.
+
+Ресурс должен быть tar-архивом с исполнимым бинарём `node`.
diff --git a/build/platform/nodejs/resources.inc b/build/platform/nodejs/resources.inc
new file mode 100644
index 0000000000..002466daeb
--- /dev/null
+++ b/build/platform/nodejs/resources.inc
@@ -0,0 +1,2 @@
+SET(NODEJS_12_18_4_LINUX sbr:2197482931)
+SET(NODEJS_12_18_4_DARWIN sbr:2197413902)
diff --git a/build/platform/nodejs/ya.make b/build/platform/nodejs/ya.make
new file mode 100644
index 0000000000..c872eca0d8
--- /dev/null
+++ b/build/platform/nodejs/ya.make
@@ -0,0 +1,17 @@
+RESOURCES_LIBRARY()
+
+OWNER(dankolesnikov)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/nodejs/resources.inc)
+
+IF (NOT HOST_OS_LINUX AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for Nodejs)
+ENDIF()
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ NODEJS
+ ${NODEJS_12_18_4_LINUX} FOR LINUX
+ ${NODEJS_12_18_4_DARWIN} FOR DARWIN
+)
+
+END()
diff --git a/build/platform/opengl/ya.make b/build/platform/opengl/ya.make
new file mode 100644
index 0000000000..94f0431d18
--- /dev/null
+++ b/build/platform/opengl/ya.make
@@ -0,0 +1,27 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib heretic)
+
+IF (NOT OPENGL_REQUIRED)
+ MESSAGE(FATAL_ERROR "No OpenGL Toolkit for your build")
+ELSE()
+ IF (OS_LINUX)
+ IF (OPENGL_VERSION == "18.0.5")
+ DECLARE_EXTERNAL_RESOURCE(OPENGL sbr:1271121094)
+ SET(OS_SUFFIX "x86_64-linux-gnu")
+ ELSE()
+ ENABLE(OPENGL_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(OPENGL_NOT_FOUND)
+ ENDIF()
+
+ IF (OPENGL_NOT_FOUND)
+ MESSAGE(FATAL_ERROR "No OpenGL Toolkit for the selected platform")
+ ELSE()
+ CFLAGS(GLOBAL "-I$OPENGL_RESOURCE_GLOBAL/usr/include")
+ LDFLAGS("-L$OPENGL_RESOURCE_GLOBAL/usr/lib/$OS_SUFFIX")
+ ENDIF()
+ENDIF()
+
+END()
diff --git a/build/platform/perl/5.14/ya.make b/build/platform/perl/5.14/ya.make
new file mode 100644
index 0000000000..3db5747945
--- /dev/null
+++ b/build/platform/perl/5.14/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(PERL_SDK ubuntu-12)
+
+SRCDIR(build/platform/perl)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/perl/perl.inc)
+
+END()
diff --git a/build/platform/perl/5.18/ya.make b/build/platform/perl/5.18/ya.make
new file mode 100644
index 0000000000..1d17311066
--- /dev/null
+++ b/build/platform/perl/5.18/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(PERL_SDK ubuntu-14)
+
+SRCDIR(build/platform/perl)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/perl/perl.inc)
+
+END()
diff --git a/build/platform/perl/5.22/ya.make b/build/platform/perl/5.22/ya.make
new file mode 100644
index 0000000000..658bcc2552
--- /dev/null
+++ b/build/platform/perl/5.22/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(PERL_SDK ubuntu-16)
+
+SRCDIR(build/platform/perl)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/perl/perl.inc)
+
+END()
diff --git a/build/platform/perl/5.26/ya.make b/build/platform/perl/5.26/ya.make
new file mode 100644
index 0000000000..c510f6091a
--- /dev/null
+++ b/build/platform/perl/5.26/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(PERL_SDK ubuntu-18)
+
+SRCDIR(build/platform/perl)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/perl/perl.inc)
+
+END()
diff --git a/build/platform/perl/5.30/ya.make b/build/platform/perl/5.30/ya.make
new file mode 100644
index 0000000000..ba0132c6ba
--- /dev/null
+++ b/build/platform/perl/5.30/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(somov)
+
+SET(PERL_SDK ubuntu-20)
+
+SRCDIR(build/platform/perl)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/perl/perl.inc)
+
+END()
diff --git a/build/platform/perl/perl.inc b/build/platform/perl/perl.inc
new file mode 100644
index 0000000000..139e65bb33
--- /dev/null
+++ b/build/platform/perl/perl.inc
@@ -0,0 +1,33 @@
+PROVIDES(system_perl)
+
+IF (PERL_SDK == "ubuntu-12")
+ DECLARE_EXTERNAL_RESOURCE(SYSTEM_PERL_514 sbr:337748278)
+ELSEIF (PERL_SDK == "ubuntu-14")
+ DECLARE_EXTERNAL_RESOURCE(SYSTEM_PERL_518 sbr:1655582861)
+ELSEIF (PERL_SDK == "ubuntu-16")
+ DECLARE_EXTERNAL_RESOURCE(SYSTEM_PERL_522 sbr:323251590)
+ELSEIF (PERL_SDK == "ubuntu-18")
+ DECLARE_EXTERNAL_RESOURCE(SYSTEM_PERL_526 sbr:616700320)
+ELSEIF (PERL_SDK == "ubuntu-20")
+ DECLARE_EXTERNAL_RESOURCE(SYSTEM_PERL_530 sbr:2001114055)
+ELSE()
+ MESSAGE(FATAL_ERROR "Building against system perl is not supported on ${PERL_SDK}")
+ENDIF()
+
+IF (PERL_INCLUDE)
+ CFLAGS(GLOBAL $PERL_INCLUDE)
+ENDIF()
+
+CFLAGS(GLOBAL -I$PERL_ARCHLIB/CORE)
+
+IF (PERL_LIBS)
+ LDFLAGS(-L${PERL_LIBS})
+ENDIF()
+
+IF (NOT OS_WINDOWS)
+ LDFLAGS(-lperl)
+ELSE()
+ LDFLAGS(perl.lib)
+ENDIF()
+
+CFLAGS(GLOBAL -DUSE_PERL)
diff --git a/build/platform/perl/perl_5.18.patch b/build/platform/perl/perl_5.18.patch
new file mode 100644
index 0000000000..840227eb54
--- /dev/null
+++ b/build/platform/perl/perl_5.18.patch
@@ -0,0 +1,51 @@
+diff --unified --recursive a/perl5.18/lib/perl/5.18/CORE/pad.h b/perl5.18/lib/perl/5.18/CORE/pad.h
+--- a/perl5.18/lib/perl/5.18/CORE/pad.h 2020-08-10 09:58:43.970483379 +0300
++++ b/perl5.18/lib/perl/5.18/CORE/pad.h 2020-08-10 10:00:56.850097798 +0300
+@@ -320,7 +320,7 @@
+ PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]); \
+ PL_curpad = AvARRAY(PL_comppad); \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+- "Pad 0x%"UVxf"[0x%"UVxf"] set_cur depth=%d\n", \
++ "Pad 0x%" UVxf "[0x%" UVxf "] set_cur depth=%d\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth)));
+
+
+@@ -338,7 +338,7 @@
+ PL_comppad = (npad); \
+ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+- "Pad 0x%"UVxf"[0x%"UVxf"] save_local\n", \
++ "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+
+ #define PAD_RESTORE_LOCAL(opad) \
+@@ -346,7 +346,7 @@
+ PL_comppad = opad; \
+ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \
+ DEBUG_Xv(PerlIO_printf(Perl_debug_log, \
+- "Pad 0x%"UVxf"[0x%"UVxf"] restore_local\n", \
++ "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n", \
+ PTR2UV(PL_comppad), PTR2UV(PL_curpad)));
+
+
+diff --unified --recursive a/perl5.18/lib/perl/5.18/CORE/perl.h b/perl5.18/lib/perl/5.18/CORE/perl.h
+--- a/perl5.18/lib/perl/5.18/CORE/perl.h 2020-08-10 09:58:43.966483390 +0300
++++ b/perl5.18/lib/perl/5.18/CORE/perl.h 2020-08-10 10:01:44.649957846 +0300
+@@ -4254,7 +4254,7 @@
+ EXTCONST char PL_warn_uninit[]
+ INIT("Use of uninitialized value%s%s%s");
+ EXTCONST char PL_warn_uninit_sv[]
+- INIT("Use of uninitialized value%"SVf"%s%s");
++ INIT("Use of uninitialized value%" SVf "%s%s");
+ EXTCONST char PL_warn_nosemi[]
+ INIT("Semicolon seems to be missing");
+ EXTCONST char PL_warn_reserved[]
+@@ -4274,7 +4274,7 @@
+ EXTCONST char PL_no_aelem[]
+ INIT("Modification of non-creatable array value attempted, subscript %d");
+ EXTCONST char PL_no_helem_sv[]
+- INIT("Modification of non-creatable hash value attempted, subscript \"%"SVf"\"");
++ INIT("Modification of non-creatable hash value attempted, subscript \"%" SVf "\"");
+ EXTCONST char PL_no_modify[]
+ INIT("Modification of a read-only value attempted");
+ EXTCONST char PL_no_mem[sizeof("Out of memory!\n")]
diff --git a/build/platform/perl/ya.make b/build/platform/perl/ya.make
new file mode 100644
index 0000000000..cc50c05c26
--- /dev/null
+++ b/build/platform/perl/ya.make
@@ -0,0 +1,28 @@
+LIBRARY()
+
+OWNER(somov)
+
+NO_PLATFORM()
+
+IF (USE_PERL_SYSTEM)
+ IF (PERL_SDK == "ubuntu-12")
+ PEERDIR(build/platform/perl/5.14)
+ ELSEIF (PERL_SDK == "ubuntu-14")
+ PEERDIR(build/platform/perl/5.18)
+ ELSEIF (PERL_SDK == "ubuntu-16")
+ PEERDIR(build/platform/perl/5.22)
+ ELSEIF (PERL_SDK == "ubuntu-18")
+ PEERDIR(build/platform/perl/5.26)
+ ELSEIF (PERL_SDK == "ubuntu-20")
+ PEERDIR(build/platform/perl/5.30)
+ ELSE()
+ MESSAGE(FATAL_ERROR "Building against system perl is not supported on ${PERL_SDK}")
+ ENDIF()
+
+ELSE()
+
+ MESSAGE(FATAL_ERROR "There is no perl ready for static linkage. Try using the system one.")
+
+ENDIF()
+
+END()
diff --git a/build/platform/python/ldflags/ya.make b/build/platform/python/ldflags/ya.make
new file mode 100644
index 0000000000..d81ec31876
--- /dev/null
+++ b/build/platform/python/ldflags/ya.make
@@ -0,0 +1,17 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib)
+
+IF (USE_SYSTEM_PYTHON)
+ IF (OS_LINUX)
+ LDFLAGS("-L$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/lib/x86_64-linux-gnu -lpython${PY_VERSION}")
+ ELSEIF (OS_DARWIN)
+ LDFLAGS("-L$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/Python.framework/Versions/${PY_FRAMEWORK_VERSION}/lib -lpython${PY_VERSION}")
+ ELSEIF (OS_WINDOWS)
+ LDFLAGS("/LIBPATH:$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/libs")
+ ENDIF()
+ELSEIF (NOT USE_ARCADIA_PYTHON)
+ LDFLAGS($PYTHON_LDFLAGS $PYTHON_LIBRARIES)
+ENDIF()
+
+END()
diff --git a/build/platform/python/python27/ya.make b/build/platform/python/python27/ya.make
new file mode 100644
index 0000000000..35d2ef8405
--- /dev/null
+++ b/build/platform/python/python27/ya.make
@@ -0,0 +1,22 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ IF (ARCH_ARM64 OR ARCH_AARCH64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON27 ${PYTHON27_LINUX_ARM64})
+ ELSE()
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON27 ${PYTHON27_LINUX})
+ ENDIF()
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON27 ${PYTHON27_DARWIN})
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON27 ${PYTHON27_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python310/ya.make b/build/platform/python/python310/ya.make
new file mode 100644
index 0000000000..fea3696e6d
--- /dev/null
+++ b/build/platform/python/python310/ya.make
@@ -0,0 +1,30 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ PYTHON310
+ ${PYTHON310_DARWIN} FOR DARWIN
+ ${PYTHON310_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${PYTHON310_LINUX} FOR LINUX
+ ${PYTHON310_WINDOWS} FOR WIN32
+)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON310 ${PYTHON310_LINUX})
+ELSEIF (OS_DARWIN)
+ IF (ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON310 ${PYTHON310_DARWIN_ARM64})
+ ELSEIF(ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON310 ${PYTHON310_DARWIN})
+ ENDIF()
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON310 ${PYTHON310_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python34/ya.make b/build/platform/python/python34/ya.make
new file mode 100644
index 0000000000..61be788bec
--- /dev/null
+++ b/build/platform/python/python34/ya.make
@@ -0,0 +1,18 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON34 ${PYTHON34_LINUX})
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON34 ${PYTHON34_DARWIN})
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON34 ${PYTHON34_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python35/ya.make b/build/platform/python/python35/ya.make
new file mode 100644
index 0000000000..7a6292efa0
--- /dev/null
+++ b/build/platform/python/python35/ya.make
@@ -0,0 +1,18 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON35 ${PYTHON35_LINUX})
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON35 ${PYTHON35_DARWIN})
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON35 ${PYTHON35_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python36/ya.make b/build/platform/python/python36/ya.make
new file mode 100644
index 0000000000..c9dcf5d88b
--- /dev/null
+++ b/build/platform/python/python36/ya.make
@@ -0,0 +1,18 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON36 ${PYTHON36_LINUX})
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON36 ${PYTHON36_DARWIN})
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON36 ${PYTHON36_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python37/ya.make b/build/platform/python/python37/ya.make
new file mode 100644
index 0000000000..724c3f5b76
--- /dev/null
+++ b/build/platform/python/python37/ya.make
@@ -0,0 +1,18 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON37 ${PYTHON37_LINUX})
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON37 ${PYTHON37_DARWIN})
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON37 ${PYTHON37_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python38/ya.make b/build/platform/python/python38/ya.make
new file mode 100644
index 0000000000..b6820ca6ca
--- /dev/null
+++ b/build/platform/python/python38/ya.make
@@ -0,0 +1,23 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON38 ${PYTHON38_LINUX})
+ELSEIF (OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON38 ${PYTHON38_DARWIN})
+ IF (ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON38 ${PYTHON38_DARWIN_ARM64})
+ ELSEIF(ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON38 ${PYTHON38_DARWIN})
+ ENDIF()
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON38 ${PYTHON38_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/python39/ya.make b/build/platform/python/python39/ya.make
new file mode 100644
index 0000000000..2579542d1e
--- /dev/null
+++ b/build/platform/python/python39/ya.make
@@ -0,0 +1,22 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(${ARCADIA_ROOT}/build/platform/python/resources.inc)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON39 ${PYTHON39_LINUX})
+ELSEIF (OS_DARWIN)
+ IF (ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON39 ${PYTHON39_DARWIN_ARM64})
+ ELSEIF(ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON39 ${PYTHON39_DARWIN})
+ ENDIF()
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON39 ${PYTHON39_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/python/readme.md b/build/platform/python/readme.md
new file mode 100644
index 0000000000..1eaafad35b
--- /dev/null
+++ b/build/platform/python/readme.md
@@ -0,0 +1,83 @@
+# Инструкция по добавлению нового бандла с системным питоном
+
+## Майним бандлы системного питона
+Бандлы системного питон майнятся для трех платформ: linux, darwin, windows.
+Подставляем под PYTHON_VERSION - версию нужного питона
+### Linux
+
+1. Устанавливаем систему с версией ubuntu, из которой планируется брать системный питон. Здесь есть два варианта
+ 1. Если нужно собрать системный питон, который будет запускать тесты на дистбилде, то нужно использовать ubuntu такой же версии, что и на дистбилде.
+ Тут стоит учитывать, что на дистбилде может быть достаточно старая версия ubuntu, на котором не будет нужной версии питона.
+ 2. Выбрать ту версию ubuntu, в которой есть нужный питон
+2. `mkdir -p ~/work/packages`
+3. `cd ~/work/packages`
+4. майним deb-пакеты питона
+ 1. Майним системный питон для запуска на дистбилде:
+
+ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances python{PYTHON_VERSION}-dev python{|3}-pkg-resources python{|3}-setuptools | grep "^\w" | sort -u)
+ rm libc6* libc-*
+
+ 2. Майним системный питон для сборки сошек:
+
+ apt download python{PYTHON_VERSION} python{PYTHON_VERSION}-dev python{PYTHON_VERSION}-minimal libpython{PYTHON_VERSION} libpython{PYTHON_VERSION}-dev libpython{PYTHON_VERSION}-stdlib libpython{PYTHON_VERSION}-minimal
+
+5. `cd ..`
+6. `for path in $(ls packages); do ar -xf packages/$path; tar -xf data.tar.xz; done;`
+7. `mv usr python`
+8. `tar -czf python{PYTHON_VERSION}_linux.tar.gz python`
+9. `ya upload python{PYTHON_VERSION}_linux.tar.gz -d "Ubuntu {UBUNTU_VERSION} x86_64 python{PYTHON_VERSION} installation" --do-not-remove`
+
+UBUNTU_VERSION - версия ubuntu, на которой майнился системный питон
+
+### Darwin
+1. Находим macbook.
+2. Все установленные питоны лежат в `/Library/Frameworks/Python.framework/Versions`
+3. Копируем `/Library/Frameworks/Python.framework` в директорию с именем `python`
+4. Чистим `python/Python.framework/Versions/` от ненужных питонов
+5. Проверяем, что симлинки указывают в правильные места
+ 1. `python/Python.framework/Versions/Current -> {PYTHON_VERSION}`
+ 2. `python/Python.framework/Headers -> Versions/Current/Headers`
+ 3. `python/Python.framework/Python -> Versions/Current/Python`
+ 4. `python/Python.framework/Resources -> Versions/Current/Resources`
+6. `tar -czf python{PYTHON_VERSION}_darwin.tar.gz python`
+7. `ya upload python{PYTHON_VERSION}_darwin.tar.gz -d "Darwin x86_64 python{PYTHON_VERSION} installation" --do-not-remove`
+
+Если нужного питона нет в системе, его нужно установить из `python.org`, его установку можно найти в стандартном месте.
+
+Если нужен питон из `brew`, его установку можно найти в `/usr/local/Cellar/python*/{python_version}/Frameworks/`,
+ а дальше следовать стандартной инструкции
+
+### Windows
+1. Находим машинку с windows
+2. Устанавливаем нужную версию питона из `python.org`
+3. Копируем содержимое установки питона в директорию `python`
+4. Пакуем директорию `python` в `python{PYTHON_VERSION}_windows.tar.gz`
+5. `ya upload python{PYTHON_VERSION}_windows.tar.gz -d "Windows x86_64 python{PYTHON_VERSION} installation" --do-not-remove`
+
+## Добавляем бандлы системного питона в сборку
+
+1. Конфигурация бандлов системных питонов находится здесь [build/platform/python](https://a.yandex-team.ru/arc/trunk/arcadia/build/platform/python)
+2. Добавляем сендбокс ресурсы собранных бандлов в файл [resources.inc](https://a.yandex-team.ru/arc/trunk/arcadia/build/platform/python/resources.inc)
+
+ SET(PYTHON38_LINUX sbr:1211259884)
+
+3. Добавляем служебные переменные `_SYSTEM_PYTHON*, PY_VERSION, PY_FRAMEWORK_VERSION` для системного питона, если их еще нет,
+в [ymake.core.conf](https://a.yandex-team.ru/arc/trunk/arcadia/build/ymake.core.conf?rev=7640792#L380) по аналогии.
+
+ "3.8" ? {
+ _SYSTEM_PYTHON38=yes
+ PY_VERSION=3.8
+ PY_FRAMEWORK_VERSION=3.8
+ }
+
+4. Добавляем ресурс в [build/platform/python/ya.make](https://a.yandex-team.ru/arc/trunk/arcadia/build/platform/python/ya.make)
+
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON38_LINUX})
+
+## Проверяем сборку
+1. Создаем тривиальный PY2MODULE с использование `c api` положенного питона, или находим подходящий в репозитории
+2. Собираем его:
+ 1. linux `ya make -DUSE_SYSTEM_PYTHON=3.8 --target-platform linux`
+ 2. darwin `ya make -DUSE_SYSTEM_PYTHON=3.8 --target-platform darwin`
+ 3. windows `ya make -DUSE_SYSTEM_PYTHON=3.8 --target-platform win`
+3. Проверяем, что получившиеся модули импортятся в питонах на соответсвующих системах
diff --git a/build/platform/python/resources.inc b/build/platform/python/resources.inc
new file mode 100644
index 0000000000..a730a5039b
--- /dev/null
+++ b/build/platform/python/resources.inc
@@ -0,0 +1,32 @@
+SET(PYTHON27_LINUX sbr:1666107838) # Different from others(compatible with running tests) DEVTOOLS-7424
+SET(PYTHON34_LINUX sbr:419260733)
+SET(PYTHON35_LINUX sbr:1658217692) # Different from others(compatible with running tests) DEVTOOLS-7424
+SET(PYTHON36_LINUX sbr:2569180519) # Different from others(compatible with running tests) DEVTOOLS-7424
+SET(PYTHON37_LINUX sbr:616675620)
+SET(PYTHON38_LINUX sbr:1211259884)
+SET(PYTHON39_LINUX sbr:2019057022)
+SET(PYTHON310_LINUX sbr:2505611617)
+
+SET(PYTHON27_LINUX_ARM64 sbr:2145006545)
+
+SET(PYTHON27_DARWIN sbr:426406952)
+SET(PYTHON34_DARWIN sbr:426379328)
+SET(PYTHON35_DARWIN sbr:426409804)
+SET(PYTHON36_DARWIN sbr:426412777)
+SET(PYTHON37_DARWIN sbr:616740054)
+SET(PYTHON38_DARWIN sbr:1211286783)
+SET(PYTHON39_DARWIN sbr:2046345566)
+SET(PYTHON310_DARWIN sbr:2505677448)
+
+SET(PYTHON38_DARWIN_ARM64 sbr:2577173323)
+SET(PYTHON39_DARWIN_ARM64 sbr:2533263197)
+SET(PYTHON310_DARWIN_ARM64 sbr:2577250782)
+
+SET(PYTHON27_WINDOWS sbr:629001312)
+SET(PYTHON34_WINDOWS sbr:419220860)
+SET(PYTHON35_WINDOWS sbr:410155020)
+SET(PYTHON36_WINDOWS sbr:410161131)
+SET(PYTHON37_WINDOWS sbr:629042628)
+SET(PYTHON38_WINDOWS sbr:1211466284)
+SET(PYTHON39_WINDOWS sbr:2018972280)
+SET(PYTHON310_WINDOWS sbr:2506068927)
diff --git a/build/platform/python/tests/test_common.py b/build/platform/python/tests/test_common.py
new file mode 100644
index 0000000000..7a685330ea
--- /dev/null
+++ b/build/platform/python/tests/test_common.py
@@ -0,0 +1,31 @@
+import subprocess
+
+import pytest
+
+from build.platform.python.tests import testlib
+
+PYTHON_VERSIONS = ["2.7", "3.4", "3.5", "3.6"] # 3.7, 3.8 are not runnable
+
+
+@pytest.mark.parametrize("pyver", PYTHON_VERSIONS)
+def test_version_matched(pyver):
+ testlib.check_python_version(pyver)
+
+
+@pytest.mark.parametrize("pyver", PYTHON_VERSIONS)
+def test_python_max_unicode_bytes(pyver):
+ cmd = [testlib.get_python_bin(pyver), '-c', 'import sys; print(sys.maxunicode)']
+ maxunicode = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode('utf-8')
+ assert int(maxunicode) > 65535, "Found UCS2 build"
+
+
+@pytest.mark.parametrize("pyver", PYTHON_VERSIONS)
+def test_python_imports(pyver):
+ imports = {
+ "2.7": ['pkg_resources'],
+ "3.4": [],
+ "3.5": ['pkg_resources'],
+ "3.6": [],
+ }
+ for imp in imports[pyver]:
+ subprocess.check_call([testlib.get_python_bin(pyver), '-c', 'import ' + imp])
diff --git a/build/platform/python/tests/testlib.py b/build/platform/python/tests/testlib.py
new file mode 100644
index 0000000000..d12f2815d4
--- /dev/null
+++ b/build/platform/python/tests/testlib.py
@@ -0,0 +1,21 @@
+import os
+import subprocess
+
+import yatest.common
+
+
+def get_python_bin(ver):
+ res_name = 'EXTERNAL_PYTHON{}_RESOURCE_GLOBAL'.format(ver.replace('.', ''))
+ gr = yatest.common.global_resources()
+ if res_name in gr:
+ bindir = os.path.join(gr[res_name], 'python', 'bin')
+ if ('python' + ver) in os.listdir(bindir):
+ return os.path.join(bindir, 'python' + ver)
+ return os.path.join(bindir, 'python')
+
+ raise AssertionError("Resource '{}' is not available: {}".format(res_name, gr))
+
+
+def check_python_version(version):
+ ver = subprocess.check_output([get_python_bin(version), '-V'], stderr=subprocess.STDOUT).decode('utf-8')
+ assert version in ver
diff --git a/build/platform/python/tests/ya.make b/build/platform/python/tests/ya.make
new file mode 100644
index 0000000000..0d8965240e
--- /dev/null
+++ b/build/platform/python/tests/ya.make
@@ -0,0 +1,36 @@
+PY3TEST()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+IF (OS_DARWIN)
+ SIZE(LARGE)
+
+ TAG(
+ ya:fat
+ ya:force_sandbox ya:exotic_platform
+ )
+ENDIF()
+
+PY_SRCS(
+ testlib.py
+)
+
+TEST_SRCS(
+ test_common.py
+)
+
+PEERDIR(
+ build/platform/python/python27
+ build/platform/python/python34
+ build/platform/python/python35
+ build/platform/python/python36
+ build/platform/python/python37
+ build/platform/python/python38
+ build/platform/python/python39
+ build/platform/python/python310
+)
+
+END()
diff --git a/build/platform/python/ya.make b/build/platform/python/ya.make
new file mode 100644
index 0000000000..247e65f4c9
--- /dev/null
+++ b/build/platform/python/ya.make
@@ -0,0 +1,136 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:contrib
+ g:yatool
+)
+
+INCLUDE(resources.inc)
+
+IF (USE_SYSTEM_PYTHON)
+ IF (OS_LINUX)
+ IF (ARCH_ARM64 OR ARCH_AARCH64)
+ IF (_SYSTEM_PYTHON27)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON27_LINUX_ARM64})
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSEIF (ARCH_X86_64)
+ IF (_SYSTEM_PYTHON27)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON27_LINUX})
+ ELSEIF (_SYSTEM_PYTHON34)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON34_LINUX})
+ ELSEIF (_SYSTEM_PYTHON35)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON35_LINUX})
+ ELSEIF (_SYSTEM_PYTHON36)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON36_LINUX})
+ ELSEIF (_SYSTEM_PYTHON37)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON37_LINUX})
+ ELSEIF (_SYSTEM_PYTHON38)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON38_LINUX})
+ ELSEIF (_SYSTEM_PYTHON39)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON39_LINUX})
+ ELSEIF (_SYSTEM_PYTHON310)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON310_LINUX})
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ CFLAGS(
+ GLOBAL "-isystem$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/include"
+ GLOBAL "-isystem$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/include/python${PY_VERSION}"
+ )
+ ELSEIF (OS_DARWIN)
+ IF (PYTHON_DISTR == "macos-brew")
+ IF (ARCH_X86_64)
+ IF (_SYSTEM_PYTHON27)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON sbr:562720527)
+ ELSEIF (_SYSTEM_PYTHON36)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON sbr:562721643)
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ IF (ARCH_X86_64)
+ IF (_SYSTEM_PYTHON27)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON27_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON34)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON34_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON35)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON35_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON36)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON36_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON37)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON37_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON38)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON38_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON39)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON39_DARWIN})
+ ELSEIF (_SYSTEM_PYTHON310)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON310_DARWIN})
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSEIF(ARCH_ARM64)
+ IF (_SYSTEM_PYTHON38)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON38_DARWIN_ARM64})
+ ELSEIF(_SYSTEM_PYTHON39)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON39_DARWIN_ARM64})
+ ELSEIF(_SYSTEM_PYTHON310)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON310_DARWIN_ARM64})
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ENDIF()
+ CFLAGS(GLOBAL "-isystem$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/Python.framework/Versions/${PY_FRAMEWORK_VERSION}/include/python${PY_VERSION}")
+ ELSEIF (OS_WINDOWS)
+ IF (ARCH_X86_64)
+ IF (_SYSTEM_PYTHON27)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON27_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON34)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON34_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON35)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON35_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON36)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON36_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON37)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON37_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON38)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON38_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON39)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON39_WINDOWS})
+ ELSEIF (_SYSTEM_PYTHON310)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_PYTHON ${PYTHON310_WINDOWS})
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ ELSE()
+ ENABLE(PYTHON_NOT_FOUND)
+ ENDIF()
+ CFLAGS(GLOBAL "/I$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/include")
+ LDFLAGS("/LIBPATH:$EXTERNAL_PYTHON_RESOURCE_GLOBAL/python/libs")
+ ENDIF()
+
+ IF (PYTHON_NOT_FOUND)
+ MESSAGE(FATAL_ERROR "No system Python ${USE_SYSTEM_PYTHON} for the selected platform")
+ ENDIF()
+ELSEIF (NOT USE_ARCADIA_PYTHON)
+ CFLAGS(GLOBAL $PYTHON_FLAGS)
+ IF (OS_WINDOWS)
+ LDFLAGS($PYTHON_LDFLAGS $PYTHON_LIBRARIES)
+ ENDIF()
+ENDIF()
+
+END()
+
+RECURSE_FOR_TESTS(
+ tests
+)
diff --git a/build/platform/python/ymake_python3/ya.make b/build/platform/python/ymake_python3/ya.make
new file mode 100644
index 0000000000..c781448641
--- /dev/null
+++ b/build/platform/python/ymake_python3/ya.make
@@ -0,0 +1,33 @@
+RESOURCES_LIBRARY()
+
+OWNER(
+ g:arcadia-devtools
+ g:yatool
+)
+
+SET(YMAKE_PYTHON3_LINUX sbr:2693706966)
+SET(YMAKE_PYTHON3_DARWIN sbr:2693705780)
+SET(YMAKE_PYTHON3_DARWIN_ARM64 sbr:2693704462)
+SET(YMAKE_PYTHON3_WINDOWS sbr:2693706398)
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ YMAKE_PYTHON3
+ ${YMAKE_PYTHON3_DARWIN} FOR DARWIN
+ ${YMAKE_PYTHON3_DARWIN_ARM64} FOR DARWIN-ARM64
+ ${YMAKE_PYTHON3_LINUX} FOR LINUX
+ ${YMAKE_PYTHON3_WINDOWS} FOR WIN32
+)
+
+IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_YMAKE_PYTHON3 ${YMAKE_PYTHON3_LINUX})
+ELSEIF (OS_DARWIN)
+ IF (ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_YMAKE_PYTHON3 ${YMAKE_PYTHON3_DARWIN_ARM64})
+ ELSEIF(ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_YMAKE_PYTHON3 ${YMAKE_PYTHON3_DARWIN})
+ ENDIF()
+ELSEIF (OS_WINDOWS)
+ DECLARE_EXTERNAL_RESOURCE(EXTERNAL_YMAKE_PYTHON3 ${YMAKE_PYTHON3_WINDOWS})
+ENDIF()
+
+END()
diff --git a/build/platform/qt/ya.make b/build/platform/qt/ya.make
new file mode 100644
index 0000000000..e058ef99b1
--- /dev/null
+++ b/build/platform/qt/ya.make
@@ -0,0 +1,34 @@
+RESOURCES_LIBRARY()
+
+OWNER(g:contrib heretic)
+
+IF (NOT QT_REQUIRED)
+ MESSAGE(FATAL_ERROR "No QT Toolkit for your build")
+ELSE()
+ IF (OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(QT sbr:2694823276)
+ ELSEIF (OS_DARWIN)
+ CFLAGS(GLOBAL "-F$QT_RESOURCE_GLOBAL/lib")
+ LDFLAGS("-F$QT_RESOURCE_GLOBAL/lib")
+ DECLARE_EXTERNAL_RESOURCE(QT sbr:2694837565)
+ ELSE()
+ ENABLE(QT_NOT_FOUND)
+ ENDIF()
+
+ IF (HOST_OS_LINUX)
+ DECLARE_EXTERNAL_RESOURCE(HOST_QT sbr:2694823276)
+ ELSEIF (HOST_OS_DARWIN)
+ DECLARE_EXTERNAL_RESOURCE(HOST_QT sbr:2694837565)
+ ELSE()
+ ENABLE(QT_NOT_FOUND)
+ ENDIF()
+
+ IF (QT_NOT_FOUND)
+ MESSAGE(FATAL_ERROR "No QT Toolkit for the selected platform")
+ ELSE()
+ CFLAGS(GLOBAL "-isystem$QT_RESOURCE_GLOBAL/include")
+ LDFLAGS("-L$QT_RESOURCE_GLOBAL/lib")
+ ENDIF()
+ENDIF()
+
+END()
diff --git a/build/platform/test_tool/a.yaml b/build/platform/test_tool/a.yaml
new file mode 100644
index 0000000000..298148e450
--- /dev/null
+++ b/build/platform/test_tool/a.yaml
@@ -0,0 +1,16 @@
+service: devtools
+title: test_tool acceptance
+ci:
+ release-title-source: flow
+ secret: sec-01ekd5wc1dmdd544yp1xt3s9b8
+ runtime:
+ sandbox-owner: DEVTOOLS-LARGE
+ autocheck:
+ large-autostart:
+ - target: devtools/ya/build/tests/cross_compilation/mac_builds_linux
+ toolchains:
+ - default-darwin-x86_64-release
+ - target: devtools/ya/test/tests/port_manager/fat
+ toolchains:
+ - default-linux-x86_64-release-musl
+ - default-darwin-x86_64-release
diff --git a/build/platform/test_tool/host.ya.make.inc b/build/platform/test_tool/host.ya.make.inc
new file mode 100644
index 0000000000..c25f2b1326
--- /dev/null
+++ b/build/platform/test_tool/host.ya.make.inc
@@ -0,0 +1,16 @@
+IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:2764984950)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL3_HOST sbr:2764990673)
+ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:2764984688)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL3_HOST sbr:2764990185)
+ELSEIF (HOST_OS_LINUX AND HOST_ARCH_PPC64LE)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:2764984559)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL3_HOST sbr:2764990014)
+ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:2764985330)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL3_HOST sbr:2764990852)
+ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:2764984404)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL3_HOST sbr:2764989842)
+ENDIF()
diff --git a/build/platform/test_tool/ya.make b/build/platform/test_tool/ya.make
new file mode 100644
index 0000000000..fd97d51ed8
--- /dev/null
+++ b/build/platform/test_tool/ya.make
@@ -0,0 +1,20 @@
+RESOURCES_LIBRARY()
+OWNER(
+ g:yatest
+ heretic
+)
+
+IF (TEST_TOOL_HOST_LOCAL)
+ MESSAGE(WARNING Host test tool $TEST_TOOL_HOST_LOCAL will be used)
+ENDIF()
+INCLUDE(host.ya.make.inc)
+IF (TEST_TOOL_TARGET_LOCAL)
+ MESSAGE(WARNING Target test tool $TEST_TOOL_TARGET_LOCAL will be used)
+ENDIF()
+IF (OS_IOS AND NOT BUILD_IOS_APP)
+ DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_TARGET sbr:707351393)
+ INCLUDE(${ARCADIA_ROOT}/build/platform/xcode/tools/ya.make.inc)
+ENDIF()
+
+END()
+
diff --git a/build/platform/wine/ya.make b/build/platform/wine/ya.make
new file mode 100644
index 0000000000..7d74cb279b
--- /dev/null
+++ b/build/platform/wine/ya.make
@@ -0,0 +1,10 @@
+RESOURCES_LIBRARY()
+
+OWNER(neksard)
+
+# do not forget to update resources in ya.conf.json
+DECLARE_EXTERNAL_RESOURCE(WINE_TOOL sbr:1093314933)
+DECLARE_EXTERNAL_RESOURCE(WINE32_TOOL sbr:2264052281)
+
+SET(NEED_PLATFORM_PEERDIRS no)
+END()
diff --git a/build/platform/xcode/swift/ya.make b/build/platform/xcode/swift/ya.make
new file mode 100644
index 0000000000..3d50525acb
--- /dev/null
+++ b/build/platform/xcode/swift/ya.make
@@ -0,0 +1,12 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+
+IF (HOST_OS_DARWIN)
+ SET(__XCODE_RESOURCE_NAME SWIFT_XCODE_TOOLCHAIN_ROOT)
+ SET(__XCODE_TOOLCHAIN_VERSION ${SWIFT_XCODE_TOOLCHAIN_VERSION})
+ INCLUDE(${ARCADIA_ROOT}/build/platform/xcode/ya.make.inc)
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported host platform for swift compiler)
+ENDIF()
+
+END()
diff --git a/build/platform/xcode/tools/ya.make b/build/platform/xcode/tools/ya.make
new file mode 100644
index 0000000000..4c4e135179
--- /dev/null
+++ b/build/platform/xcode/tools/ya.make
@@ -0,0 +1,4 @@
+RESOURCES_LIBRARY()
+OWNER(heretic)
+INCLUDE(ya.make.inc)
+END()
diff --git a/build/platform/xcode/tools/ya.make.inc b/build/platform/xcode/tools/ya.make.inc
new file mode 100644
index 0000000000..a154917e33
--- /dev/null
+++ b/build/platform/xcode/tools/ya.make.inc
@@ -0,0 +1,9 @@
+IF (NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported host platform for Xcode tools)
+ENDIF()
+IF (LOCAL_XCODE_TOOLS) # Local XCode installation is used instead.
+ELSEIF (XCODE_TOOLS_VERSION == "10.1")
+ DECLARE_EXTERNAL_RESOURCE(XCODE_TOOLS_ROOT sbr:799017771)
+ELSE()
+ MESSAGE(FATAL_ERROR Unsupported Xcode tools version: $XCODE_TOOLS_VERSION)
+ENDIF()
diff --git a/build/platform/xcode/ya.make.inc b/build/platform/xcode/ya.make.inc
new file mode 100644
index 0000000000..3b24e18448
--- /dev/null
+++ b/build/platform/xcode/ya.make.inc
@@ -0,0 +1,16 @@
+IF (NOT __XCODE_RESOURCE_NAME)
+ MESSAGE(FATAL_ERROR "Unspecified __XCODE_RESOURCE_NAME variable")
+ENDIF()
+IF (NOT __XCODE_TOOLCHAIN_VERSION)
+ MESSAGE(FATAL_ERROR "Unspecified Xcode toolchain version for" $XCODE_RESOURCE_NAME)
+ELSEIF (__XCODE_TOOLCHAIN_VERSION == "10.2.1")
+ DECLARE_EXTERNAL_RESOURCE(${__XCODE_RESOURCE_NAME} sbr:971159365)
+ELSEIF (__XCODE_TOOLCHAIN_VERSION == "9.2")
+ DECLARE_EXTERNAL_RESOURCE(${__XCODE_RESOURCE_NAME} sbr:498971125)
+ELSEIF (__XCODE_TOOLCHAIN_VERSION == "8.3.3")
+ DECLARE_EXTERNAL_RESOURCE(${__XCODE_RESOURCE_NAME} sbr:701155000)
+ELSEIF (__XCODE_TOOLCHAIN_VERSION == "8.2.1")
+ DECLARE_EXTERNAL_RESOURCE(${__XCODE_RESOURCE_NAME} sbr:500014407)
+ELSE()
+ MESSAGE(FATAL_ERROR "Unsupported Xcode toolchain version" $__XCODE_TOOLCHAIN_VERSION "for" $XCODE_RESOURCE_NAME)
+ENDIF()
diff --git a/build/platform/yfm/ya.make b/build/platform/yfm/ya.make
new file mode 100644
index 0000000000..ece089e998
--- /dev/null
+++ b/build/platform/yfm/ya.make
@@ -0,0 +1,19 @@
+OWNER(
+ workfork
+)
+
+RESOURCES_LIBRARY()
+
+IF(NOT HOST_OS_LINUX AND NOT HOST_OS_WINDOWS AND NOT HOST_OS_DARWIN)
+ MESSAGE(FATAL_ERROR Unsupported platform for YFM tool)
+ENDIF()
+
+DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE(
+ YFM_TOOL
+ sbr:2614616596 FOR DARWIN-ARM64
+ sbr:2614616596 FOR DARWIN
+ sbr:2614615780 FOR LINUX
+ sbr:2614617315 FOR WIN32
+)
+
+END()
diff --git a/build/platform/yocto_sdk/yocto_sdk/ya.make b/build/platform/yocto_sdk/yocto_sdk/ya.make
new file mode 100644
index 0000000000..37d1727168
--- /dev/null
+++ b/build/platform/yocto_sdk/yocto_sdk/ya.make
@@ -0,0 +1,11 @@
+RESOURCES_LIBRARY()
+
+OWNER(heretic)
+
+DECLARE_EXTERNAL_RESOURCE(YOCTO_SDK_ROOT sbr:882588946)
+CFLAGS(
+ GLOBAL -cxx-isystem GLOBAL $YOCTO_SDK_ROOT_RESOURCE_GLOBAL/usr/include/c++/5.3.0/arm-poky-linux-gnueabi
+ GLOBAL -cxx-isystem GLOBAL $YOCTO_SDK_ROOT_RESOURCE_GLOBAL/usr/include/c++/5.3.0
+)
+
+END()