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