BUILD.bazel 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. load("//bazel:ray.bzl", "define_java_module")
  2. load("//bazel:ray.bzl", "native_java_binary")
  3. load("//bazel:ray.bzl", "native_java_library")
  4. load("@rules_proto_grpc//java:defs.bzl", "java_proto_compile")
  5. exports_files([
  6. "testng.xml",
  7. "checkstyle.xml",
  8. "checkstyle-suppressions.xml",
  9. ])
  10. all_modules = [
  11. "api",
  12. "runtime",
  13. "serve",
  14. "test",
  15. "performance_test",
  16. ]
  17. java_import(
  18. name = "all_modules",
  19. jars = [
  20. "libio_ray_ray_" + module + ".jar"
  21. for module in all_modules
  22. ] + [
  23. "libio_ray_ray_" + module + "-src.jar"
  24. for module in all_modules
  25. ] + [
  26. "all_tests_deploy.jar",
  27. "all_tests_deploy-src.jar",
  28. ],
  29. deps = [
  30. ":io_ray_ray_" + module
  31. for module in all_modules
  32. ] + [
  33. ":all_tests",
  34. ],
  35. )
  36. define_java_module(
  37. name = "api",
  38. visibility = ["//visibility:public"],
  39. deps = [
  40. "@maven//:com_lmax_disruptor",
  41. "@maven//:com_sun_xml_bind_jaxb_core",
  42. "@maven//:com_sun_xml_bind_jaxb_impl",
  43. "@maven//:javax_xml_bind_jaxb_api",
  44. "@maven//:org_apache_logging_log4j_log4j_api",
  45. "@maven//:org_apache_logging_log4j_log4j_core",
  46. "@maven//:org_apache_logging_log4j_log4j_slf4j_impl",
  47. "@maven//:org_slf4j_slf4j_api",
  48. ],
  49. )
  50. define_java_module(
  51. name = "runtime",
  52. additional_resources = [
  53. ":java_native_deps",
  54. ],
  55. additional_srcs = [
  56. ":all_java_proto",
  57. ],
  58. define_test_lib = True,
  59. exclude_srcs = [
  60. "runtime/src/main/java/io/ray/runtime/generated/*.java",
  61. ],
  62. test_deps = [
  63. ":io_ray_ray_api",
  64. ":io_ray_ray_runtime",
  65. "@maven//:org_apache_commons_commons_lang3",
  66. "@maven//:org_testng_testng",
  67. "@maven//:commons_io_commons_io",
  68. "@maven//:javax_xml_bind_jaxb_api",
  69. ],
  70. visibility = ["//visibility:public"],
  71. deps = [
  72. ":io_ray_ray_api",
  73. "@maven//:com_google_code_gson_gson",
  74. "@maven//:com_google_guava_guava",
  75. "@maven//:com_google_protobuf_protobuf_java",
  76. "@maven//:com_lmax_disruptor",
  77. "@maven//:com_typesafe_config",
  78. "@maven//:commons_io_commons_io",
  79. "@maven//:de_ruedigermoeller_fst",
  80. "@maven//:net_java_dev_jna_jna",
  81. "@maven//:org_apache_commons_commons_lang3",
  82. "@maven//:org_apache_logging_log4j_log4j_api",
  83. "@maven//:org_apache_logging_log4j_log4j_core",
  84. "@maven//:org_apache_logging_log4j_log4j_slf4j_impl",
  85. "@maven//:org_msgpack_msgpack_core",
  86. "@maven//:org_ow2_asm_asm",
  87. "@maven//:org_slf4j_slf4j_api",
  88. "@maven//:org_testng_testng",
  89. "@maven//:org_yaml_snakeyaml",
  90. ],
  91. )
  92. define_java_module(
  93. name = "test",
  94. deps = [
  95. ":io_ray_ray_api",
  96. ":io_ray_ray_runtime",
  97. "@maven//:com_google_code_gson_gson",
  98. "@maven//:com_google_guava_guava",
  99. "@maven//:com_google_protobuf_protobuf_java",
  100. "@maven//:com_lmax_disruptor",
  101. "@maven//:com_sun_xml_bind_jaxb_core",
  102. "@maven//:com_sun_xml_bind_jaxb_impl",
  103. "@maven//:commons_io_commons_io",
  104. "@maven//:javax_xml_bind_jaxb_api",
  105. "@maven//:org_apache_commons_commons_lang3",
  106. "@maven//:org_apache_logging_log4j_log4j_api",
  107. "@maven//:org_apache_logging_log4j_log4j_core",
  108. "@maven//:org_apache_logging_log4j_log4j_slf4j_impl",
  109. "@maven//:org_slf4j_slf4j_api",
  110. "@maven//:org_testng_testng",
  111. ],
  112. )
  113. define_java_module(
  114. name = "performance_test",
  115. deps = [
  116. ":io_ray_ray_api",
  117. ":io_ray_ray_runtime",
  118. "@maven//:com_google_code_gson_gson",
  119. "@maven//:com_google_guava_guava",
  120. "@maven//:com_lmax_disruptor",
  121. "@maven//:commons_io_commons_io",
  122. "@maven//:org_apache_commons_commons_lang3",
  123. "@maven//:org_apache_logging_log4j_log4j_api",
  124. "@maven//:org_apache_logging_log4j_log4j_core",
  125. "@maven//:org_apache_logging_log4j_log4j_slf4j_impl",
  126. "@maven//:org_slf4j_slf4j_api",
  127. ],
  128. )
  129. define_java_module(
  130. name = "serve",
  131. additional_srcs = [
  132. ":serve_java_proto",
  133. ],
  134. define_test_lib = True,
  135. exclude_srcs = [
  136. "serve/src/main/java/io/ray/serve/generated/*.java",
  137. ],
  138. test_deps = [
  139. ":io_ray_ray_api",
  140. ":io_ray_ray_runtime",
  141. ":io_ray_ray_serve",
  142. "@maven//:com_google_code_gson_gson",
  143. "@maven//:com_google_guava_guava",
  144. "@maven//:com_google_protobuf_protobuf_java",
  145. "@maven//:org_apache_commons_commons_lang3",
  146. "@maven//:org_apache_httpcomponents_client5_httpclient5",
  147. "@maven//:org_apache_httpcomponents_core5_httpcore5",
  148. "@maven//:org_slf4j_slf4j_api",
  149. "@maven//:org_testng_testng",
  150. ],
  151. visibility = ["//visibility:public"],
  152. deps = [
  153. ":io_ray_ray_api",
  154. ":io_ray_ray_runtime",
  155. "@maven//:com_google_code_gson_gson",
  156. "@maven//:com_google_guava_guava",
  157. "@maven//:com_google_protobuf_protobuf_java",
  158. "@maven//:org_apache_commons_commons_lang3",
  159. "@maven//:org_apache_httpcomponents_core5_httpcore5",
  160. "@maven//:org_slf4j_slf4j_api",
  161. ],
  162. )
  163. java_binary(
  164. name = "all_tests",
  165. args = ["java/testng.xml"],
  166. data = ["testng.xml"],
  167. main_class = "org.testng.TestNG",
  168. runtime_deps = [
  169. ":io_ray_ray_performance_test",
  170. ":io_ray_ray_runtime_test",
  171. ":io_ray_ray_serve_test",
  172. ":io_ray_ray_test",
  173. ],
  174. )
  175. java_proto_compile(
  176. name = "common_java_proto",
  177. deps = ["@//src/ray/protobuf:common_proto"],
  178. )
  179. java_proto_compile(
  180. name = "gcs_java_proto",
  181. deps = ["@//src/ray/protobuf:gcs_proto"],
  182. )
  183. java_proto_compile(
  184. name = "serve_java_proto",
  185. deps = ["@//src/ray/protobuf:serve_proto"],
  186. )
  187. filegroup(
  188. name = "all_java_proto",
  189. srcs = [
  190. ":common_java_proto",
  191. ":gcs_java_proto",
  192. ],
  193. )
  194. native_java_library("runtime", "core_worker_library_java", "//:libcore_worker_library_java.so")
  195. filegroup(
  196. name = "java_native_deps",
  197. srcs = [
  198. ":core_worker_library_java",
  199. ],
  200. )
  201. # Generates the dependencies needed by maven.
  202. genrule(
  203. name = "cp_java_generated",
  204. srcs = [
  205. ":all_java_proto",
  206. ":copy_pom_file",
  207. ":serve_java_proto",
  208. ],
  209. outs = ["cp_java_generated.out"],
  210. cmd = """
  211. WORK_DIR="$$(pwd)"
  212. # Copy protobuf-generated files.
  213. rm -rf "$$WORK_DIR/java/runtime/src/main/java/io/ray/runtime/generated"
  214. for f in $(locations //java:all_java_proto); do
  215. unzip "$$f" -x META-INF/MANIFEST.MF -d "$$WORK_DIR/java/runtime/src/main/java"
  216. done
  217. rm -rf "$$WORK_DIR/java/serve/src/main/java/io/ray/serve/generated"
  218. for f in $(locations //java:serve_java_proto); do
  219. unzip "$$f" -x META-INF/MANIFEST.MF -d "$$WORK_DIR/java/serve/src/main/java"
  220. done
  221. date > $@
  222. """,
  223. local = 1,
  224. tags = ["no-cache"],
  225. )
  226. # Generates the dependencies needed by maven.
  227. genrule(
  228. name = "gen_maven_deps",
  229. srcs = [
  230. ":cp_java_generated",
  231. ":java_native_deps",
  232. ],
  233. outs = ["gen_maven_deps.out"],
  234. cmd = """
  235. WORK_DIR="$${PWD}"
  236. # Copy native dependencies.
  237. OS_NAME=""
  238. case "$${OSTYPE}" in
  239. linux*) OS_NAME="linux";;
  240. darwin*) OS_NAME="darwin";;
  241. *) echo "$${OSTYPE} is not supported currently"; exit 1;;
  242. esac
  243. NATIVE_DEPS_DIR="$$WORK_DIR/java/runtime/native_dependencies/native/$$OS_NAME"
  244. rm -rf "$$NATIVE_DEPS_DIR"
  245. mkdir -p "$$NATIVE_DEPS_DIR"
  246. for f in $(locations //java:java_native_deps); do
  247. chmod +w "$$f"
  248. cp "$$f" "$$NATIVE_DEPS_DIR"
  249. done
  250. date > $@
  251. """,
  252. local = 1,
  253. tags = ["no-cache"],
  254. )
  255. genrule(
  256. name = "copy_pom_file",
  257. srcs = [
  258. "//java:io_ray_ray_" + module + "_pom"
  259. for module in all_modules
  260. ],
  261. outs = ["copy_pom_file.out"],
  262. cmd = """
  263. WORK_DIR="$$(pwd)"
  264. cp -f $(location //java:io_ray_ray_api_pom) "$$WORK_DIR/java/api/pom.xml"
  265. cp -f $(location //java:io_ray_ray_runtime_pom) "$$WORK_DIR/java/runtime/pom.xml"
  266. cp -f $(location //java:io_ray_ray_test_pom) "$$WORK_DIR/java/test/pom.xml"
  267. cp -f $(location //java:io_ray_ray_performance_test_pom) "$$WORK_DIR/java/performance_test/pom.xml"
  268. cp -f $(location //java:io_ray_ray_serve_pom) "$$WORK_DIR/java/serve/pom.xml"
  269. date > $@
  270. """,
  271. local = 1,
  272. tags = ["no-cache"],
  273. )
  274. java_binary(
  275. name = "ray_dist",
  276. # This rule is used to package all Ray Java code and the third-party dependencies into a
  277. # fat jar file. It's not really an executable jar. So we set its `main_class` to empty.
  278. main_class = "",
  279. runtime_deps = [
  280. "//java:io_ray_ray_api",
  281. "//java:io_ray_ray_runtime",
  282. "//java:io_ray_ray_serve",
  283. "//streaming/java:io_ray_ray_streaming-api",
  284. "//streaming/java:io_ray_ray_streaming-runtime",
  285. ],
  286. )
  287. genrule(
  288. name = "ray_java_pkg",
  289. srcs = [
  290. "//java:ray_dist_deploy.jar",
  291. "//java:gen_maven_deps",
  292. "//streaming/java:gen_maven_deps",
  293. ],
  294. outs = ["ray_java_pkg.out"],
  295. cmd = """
  296. WORK_DIR="$$(pwd)"
  297. rm -rf "$$WORK_DIR/python/ray/jars" && mkdir -p "$$WORK_DIR/python/ray/jars"
  298. cp -f $(location //java:ray_dist_deploy.jar) "$$WORK_DIR/python/ray/jars/ray_dist.jar"
  299. date > $@
  300. """,
  301. local = 1,
  302. tags = ["no-cache"],
  303. )