yql_udf.conf 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. when ($SANITIZER_TYPE || $USE_ARCADIA_PYTHON == "no" || $UDF_NO_PROBE == "yes" || $MUSL == "yes" || $TIDY == "yes") {
  2. YQL_UDF_LINK_CMD=$LINK_DYN_LIB
  3. YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB
  4. }
  5. otherwise {
  6. YQL_UDF_LINK_CMD=$LINK_DYN_LIB && ${tool:"yql/essentials/tools/udf_probe"} $TARGET ${hide;kv:"p UD"}
  7. YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB && ${tool:"yql/essentials/tools/udf_probe"} $TARGET ${hide;kv:"p UD"}
  8. }
  9. ### @usage: UDF_BASE(name [EXPORTS symlist_file] [PREFIX prefix]) #internal
  10. ###
  11. ### The base logic of all UDF extension modules (User-Defined Functions).
  12. ### Processing EXPORTS and PREFIX is the same as for DLL.
  13. ###
  14. ### https://wiki.yandex-team.ru/robot/manual/kiwi/userguide/#polzovatelskiefunkciiudftriggerykwcalc
  15. module UDF_BASE: DLL_UNIT {
  16. when ($MSVC != "yes" && $DARWIN != "yes") {
  17. LDFLAGS+= -Wl,-Bsymbolic
  18. }
  19. }
  20. UDF_NO_PROBE="no"
  21. ### @usage: UDF_NO_PROBE()
  22. ###
  23. ### Disable UDF import check at build stage
  24. macro UDF_NO_PROBE() {
  25. ENABLE(UDF_NO_PROBE)
  26. }
  27. ### @usage: YQL_UDF_TEST([name])
  28. ###
  29. ### The module to test YQL C++ UDF.
  30. ###
  31. ### Documentation: https://yql.yandex-team.ru/docs/yt/libraries/testing/
  32. ### Documentation about the Arcadia test system: https://wiki.yandex-team.ru/yatool/test/
  33. module YQL_UDF_TEST: PY3TEST_BIN {
  34. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  35. PEERDIR(yql/essentials/tests/common/udf_test)
  36. DEPENDS(yql/essentials/tools/astdiff)
  37. DEPENDS(yql/tools/yqlrun)
  38. DEPENDS(yql/essentials/tools/udf_resolver)
  39. DATA(arcadia/yql/essentials/mount)
  40. DATA(arcadia/yql/essentials/cfg/udf_test)
  41. ENV(YQL_ASTDIFF_PATH="yql/essentials/tools/astdiff/astdiff")
  42. ENV(YQL_CONFIG_DIR="yql/essentials/cfg/udf_test")
  43. ENV(YQL_YQLRUN_PATH="yql/tools/yqlrun/yqlrun")
  44. ENV(YQL_SQL2YQL_PATH="yql/essentials/tools/sql2yql/sql2yql")
  45. ENV(YQL_UDFRESOLVER_PATH="yql/essentials/tools/udf_resolver/udf_resolver")
  46. }
  47. module YQL_UDF_YDB_TEST: PY3TEST_BIN {
  48. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  49. PEERDIR(yql/essentials/tests/common/udf_test)
  50. DEPENDS(yql/essentials/tools/astdiff)
  51. DEPENDS(yql/tools/yqlrun)
  52. DEPENDS(yql/essentials/tools/udf_resolver)
  53. DATA(arcadia/yql/essentials/mount)
  54. DATA(arcadia/yql/essentials/cfg/udf_test)
  55. ENV(YQL_ASTDIFF_PATH="yql/essentials/tools/astdiff/astdiff")
  56. ENV(YQL_CONFIG_DIR="yql/essentials/cfg/udf_test")
  57. ENV(YQL_YQLRUN_PATH="yql/tools/yqlrun/yqlrun")
  58. ENV(YQL_SQL2YQL_PATH="yql/essentials/tools/sql2yql/sql2yql")
  59. ENV(YQL_UDFRESOLVER_PATH="yql/essentials/tools/udf_resolver/udf_resolver")
  60. }
  61. module YQL_UDF_TEST_CONTRIB: PY3TEST_BIN {
  62. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  63. PEERDIR(yql/essentials/tests/common/udf_test)
  64. DEPENDS(yql/essentials/tools/astdiff)
  65. DEPENDS(yql/tools/yqlrun)
  66. DEPENDS(yql/essentials/tools/udf_resolver)
  67. DATA(arcadia/yql/essentials/mount)
  68. DATA(arcadia/yql/essentials/cfg/udf_test)
  69. ENV(YQL_ASTDIFF_PATH="yql/essentials/tools/astdiff/astdiff")
  70. ENV(YQL_CONFIG_DIR="yql/essentials/cfg/udf_test")
  71. ENV(YQL_YQLRUN_PATH="yql/tools/yqlrun/yqlrun")
  72. ENV(YQL_SQL2YQL_PATH="yql/essentials/tools/sql2yql/sql2yql")
  73. ENV(YQL_UDFRESOLVER_PATH="yql/essentials/tools/udf_resolver/udf_resolver")
  74. }
  75. ### @usage: _ADD_YQL_UDF_DEPS()
  76. ###
  77. ### Add all needed PEERDIRs to a YQL_UDF.
  78. ###
  79. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  80. macro _ADD_YQL_UDF_DEPS() {
  81. PEERDIR(yql/essentials/public/udf)
  82. PEERDIR(yql/essentials/public/udf/support)
  83. }
  84. macro _ADD_YQL_UDF_YDB_DEPS() {
  85. PEERDIR(yql/essentials/public/udf)
  86. PEERDIR(yql/essentials/public/udf/support)
  87. }
  88. macro _ADD_YQL_UDF_DEPS_CONTRIB() {
  89. PEERDIR(yql/essentials/public/udf)
  90. PEERDIR(yql/essentials/public/udf/support)
  91. }
  92. ### @usage: _MAKE_YQL_UDF()
  93. ###
  94. ### Make module definition an YQL UDF: add all needed dependencies, properties and flags
  95. ###
  96. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  97. macro _MAKE_YQL_UDF() {
  98. _ADD_YQL_UDF_DEPS()
  99. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  100. # For Windows using declspecs
  101. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  102. when ($WINDOWS == "yes") {
  103. YQL_UDF_EXPORT=
  104. }
  105. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  106. }
  107. macro _MAKE_YQL_UDF_YDB() {
  108. _ADD_YQL_UDF_YDB_DEPS()
  109. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  110. # For Windows using declspecs
  111. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  112. when ($WINDOWS == "yes") {
  113. YQL_UDF_EXPORT=
  114. }
  115. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  116. }
  117. macro _MAKE_YQL_UDF_CONTRIB() {
  118. _ADD_YQL_UDF_DEPS_CONTRIB()
  119. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  120. # For Windows using declspecs
  121. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  122. when ($WINDOWS == "yes") {
  123. YQL_UDF_EXPORT=
  124. }
  125. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  126. }
  127. ### @usage: YQL_UDF_MODULE(name)
  128. ###
  129. ### The extension module for YQL with C++ UDF (User Defined Function YQL)
  130. ###
  131. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  132. module YQL_UDF_MODULE: UDF_BASE {
  133. .CMD=$YQL_UDF_LINK_CMD
  134. _MAKE_YQL_UDF()
  135. PROVIDES(YqlServicePolicy)
  136. }
  137. module YQL_UDF_YDB_MODULE: UDF_BASE {
  138. .CMD=$YQL_UDF_LINK_CMD
  139. _MAKE_YQL_UDF_YDB()
  140. PROVIDES(YqlServicePolicy)
  141. }
  142. module YQL_UDF_MODULE_CONTRIB: UDF_BASE {
  143. .CMD=$YQL_UDF_LINK_CMD
  144. _MAKE_YQL_UDF_CONTRIB()
  145. PROVIDES(YqlServicePolicy)
  146. }
  147. module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM {
  148. .CMD=$YQL_UDF_LINK_PRG_CMD
  149. _MAKE_YQL_UDF()
  150. }
  151. _UDF_SHARED_SEM=$_CPP_DYN_LIBRARY_SEM
  152. ### @usage: YQL_UDF(name)
  153. ###
  154. ### User-defined function for YQL
  155. ###
  156. ### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros.
  157. ### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs.
  158. ###
  159. ### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE)
  160. multimodule YQL_UDF {
  161. module YQL_UDF_SHARED: YQL_UDF_MODULE {
  162. .SEM=_UDF_SHARED_SEM
  163. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  164. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME
  165. NO_CLANG_TIDY()
  166. }
  167. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  168. .ALIASES=SRCS=GLOBAL_SRCS
  169. .SEM=_CPP_LIBRARY_SEM
  170. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  171. OBJ_SUF=.udfs
  172. _ADD_YQL_UDF_DEPS()
  173. # disable credits generation for static library
  174. SET(CREDITS_FLAGS)
  175. when ($MSVC == "yes" || $CYGWIN == "yes") {
  176. MODULE_SUFFIX=.static.lib
  177. }
  178. }
  179. }
  180. multimodule YQL_UDF_YDB {
  181. module YQL_UDF_SHARED: YQL_UDF_YDB_MODULE {
  182. .SEM=_UDF_SHARED_SEM
  183. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  184. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME
  185. NO_CLANG_TIDY()
  186. }
  187. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  188. .ALIASES=SRCS=GLOBAL_SRCS
  189. .SEM=_CPP_LIBRARY_SEM
  190. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  191. OBJ_SUF=.udfs
  192. _ADD_YQL_UDF_YDB_DEPS()
  193. # disable credits generation for static library
  194. SET(CREDITS_FLAGS)
  195. when ($MSVC == "yes" || $CYGWIN == "yes") {
  196. MODULE_SUFFIX=.static.lib
  197. }
  198. }
  199. }
  200. multimodule YQL_UDF_CONTRIB {
  201. module YQL_UDF_SHARED: YQL_UDF_MODULE_CONTRIB {
  202. .SEM=_UDF_SHARED_SEM
  203. NO_CLANG_TIDY()
  204. }
  205. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  206. .ALIASES=SRCS=GLOBAL_SRCS
  207. .SEM=_CPP_LIBRARY_SEM
  208. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  209. OBJ_SUF=.udfs
  210. _ADD_YQL_UDF_DEPS_CONTRIB()
  211. # disable credits generation for static library
  212. SET(CREDITS_FLAGS)
  213. when ($MSVC == "yes" || $CYGWIN == "yes") {
  214. MODULE_SUFFIX=.static.lib
  215. }
  216. }
  217. }
  218. ### @usage: YQL_ABI_VERSION(major minor release))
  219. ###
  220. ### Specifying the supported ABI for YQL_UDF.
  221. ###
  222. ### @see: [YQL_UDF()](#multimodule_YQL_UDF)
  223. macro YQL_ABI_VERSION(Major, Minor, Patch) {
  224. YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch
  225. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  226. }
  227. ### @usage: YQL_LAST_ABI_VERSION()
  228. ###
  229. ### Use the last ABI for YQL_UDF
  230. ###
  231. macro YQL_LAST_ABI_VERSION() {
  232. YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION
  233. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  234. }
  235. ### @usage: YQL_PYTHON_UDF(name)
  236. ###
  237. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  238. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  239. ###
  240. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  241. module YQL_PYTHON_UDF: YQL_UDF_MODULE {
  242. .IGNORED=USE_PYTHON2
  243. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  244. USE_PYTHON2()
  245. _ARCADIA_PYTHON_ADDINCL()
  246. PEERDIR(build/platform/python/ldflags)
  247. PEERDIR(library/python/type_info)
  248. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  249. when ($WINDOWS == "yes") {
  250. YQL_PYTHON_UDF_EXPORT=
  251. }
  252. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  253. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  254. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  255. SET(MODULE_LANG PY2)
  256. }
  257. ### @usage: YQL_PYTHON_UDF_PROGRAM(name)
  258. ###
  259. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  260. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  261. ###
  262. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  263. module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE {
  264. .IGNORED=USE_PYTHON2
  265. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  266. USE_PYTHON2()
  267. _ARCADIA_PYTHON_ADDINCL()
  268. PEERDIR(build/platform/python/ldflags)
  269. PEERDIR(library/python/type_info)
  270. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  271. when ($WINDOWS == "yes") {
  272. YQL_PYTHON_UDF_EXPORT=
  273. }
  274. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  275. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  276. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  277. SET(MODULE_LANG PY2)
  278. }
  279. ### @usage: YQL_PYTHON3_UDF(name)
  280. ###
  281. ### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL).
  282. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  283. ###
  284. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  285. module YQL_PYTHON3_UDF: YQL_UDF_MODULE {
  286. .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3
  287. _ARCADIA_PYTHON3_ADDINCL()
  288. PEERDIR(build/platform/python/ldflags)
  289. PEERDIR(library/python/type_info)
  290. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  291. when ($WINDOWS == "yes") {
  292. YQL_PYTHON_UDF_EXPORT=
  293. }
  294. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  295. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  296. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  297. SET(MODULE_LANG PY3)
  298. }
  299. macro _MAKE_YQL_PYTHON_UDF_TEST() {
  300. PEERDIR(library/python/pytest)
  301. DEPENDS(yql/tools/run_python_udf)
  302. SETUP_PYTEST_BIN(RUNNER_BIN $(BUILD_ROOT)/yql/tools/run_python_udf/run_python_udf)
  303. }
  304. ### @usage: YQL_PYTHON_UDF_TEST(name)
  305. ###
  306. ### The Python test for Python YQL UDF (Python User Defined Function for YQL). The code should be a proper YQL_PYTHON_UDF.
  307. ###
  308. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  309. ###
  310. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  311. ###
  312. ### @example: https://a.yandex-team.ru/arc/trunk/arcadia/yql/udfs/test/simple/ya.make
  313. ###
  314. ### @see: [YQL_PYTHON_UDF()](#module_YQL_PYTHON_UDF)
  315. module YQL_PYTHON_UDF_TEST: YQL_PYTHON_UDF {
  316. _MAKE_YQL_PYTHON_UDF_TEST()
  317. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  318. }
  319. ### @usage: YQL_PYTHON3_UDF_TEST(name)
  320. ###
  321. ### The Python test for Python 3.x YQL UDF (User Defined Function for YQL). The code should be a proper YQL_PYTHON3_UDF.
  322. ###
  323. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  324. ###
  325. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  326. ###
  327. ### @see: [YQL_PYTHON3_UDF()](#module_YQL_PYTHON3_UDF)
  328. module YQL_PYTHON3_UDF_TEST: YQL_PYTHON3_UDF {
  329. _MAKE_YQL_PYTHON_UDF_TEST()
  330. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  331. }