yql_udf.conf 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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_TEST_CONTRIB: 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. ### @usage: _ADD_YQL_UDF_DEPS()
  62. ###
  63. ### Add all needed PEERDIRs to a YQL_UDF.
  64. ###
  65. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  66. macro _ADD_YQL_UDF_DEPS() {
  67. PEERDIR(yql/essentials/public/udf)
  68. PEERDIR(yql/essentials/public/udf/support)
  69. }
  70. macro _ADD_YQL_UDF_YDB_DEPS() {
  71. PEERDIR(yql/essentials/public/udf)
  72. PEERDIR(yql/essentials/public/udf/support)
  73. }
  74. macro _ADD_YQL_UDF_DEPS_CONTRIB() {
  75. PEERDIR(yql/essentials/public/udf)
  76. PEERDIR(yql/essentials/public/udf/support)
  77. }
  78. ### @usage: _MAKE_YQL_UDF()
  79. ###
  80. ### Make module definition an YQL UDF: add all needed dependencies, properties and flags
  81. ###
  82. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  83. macro _MAKE_YQL_UDF() {
  84. _ADD_YQL_UDF_DEPS()
  85. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  86. # For Windows using declspecs
  87. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  88. when ($WINDOWS == "yes") {
  89. YQL_UDF_EXPORT=
  90. }
  91. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  92. }
  93. macro _MAKE_YQL_UDF_YDB() {
  94. _ADD_YQL_UDF_YDB_DEPS()
  95. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  96. # For Windows using declspecs
  97. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  98. when ($WINDOWS == "yes") {
  99. YQL_UDF_EXPORT=
  100. }
  101. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  102. }
  103. macro _MAKE_YQL_UDF_CONTRIB() {
  104. _ADD_YQL_UDF_DEPS_CONTRIB()
  105. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  106. # For Windows using declspecs
  107. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/public/udf/udfs_exports.exports)
  108. when ($WINDOWS == "yes") {
  109. YQL_UDF_EXPORT=
  110. }
  111. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  112. }
  113. ### @usage: YQL_UDF_MODULE(name)
  114. ###
  115. ### The extension module for YQL with C++ UDF (User Defined Function YQL)
  116. ###
  117. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  118. module YQL_UDF_MODULE: UDF_BASE {
  119. .CMD=$YQL_UDF_LINK_CMD
  120. _MAKE_YQL_UDF()
  121. PROVIDES(YqlServicePolicy)
  122. }
  123. module YQL_UDF_YDB_MODULE: UDF_BASE {
  124. .CMD=$YQL_UDF_LINK_CMD
  125. _MAKE_YQL_UDF_YDB()
  126. PROVIDES(YqlServicePolicy)
  127. }
  128. module YQL_UDF_MODULE_CONTRIB: UDF_BASE {
  129. .CMD=$YQL_UDF_LINK_CMD
  130. _MAKE_YQL_UDF_CONTRIB()
  131. PROVIDES(YqlServicePolicy)
  132. }
  133. module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM {
  134. .CMD=$YQL_UDF_LINK_PRG_CMD
  135. _MAKE_YQL_UDF()
  136. }
  137. _UDF_SHARED_SEM=$_CPP_DYN_LIBRARY_SEM
  138. ### @usage: YQL_UDF(name)
  139. ###
  140. ### User-defined function for YQL
  141. ###
  142. ### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros.
  143. ### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs.
  144. ###
  145. ### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE)
  146. multimodule YQL_UDF {
  147. module YQL_UDF_SHARED: YQL_UDF_MODULE {
  148. .SEM=_UDF_SHARED_SEM
  149. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  150. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME
  151. NO_CLANG_TIDY()
  152. }
  153. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  154. .ALIASES=SRCS=GLOBAL_SRCS
  155. .SEM=_CPP_LIBRARY_SEM
  156. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  157. OBJ_SUF=.udfs
  158. _ADD_YQL_UDF_DEPS()
  159. # disable credits generation for static library
  160. SET(CREDITS_FLAGS)
  161. when ($MSVC == "yes" || $CYGWIN == "yes") {
  162. MODULE_SUFFIX=.static.lib
  163. }
  164. }
  165. }
  166. multimodule YQL_UDF_YDB {
  167. module YQL_UDF_SHARED: YQL_UDF_YDB_MODULE {
  168. .SEM=_UDF_SHARED_SEM
  169. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  170. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& target_properties-ITEM && target_properties-name OUTPUT_NAME && target_properties-value $REALPRJNAME
  171. NO_CLANG_TIDY()
  172. }
  173. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  174. .ALIASES=SRCS=GLOBAL_SRCS
  175. .SEM=_CPP_LIBRARY_SEM
  176. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  177. OBJ_SUF=.udfs
  178. _ADD_YQL_UDF_YDB_DEPS()
  179. # disable credits generation for static library
  180. SET(CREDITS_FLAGS)
  181. when ($MSVC == "yes" || $CYGWIN == "yes") {
  182. MODULE_SUFFIX=.static.lib
  183. }
  184. }
  185. }
  186. multimodule YQL_UDF_CONTRIB {
  187. module YQL_UDF_SHARED: YQL_UDF_MODULE_CONTRIB {
  188. .SEM=_UDF_SHARED_SEM
  189. NO_CLANG_TIDY()
  190. }
  191. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  192. .ALIASES=SRCS=GLOBAL_SRCS
  193. .SEM=_CPP_LIBRARY_SEM
  194. .GLOBAL_SEM=_CPP_OBJ_LIBRARY_SEM
  195. OBJ_SUF=.udfs
  196. _ADD_YQL_UDF_DEPS_CONTRIB()
  197. # disable credits generation for static library
  198. SET(CREDITS_FLAGS)
  199. when ($MSVC == "yes" || $CYGWIN == "yes") {
  200. MODULE_SUFFIX=.static.lib
  201. }
  202. }
  203. }
  204. ### @usage: YQL_ABI_VERSION(major minor release))
  205. ###
  206. ### Specifying the supported ABI for YQL_UDF.
  207. ###
  208. ### @see: [YQL_UDF()](#multimodule_YQL_UDF)
  209. macro YQL_ABI_VERSION(Major, Minor, Patch) {
  210. YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch
  211. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  212. }
  213. ### @usage: YQL_LAST_ABI_VERSION()
  214. ###
  215. ### Use the last ABI for YQL_UDF
  216. ###
  217. macro YQL_LAST_ABI_VERSION() {
  218. YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION
  219. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  220. }
  221. ### @usage: YQL_PYTHON_UDF(name)
  222. ###
  223. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  224. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  225. ###
  226. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  227. module YQL_PYTHON_UDF: YQL_UDF_MODULE {
  228. .IGNORED=USE_PYTHON2
  229. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  230. USE_PYTHON2()
  231. _ARCADIA_PYTHON_ADDINCL()
  232. PEERDIR(build/platform/python/ldflags)
  233. PEERDIR(library/python/type_info)
  234. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  235. when ($WINDOWS == "yes") {
  236. YQL_PYTHON_UDF_EXPORT=
  237. }
  238. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  239. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  240. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  241. SET(MODULE_LANG PY2)
  242. }
  243. ### @usage: YQL_PYTHON_UDF_PROGRAM(name)
  244. ###
  245. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  246. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  247. ###
  248. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  249. module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE {
  250. .IGNORED=USE_PYTHON2
  251. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  252. USE_PYTHON2()
  253. _ARCADIA_PYTHON_ADDINCL()
  254. PEERDIR(build/platform/python/ldflags)
  255. PEERDIR(library/python/type_info)
  256. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  257. when ($WINDOWS == "yes") {
  258. YQL_PYTHON_UDF_EXPORT=
  259. }
  260. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  261. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  262. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  263. SET(MODULE_LANG PY2)
  264. }
  265. ### @usage: YQL_PYTHON3_UDF(name)
  266. ###
  267. ### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL).
  268. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  269. ###
  270. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  271. module YQL_PYTHON3_UDF: YQL_UDF_MODULE {
  272. .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3
  273. _ARCADIA_PYTHON3_ADDINCL()
  274. PEERDIR(build/platform/python/ldflags)
  275. PEERDIR(library/python/type_info)
  276. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/essentials/udfs/common/python/python_udf/python_udfs_exports.exports)
  277. when ($WINDOWS == "yes") {
  278. YQL_PYTHON_UDF_EXPORT=
  279. }
  280. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  281. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  282. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  283. SET(MODULE_LANG PY3)
  284. }
  285. macro _MAKE_YQL_PYTHON_UDF_TEST() {
  286. PEERDIR(library/python/pytest)
  287. DEPENDS(yql/tools/run_python_udf)
  288. SETUP_PYTEST_BIN(RUNNER_BIN $(BUILD_ROOT)/yql/tools/run_python_udf/run_python_udf)
  289. }
  290. ### @usage: YQL_PYTHON_UDF_TEST(name)
  291. ###
  292. ### The Python test for Python YQL UDF (Python User Defined Function for YQL). The code should be a proper YQL_PYTHON_UDF.
  293. ###
  294. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  295. ###
  296. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  297. ###
  298. ### @example: https://a.yandex-team.ru/arc/trunk/arcadia/yql/udfs/test/simple/ya.make
  299. ###
  300. ### @see: [YQL_PYTHON_UDF()](#module_YQL_PYTHON_UDF)
  301. module YQL_PYTHON_UDF_TEST: YQL_PYTHON_UDF {
  302. _MAKE_YQL_PYTHON_UDF_TEST()
  303. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  304. }
  305. ### @usage: YQL_PYTHON3_UDF_TEST(name)
  306. ###
  307. ### The Python test for Python 3.x YQL UDF (User Defined Function for YQL). The code should be a proper YQL_PYTHON3_UDF.
  308. ###
  309. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  310. ###
  311. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  312. ###
  313. ### @see: [YQL_PYTHON3_UDF()](#module_YQL_PYTHON3_UDF)
  314. module YQL_PYTHON3_UDF_TEST: YQL_PYTHON3_UDF {
  315. _MAKE_YQL_PYTHON_UDF_TEST()
  316. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  317. }