ray/cpp/BUILD.bazel

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

334 lines
9.5 KiB
Text
Raw Permalink Normal View History

# Bazel build
# C/C++ documentation: https://docs.bazel.build/versions/master/be/c-cpp.html
load("//bazel:ray.bzl", "COPTS")
cc_binary(
name = "libray_api.so",
copts = COPTS,
linkopts = select({
"@bazel_tools//src/conditions:darwin": [
#TODO(larry): Hide the symbols when we make it work on mac.
],
"@bazel_tools//src/conditions:windows": [
#TODO(larry): Hide the symbols when we make it work on Windows.
],
"//conditions:default": [
"-Wl,--version-script,$(location :symbols/ray_api_exported_symbols_linux.lds)",
],
}),
linkshared = 1,
linkstatic = 1,
visibility = ["//visibility:public"],
deps = [
":ray_api",
":symbols/ray_api_exported_symbols_linux.lds",
":symbols/ray_api_exported_symbols_mac.lds",
],
)
cc_library(
name = "ray_api",
srcs = glob([
"src/ray/api.cc",
"src/ray/api/*.cc",
"src/ray/api/*.h",
"src/ray/app/*.cc",
"src/ray/app/*.h",
"src/ray/runtime/*.cc",
"src/ray/runtime/*.h",
"src/ray/runtime/**/*.cc",
"src/ray/runtime/**/*.h",
"src/ray/runtime/task/*.cc",
"src/ray/runtime/task/*.h",
"src/ray/util/*.cc",
"src/ray/util/*.h",
"src/ray/*.cc",
"src/ray/*.h",
]),
hdrs = glob([
"include/ray/*.h",
"include/ray/**/*.h",
"include/ray/**/**/*.h",
]),
copts = COPTS,
linkopts = ["-ldl"],
linkstatic = True,
strip_include_prefix = "include",
visibility = ["//visibility:public"],
deps = [
"//:core_worker_lib",
"//:global_state_accessor_lib",
"//:ray_common",
"//:ray_util",
"@boost//:callable_traits",
"@boost//:dll",
"@com_google_absl//absl/flags:flag",
"@com_google_absl//absl/flags:parse",
"@msgpack",
"@nlohmann_json",
],
alwayslink = True,
)
cc_library(
name = "ray_cpp_lib",
srcs = [
"libray_api.so",
],
hdrs = glob([
"include/ray/*.h",
"include/ray/**/*.h",
"include/ray/**/**/*.h",
]),
strip_include_prefix = "include",
visibility = ["//visibility:public"],
)
cc_binary(
name = "default_worker",
srcs = glob([
"src/ray/worker/default_worker.cc",
]),
copts = COPTS,
linkstatic = True,
deps = select({
"@bazel_tools//src/conditions:windows": [
# TODO(SongGuyang): Change to use dynamic library
# "ray_cpp_lib" when we make it work on Windows.
"ray_api",
],
"//conditions:default": [
"ray_cpp_lib",
"@boost//:callable_traits",
"@boost//:optional",
"@msgpack",
"@nlohmann_json",
],
}),
)
genrule(
name = "ray_cpp_pkg",
srcs = [
"default_worker",
"ray_api",
"libray_api.so",
],
outs = ["ray_cpp_pkg.out"],
cmd = """
WORK_DIR="$$(pwd)" &&
PY_CPP_DIR="$$WORK_DIR/python/ray/cpp" &&
rm -rf $$PY_CPP_DIR &&
BOOST_DIR="$$PY_CPP_DIR/include/boost/" &&
mkdir -p "$$BOOST_DIR" &&
mkdir -p "$$PY_CPP_DIR/lib/" &&
cp -f $(location default_worker) "$$PY_CPP_DIR/" &&
cp -f -r $$WORK_DIR/external/msgpack/include/* "$$PY_CPP_DIR/include" &&
cp -f -r $$WORK_DIR/external/nlohmann_json/single_include/* "$$PY_CPP_DIR/include" &&
cp -f -r "$$WORK_DIR/external/boost/boost/archive" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/assert" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/bind" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/callable_traits" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/concept" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/config" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/container" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/container_hash" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/core" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/detail" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/dll" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/exception" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/filesystem" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/functional" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/io" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/iterator" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/lexical_cast" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/move" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/mpl" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/optional" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/parameter" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/preprocessor" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/system" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/type_traits" "$$BOOST_DIR" &&
cp -f -r "$$WORK_DIR/external/boost/boost/utility" "$$BOOST_DIR" &&
cp -f -r $$WORK_DIR/external/boost/boost/*.hpp "$$BOOST_DIR" &&
cp -f $(locations libray_api.so) "$$PY_CPP_DIR/lib/" &&
cp -f -r "$$WORK_DIR/cpp/include/ray" "$$PY_CPP_DIR/include" &&
THIRDPARTY_DIR="$$WORK_DIR/cpp/example/thirdparty" &&
rm -rf $$THIRDPARTY_DIR &&
mkdir $$THIRDPARTY_DIR &&
2021-09-10 11:53:05 +08:00
cp -f -r "$$PY_CPP_DIR/include" $$THIRDPARTY_DIR &&
cp -f -r "$$PY_CPP_DIR/lib" $$THIRDPARTY_DIR &&
cp -f -r "$$WORK_DIR/cpp/example" "$$PY_CPP_DIR" &&
echo "$$WORK_DIR" > $@
""",
local = 1,
visibility = ["//visibility:public"],
)
# test
cc_test(
name = "api_test",
srcs = glob([
"src/ray/test/*.cc",
]),
copts = COPTS,
2022-02-10 16:06:38 +08:00
linkstatic = True,
tags = ["team:core"],
deps = [
"ray_api",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "cluster_mode_test",
srcs = glob(
[
"src/ray/test/cluster/*.cc",
"src/ray/test/cluster/*.h",
],
exclude = [
"src/ray/test/cluster/cluster_mode_xlang_test.cc",
],
),
args = [
"--ray_code_search_path=$(location plus.so):$(location counter.so):cpp/src/ray/test/cluster",
"--ray_head_args '--include-dashboard false'",
],
copts = COPTS,
data = [
"counter.so",
"plus.so",
"ray_cpp_pkg",
[C++ Worker][xlang] Support calling python worker (#21390) C++ API need to call python and java worker, this pr support call python worker. Call python worker is similar with call c++ worker, need to pass PyFunction, PyActorClass and PyActorMethod. ## call python normal task ```python #test_cross_language_invocation.py import ray @ray.remote def py_return_input(v): return v ``` c++ api call python function ```c++ auto py_obj1 = ray::Task(ray::PyFunction</*ReturnType*/int>{/*module_name=*/"test_cross_language_invocation", /*function_name=*/"py_return_input"}) .Remote(42); EXPECT_EQ(42, *py_obj1.Get()); ``` The user need to fill python module name and function name, then pass arguments into the remote. The user also need to assign the return type and arguments types of the python function, it used to do static safe checking and get result. ## call python actor task ```python #test_cross_language_invocation.py @ray.remote class Counter(object): def __init__(self, value): self.value = int(value) def increase(self, delta): self.value += int(delta) return str(self.value) ``` c++ api call python actor function ```c++ // Create python actor auto py_actor_handle = ray::Actor(ray::PyActorClass{/*module_name=*/"test_cross_language_invocation", /*class_name=*/"Counter"}) .Remote(1); EXPECT_TRUE(!py_actor_handle.ID().empty()); // Call python actor task auto py_actor_ret = py_actor_handle.Task(ray::PyActorMethod</*ReturnType*/std::string>{/*actor_function_name=*/"increase"}).Remote(1); EXPECT_EQ("2", *py_actor_ret.Get()); ``` The user need to fill python module name and class name when creating python actor. PyActorMethod only need to fill the function name. It's also similar with calling c++ actor task, also has compile-time safe checking.
2022-01-21 13:55:30 +08:00
"src/ray/test/cluster/test_cross_language_invocation.py",
],
linkstatic = True,
tags = ["team:core"],
deps = [
"ray_api",
"@com_google_googletest//:gtest_main",
],
)
cc_test(
name = "cluster_mode_xlang_test",
srcs = glob([
"src/ray/test/cluster/cluster_mode_xlang_test.cc",
"src/ray/test/cluster/*.h",
]),
args = [
"--ray_code_search_path=$(location //java:libio_ray_ray_test.jar)",
"--ray_head_args '--include-dashboard false'",
],
copts = COPTS,
data = [
"ray_cpp_pkg",
"//java:libio_ray_ray_test.jar",
],
linkstatic = True,
tags = ["team:core"],
deps = [
"ray_api",
"@com_google_googletest//:gtest_main",
],
)
cc_binary(
name = "plus.so",
testonly = True,
srcs = [
"src/ray/test/cluster/plus.cc",
"src/ray/test/cluster/plus.h",
],
copts = COPTS,
linkopts = ["-shared"],
linkstatic = True,
# NOTE(WangTaoTheTonic): For java x-lang tests. See //java:all_tests
# and `CrossLanguageInvocationTest.java`.
visibility = ["//java:__subpackages__"],
deps = [
"ray_cpp_lib",
"@boost//:callable_traits",
"@boost//:optional",
"@msgpack",
"@nlohmann_json",
],
)
cc_binary(
name = "counter.so",
testonly = True,
srcs = [
"src/ray/test/cluster/counter.cc",
"src/ray/test/cluster/counter.h",
],
copts = COPTS,
linkopts = ["-shared"],
linkstatic = True,
# NOTE(WangTaoTheTonic): For java x-lang tests. See //java:all_tests
# and `CrossLanguageInvocationTest.java`.
visibility = ["//java:__subpackages__"],
deps = [
"ray_cpp_lib",
"@boost//:callable_traits",
"@boost//:optional",
"@msgpack",
"@nlohmann_json",
],
)
cc_test(
name = "simple_kv_store",
srcs = glob([
"src/ray/test/examples/*.cc",
]),
args = [
"--ray_code_search_path=$(location simple_kv_store.so)",
"--ray_head_args '--include-dashboard false'",
],
copts = COPTS,
data = [
"simple_kv_store.so",
],
linkstatic = True,
tags = ["team:core"],
deps = [
"ray_api",
],
)
cc_binary(
name = "simple_kv_store.so",
testonly = True,
srcs = glob([
"src/ray/test/examples/*.cc",
]),
copts = COPTS,
linkopts = ["-shared"],
linkstatic = True,
deps = [
"ray_cpp_lib",
"@boost//:callable_traits",
"@boost//:optional",
"@msgpack",
"@nlohmann_json",
],
)
load("//bazel:python.bzl", "py_test_module_list")
py_test_module_list(
size = "medium",
extra_srcs = [],
files = [
"test_python_call_cpp.py",
],
tags = [
"exclusive",
"medium_size_python_tests",
"team:core",
],
deps = [],
)