yql_udf.conf 9.4 KB

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