yql_udf.conf 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  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/tools/udf_probe"} $TARGET ${kv;hide:"p UD"}
  7. YQL_UDF_LINK_PRG_CMD=$LINK_EXEC_DYN_LIB && ${tool:"yql/tools/udf_probe"} $TARGET ${kv;hide:"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(contrib/ydb/library/yql/tests/common/udf_test)
  36. DEPENDS(contrib/ydb/library/yql/tools/astdiff)
  37. DEPENDS(contrib/ydb/library/yql/tools/yqlrun)
  38. DATA(arcadia/contrib/ydb/library/yql/mount)
  39. DATA(arcadia/contrib/ydb/library/yql/cfg/udf_test)
  40. ENV(YQL_ASTDIFF_PATH="contrib/ydb/library/yql/tools/astdiff/astdiff")
  41. ENV(YQL_CONFIG_DIR="contrib/ydb/library/yql/cfg/udf_test")
  42. ENV(YQL_YQLRUN_PATH="contrib/ydb/library/yql/tools/yqlrun/yqlrun")
  43. ENV(YQL_SQL2YQL_PATH="contrib/ydb/library/yql/tools/sql2yql/sql2yql")
  44. }
  45. module YQL_UDF_YDB_TEST: PY3TEST_BIN {
  46. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  47. PEERDIR(ydb/library/yql/tests/common/udf_test)
  48. DEPENDS(ydb/library/yql/tools/astdiff)
  49. DEPENDS(ydb/library/yql/tools/yqlrun)
  50. DATA(arcadia/ydb/library/yql/mount)
  51. DATA(arcadia/ydb/library/yql/cfg/udf_test)
  52. }
  53. module YQL_UDF_TEST_CONTRIB: PY3TEST_BIN {
  54. PEERDIR(contrib/ydb/library/yql/tests/common/udf_test)
  55. DEPENDS(contrib/ydb/library/yql/tools/astdiff)
  56. DEPENDS(contrib/ydb/library/yql/tools/yqlrun)
  57. DATA(arcadia/contrib/ydb/library/yql/mount)
  58. DATA(arcadia/contrib/ydb/library/yql/cfg/udf_test)
  59. ENV(YQL_ASTDIFF_PATH="contrib/ydb/library/yql/tools/astdiff/astdiff")
  60. ENV(YQL_CONFIG_DIR="contrib/ydb/library/yql/cfg/udf_test")
  61. ENV(YQL_YQLRUN_PATH="contrib/ydb/library/yql/tools/yqlrun/yqlrun")
  62. ENV(YQL_SQL2YQL_PATH="contrib/ydb/library/yql/tools/sql2yql/sql2yql")
  63. }
  64. ### @usage: _ADD_YQL_UDF_DEPS()
  65. ###
  66. ### Add all needed PEERDIRs to a YQL_UDF.
  67. ###
  68. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  69. macro _ADD_YQL_UDF_DEPS() {
  70. PEERDIR(contrib/ydb/library/yql/public/udf)
  71. PEERDIR(contrib/ydb/library/yql/public/udf/support)
  72. }
  73. macro _ADD_YQL_UDF_YDB_DEPS() {
  74. PEERDIR(ydb/library/yql/public/udf)
  75. PEERDIR(ydb/library/yql/public/udf/support)
  76. }
  77. macro _ADD_YQL_UDF_DEPS_CONTRIB() {
  78. PEERDIR(contrib/ydb/library/yql/public/udf)
  79. PEERDIR(contrib/ydb/library/yql/public/udf/support)
  80. }
  81. ### @usage: _MAKE_YQL_UDF()
  82. ###
  83. ### Make module definition an YQL UDF: add all needed dependencies, properties and flags
  84. ###
  85. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  86. macro _MAKE_YQL_UDF() {
  87. _ADD_YQL_UDF_DEPS()
  88. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  89. # For Windows using declspecs
  90. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/contrib/ydb/library/yql/public/udf/udfs_exports.exports)
  91. when ($WINDOWS == "yes") {
  92. YQL_UDF_EXPORT=
  93. }
  94. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  95. }
  96. macro _MAKE_YQL_UDF_YDB() {
  97. _ADD_YQL_UDF_YDB_DEPS()
  98. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  99. # For Windows using declspecs
  100. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/ydb/library/yql/public/udf/udfs_exports.exports)
  101. when ($WINDOWS == "yes") {
  102. YQL_UDF_EXPORT=
  103. }
  104. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  105. }
  106. macro _MAKE_YQL_UDF_CONTRIB() {
  107. _ADD_YQL_UDF_DEPS_CONTRIB()
  108. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  109. # For Windows using declspecs
  110. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/contrib/ydb/library/yql/public/udf/udfs_exports.exports)
  111. when ($WINDOWS == "yes") {
  112. YQL_UDF_EXPORT=
  113. }
  114. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  115. }
  116. ### @usage: YQL_UDF_MODULE(name)
  117. ###
  118. ### The extension module for YQL with C++ UDF (User Defined Function YQL)
  119. ###
  120. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  121. module YQL_UDF_MODULE: UDF_BASE {
  122. .CMD=YQL_UDF_LINK_CMD
  123. _MAKE_YQL_UDF()
  124. PROVIDES(YqlServicePolicy)
  125. }
  126. module YQL_UDF_YDB_MODULE: UDF_BASE {
  127. .CMD=YQL_UDF_LINK_CMD
  128. _MAKE_YQL_UDF_YDB()
  129. PROVIDES(YqlServicePolicy)
  130. }
  131. module YQL_UDF_MODULE_CONTRIB: UDF_BASE {
  132. .CMD=YQL_UDF_LINK_CMD
  133. _MAKE_YQL_UDF_CONTRIB()
  134. PROVIDES(YqlServicePolicy)
  135. }
  136. module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM {
  137. .CMD=YQL_UDF_LINK_PRG_CMD
  138. _MAKE_YQL_UDF()
  139. }
  140. UDF_SHARED_SEM=$CPP_DYN_LIBRARY_SEM
  141. ### @usage: YQL_UDF(name)
  142. ###
  143. ### User-defined function for YQL
  144. ###
  145. ### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros.
  146. ### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs.
  147. ###
  148. ### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE)
  149. multimodule YQL_UDF {
  150. module YQL_UDF_SHARED: YQL_UDF_MODULE {
  151. .SEM=UDF_SHARED_SEM
  152. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  153. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME
  154. NO_CLANG_TIDY()
  155. }
  156. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  157. .ALIASES=SRCS=GLOBAL_SRCS
  158. .SEM=CPP_LIBRARY_SEM
  159. .GLOBAL_SEM=CPP_OBJ_LIBRARY_SEM
  160. OBJ_SUF=.udfs
  161. _ADD_YQL_UDF_DEPS()
  162. # disable credits generation for static library
  163. SET(CREDITS_FLAGS)
  164. when ($MSVC == "yes" || $CYGWIN == "yes") {
  165. MODULE_SUFFIX=.static.lib
  166. }
  167. }
  168. }
  169. multimodule YQL_UDF_YDB {
  170. module YQL_UDF_SHARED: YQL_UDF_YDB_MODULE {
  171. .SEM=UDF_SHARED_SEM
  172. CMAKE_TARGET_NAME=${REALPRJNAME}.dyn
  173. CMAKE_TARGET_ARTEFACT_RENAME_RULES=&& set_target_property OUTPUT_NAME $REALPRJNAME
  174. NO_CLANG_TIDY()
  175. }
  176. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  177. .ALIASES=SRCS=GLOBAL_SRCS
  178. .SEM=CPP_LIBRARY_SEM
  179. .GLOBAL_SEM=CPP_OBJ_LIBRARY_SEM
  180. OBJ_SUF=.udfs
  181. _ADD_YQL_UDF_YDB_DEPS()
  182. # disable credits generation for static library
  183. SET(CREDITS_FLAGS)
  184. when ($MSVC == "yes" || $CYGWIN == "yes") {
  185. MODULE_SUFFIX=.static.lib
  186. }
  187. }
  188. }
  189. multimodule YQL_UDF_CONTRIB {
  190. module YQL_UDF_SHARED: YQL_UDF_MODULE_CONTRIB {
  191. .SEM=UDF_SHARED_SEM
  192. NO_CLANG_TIDY()
  193. }
  194. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  195. .ALIASES=SRCS=GLOBAL_SRCS
  196. .SEM=CPP_LIBRARY_SEM
  197. .GLOBAL_SEM=CPP_OBJ_LIBRARY_SEM
  198. OBJ_SUF=.udfs
  199. _ADD_YQL_UDF_DEPS_CONTRIB()
  200. # disable credits generation for static library
  201. SET(CREDITS_FLAGS)
  202. when ($MSVC == "yes" || $CYGWIN == "yes") {
  203. MODULE_SUFFIX=.static.lib
  204. }
  205. }
  206. }
  207. ### @usage: YQL_ABI_VERSION(major minor release))
  208. ###
  209. ### Specifying the supported ABI for YQL_UDF.
  210. ###
  211. ### @see: [YQL_UDF()](#multimodule_YQL_UDF)
  212. macro YQL_ABI_VERSION(Major, Minor, Patch) {
  213. YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch
  214. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  215. }
  216. ### @usage: YQL_LAST_ABI_VERSION()
  217. ###
  218. ### Use the last ABI for YQL_UDF
  219. ###
  220. macro YQL_LAST_ABI_VERSION() {
  221. YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION
  222. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  223. }
  224. ### @usage: YQL_PYTHON_UDF(name)
  225. ###
  226. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  227. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  228. ###
  229. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  230. module YQL_PYTHON_UDF: YQL_UDF_MODULE {
  231. .IGNORED=USE_PYTHON2
  232. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  233. USE_PYTHON2()
  234. _ARCADIA_PYTHON_ADDINCL()
  235. PEERDIR(build/platform/python/ldflags)
  236. PEERDIR(library/python/type_info)
  237. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  238. when ($WINDOWS == "yes") {
  239. YQL_PYTHON_UDF_EXPORT=
  240. }
  241. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  242. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  243. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  244. }
  245. ### @usage: YQL_PYTHON_UDF_PROGRAM(name)
  246. ###
  247. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  248. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  249. ###
  250. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  251. module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE {
  252. .IGNORED=USE_PYTHON2
  253. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  254. USE_PYTHON2()
  255. _ARCADIA_PYTHON_ADDINCL()
  256. PEERDIR(build/platform/python/ldflags)
  257. PEERDIR(library/python/type_info)
  258. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  259. when ($WINDOWS == "yes") {
  260. YQL_PYTHON_UDF_EXPORT=
  261. }
  262. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  263. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  264. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  265. }
  266. ### @usage: YQL_PYTHON3_UDF(name)
  267. ###
  268. ### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL).
  269. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  270. ###
  271. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  272. module YQL_PYTHON3_UDF: YQL_UDF_MODULE {
  273. .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3
  274. _ARCADIA_PYTHON3_ADDINCL()
  275. PEERDIR(build/platform/python/ldflags)
  276. PEERDIR(library/python/type_info)
  277. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  278. when ($WINDOWS == "yes") {
  279. YQL_PYTHON_UDF_EXPORT=
  280. }
  281. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  282. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  283. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  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. }