yql_udf.conf 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. PRINT_MODULE_TYPE(UDF $REALPRJNAME)
  17. when ($MSVC != "yes" && $DARWIN != "yes") {
  18. LDFLAGS+= -Wl,-Bsymbolic
  19. }
  20. }
  21. ### @usage: UDF(name [EXPORTS symlist_file] [PREFIX prefix]) # deprecated
  22. ###
  23. ### The KiWi UDF module.
  24. ### Processing EXPORTS and PREFIX is the same as for DLL.
  25. ###
  26. ### https://wiki.yandex-team.ru/robot/manual/kiwi/userguide/#polzovatelskiefunkciiudftriggerykwcalc
  27. module UDF: UDF_BASE {
  28. PEERDIR(yweb/robot/kiwi/kwcalc/udflib)
  29. }
  30. ### @usage: UDF_LIB([name]) # deprecated
  31. ###
  32. ### The LIBRARY module for KiWi UDF, so has default PEERDIR to yweb/robot/kiwi/kwcalc/udflib.
  33. module UDF_LIB: LIBRARY {
  34. PEERDIR(yweb/robot/kiwi/kwcalc/udflib)
  35. }
  36. UDF_NO_PROBE="no"
  37. ### @usage: UDF_NO_PROBE()
  38. ###
  39. ### Disable UDF import check at build stage
  40. macro UDF_NO_PROBE() {
  41. ENABLE(UDF_NO_PROBE)
  42. }
  43. ### @usage: YQL_UDF_TEST([name])
  44. ###
  45. ### The module to test YQL C++ UDF.
  46. ###
  47. ### Documentation: https://yql.yandex-team.ru/docs/yt/libraries/testing/
  48. ### Documentation about the Arcadia test system: https://wiki.yandex-team.ru/yatool/test/
  49. module YQL_UDF_TEST: PY2TEST {
  50. PEERDIR(yql/library/udf_test)
  51. PEERDIR(yt/python/client_lite)
  52. DEPENDS(yql/tools/astdiff)
  53. DEPENDS(yql/tools/udf_resolver)
  54. DEPENDS(yql/tools/yqlrun)
  55. DATA(arcadia/ydb/library/yql/mount)
  56. DATA(arcadia/yql/cfg/tests)
  57. }
  58. ### @usage: _ADD_YQL_UDF_DEPS()
  59. ###
  60. ### Add all needed PEERDIRs to a YQL_UDF.
  61. ###
  62. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  63. macro _ADD_YQL_UDF_DEPS() {
  64. PEERDIR(ydb/library/yql/public/udf)
  65. PEERDIR(ydb/library/yql/public/udf/support)
  66. }
  67. ### @usage: _MAKE_YQL_UDF()
  68. ###
  69. ### Make module definition an YQL UDF: add all needed dependencies, properties and flags
  70. ###
  71. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  72. macro _MAKE_YQL_UDF() {
  73. _ADD_YQL_UDF_DEPS()
  74. SET_APPEND(USER_CXXFLAGS -DBUILD_UDF)
  75. # For Windows using declspecs
  76. DEFAULT(YQL_UDF_EXPORT ${ARCADIA_ROOT}/ydb/library/yql/public/udf/udfs_exports.exports)
  77. when ($WINDOWS == "yes") {
  78. YQL_UDF_EXPORT=
  79. }
  80. SET(EXPORTS_FILE $YQL_UDF_EXPORT)
  81. }
  82. ### @usage: YQL_UDF_MODULE(name)
  83. ###
  84. ### The extension module for YQL with C++ UDF (User Defined Function YQL)
  85. ###
  86. ### https://yql.yandex-team.ru/docs/yt/udf/cpp/
  87. module YQL_UDF_MODULE: UDF_BASE {
  88. .CMD=YQL_UDF_LINK_CMD
  89. _MAKE_YQL_UDF()
  90. PROVIDES(YqlServicePolicy)
  91. }
  92. module _YQL_UDF_PROGRAM_BASE: SO_PROGRAM {
  93. .CMD=YQL_UDF_LINK_PRG_CMD
  94. _MAKE_YQL_UDF()
  95. }
  96. ### @usage: YQL_UDF(name)
  97. ###
  98. ### User-defined function for YQL
  99. ###
  100. ### Multimodule which is YQL_UDF_MODULE when built directly or referred by BUNDLE and DEPENDS macros.
  101. ### If used by PEERDIRs it is usual static LIBRARY with default YQL dependencies, allowing code reuse between UDFs.
  102. ###
  103. ### @see: [YQL_UDF_MODULE()](#module_YQL_UDF_MODULE)
  104. multimodule YQL_UDF {
  105. module YQL_UDF_SHARED: YQL_UDF_MODULE {
  106. NO_CLANG_TIDY()
  107. }
  108. module YQL_UDF_STATIC: _DLL_COMPATIBLE_LIBRARY {
  109. .ALIASES=SRCS=GLOBAL_SRCS
  110. OBJ_SUF=.udfs
  111. _ADD_YQL_UDF_DEPS()
  112. # disable credits generation for static library
  113. SET(CREDITS_FLAGS)
  114. when ($MSVC == "yes" || $CYGWIN == "yes") {
  115. MODULE_SUFFIX=.static.lib
  116. }
  117. }
  118. }
  119. ### @usage: YQL_ABI_VERSION(major minor release))
  120. ###
  121. ### Specifying the supported ABI for YQL_UDF.
  122. ###
  123. ### @see: [YQL_UDF()](#multimodule_YQL_UDF)
  124. macro YQL_ABI_VERSION(Major, Minor, Patch) {
  125. YQL_ABI_FLAGS=-DUDF_ABI_VERSION_MAJOR=$Major -DUDF_ABI_VERSION_MINOR=$Minor -DUDF_ABI_VERSION_PATCH=$Patch
  126. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  127. }
  128. ### @usage: YQL_LAST_ABI_VERSION()
  129. ###
  130. ### Use the last ABI for YQL_UDF
  131. ###
  132. macro YQL_LAST_ABI_VERSION() {
  133. YQL_ABI_FLAGS=-DUSE_CURRENT_UDF_ABI_VERSION
  134. SET_APPEND(USER_CXXFLAGS $YQL_ABI_FLAGS)
  135. }
  136. ### @usage: YQL_PYTHON_UDF(name)
  137. ###
  138. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  139. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  140. ###
  141. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  142. module YQL_PYTHON_UDF: YQL_UDF_MODULE {
  143. .IGNORED=USE_PYTHON2
  144. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  145. USE_PYTHON2()
  146. _ARCADIA_PYTHON_ADDINCL()
  147. PEERDIR(build/platform/python/ldflags)
  148. PEERDIR(library/python/type_info)
  149. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  150. when ($WINDOWS == "yes") {
  151. YQL_PYTHON_UDF_EXPORT=
  152. }
  153. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  154. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  155. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  156. }
  157. ### @usage: YQL_PYTHON_UDF_PROGRAM(name)
  158. ###
  159. ### Definition of the extension module for YQL with Python 2.x UDF (User Defined Function for YQL).
  160. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  161. ###
  162. ### https://yql.yandex-team.ru/docs/yt/udf/python/
  163. module YQL_PYTHON_UDF_PROGRAM: _YQL_UDF_PROGRAM_BASE {
  164. .IGNORED=USE_PYTHON2
  165. .RESTRICTED=PYTHON3_ADDINCL USE_PYTHON3 PYTHON2_ADDINCL
  166. USE_PYTHON2()
  167. _ARCADIA_PYTHON_ADDINCL()
  168. PEERDIR(build/platform/python/ldflags)
  169. PEERDIR(library/python/type_info)
  170. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  171. when ($WINDOWS == "yes") {
  172. YQL_PYTHON_UDF_EXPORT=
  173. }
  174. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  175. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  176. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  177. }
  178. ### @usage: YQL_PYTHON3_UDF(name)
  179. ###
  180. ### The extension module for YQL with Python 3.x UDF (User Defined Function for YQL).
  181. ### Unlike YQL_UDF this is plain DLL module, so PEERDIRs to it are not allowed.
  182. ###
  183. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  184. module YQL_PYTHON3_UDF: YQL_UDF_MODULE {
  185. .RESTRICTED=PYTHON2_ADDINCL PYTHON3_ADDINCL USE_PYTHON2 USE_PYTHON3
  186. _ARCADIA_PYTHON3_ADDINCL()
  187. PEERDIR(build/platform/python/ldflags)
  188. PEERDIR(library/python/type_info)
  189. DEFAULT(YQL_PYTHON_UDF_EXPORT ${ARCADIA_ROOT}/yql/udfs/common/python/python_udf/python_udfs_exports.exports)
  190. when ($WINDOWS == "yes") {
  191. YQL_PYTHON_UDF_EXPORT=
  192. }
  193. ### FIXME: XXX the statement below uncoditionally set EXPORTS_FILE (due to incorrect behaviour of old ConfReader
  194. ###when ($USE_ARCADIA_PYTHON == "yes") SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  195. SET(EXPORTS_FILE $YQL_PYTHON_UDF_EXPORT)
  196. }
  197. macro _MAKE_YQL_PYTHON_UDF_TEST() {
  198. PEERDIR(library/python/pytest)
  199. DEPENDS(yql/tools/run_python_udf)
  200. SETUP_PYTEST_BIN(RUNNER_BIN $(BUILD_ROOT)/yql/tools/run_python_udf/run_python_udf)
  201. }
  202. ### @usage: YQL_PYTHON_UDF_TEST(name)
  203. ###
  204. ### The Python test for Python YQL UDF (Python User Defined Function for YQL). The code should be a proper YQL_PYTHON_UDF.
  205. ###
  206. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  207. ###
  208. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  209. ###
  210. ### @example: https://a.yandex-team.ru/arc/trunk/arcadia/yql/udfs/test/simple/ya.make
  211. ###
  212. ### @see: [YQL_PYTHON_UDF()](#module_YQL_PYTHON_UDF)
  213. module YQL_PYTHON_UDF_TEST: YQL_PYTHON_UDF {
  214. _MAKE_YQL_PYTHON_UDF_TEST()
  215. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  216. }
  217. ### @usage: YQL_PYTHON3_UDF_TEST(name)
  218. ###
  219. ### The Python test for Python 3.x YQL UDF (User Defined Function for YQL). The code should be a proper YQL_PYTHON3_UDF.
  220. ###
  221. ### This module will basically build itself as UDF and run as test using yql/tools/run_python_udf/run_python_udf tool.
  222. ###
  223. ### Documentation: https://yql.yandex-team.ru/docs/yt/udf/python/
  224. ###
  225. ### @see: [YQL_PYTHON3_UDF()](#module_YQL_PYTHON3_UDF)
  226. module YQL_PYTHON3_UDF_TEST: YQL_PYTHON3_UDF {
  227. _MAKE_YQL_PYTHON_UDF_TEST()
  228. SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS canondata/result.json)
  229. }