yql_udf.conf 11 KB

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