196 lines
6.4 KiB
Python
196 lines
6.4 KiB
Python
load("@bazel_common//tools/maven:pom_file.bzl", "pom_file")
|
|
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
|
|
load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_library_public")
|
|
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
|
|
|
|
COPTS_TESTS = select({
|
|
"//:opt": ["-DBAZEL_OPT"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"@platforms//os:windows": [
|
|
# TODO(mehrdadn): (How to) support dynamic linking?
|
|
"-DRAY_STATIC",
|
|
# Prevent Windows.h from including WinSock.h, which conflicts with
|
|
# WinSock2.h used by Boost.Asio.
|
|
"-DWIN32_LEAN_AND_MEAN",
|
|
],
|
|
"//conditions:default": [
|
|
"-Wunused-result",
|
|
"-Wconversion-null",
|
|
"-Wno-misleading-indentation",
|
|
"-Wimplicit-fallthrough",
|
|
],
|
|
}) + select({
|
|
"//:clang-cl": [
|
|
"-Wno-builtin-macro-redefined", # To get rid of warnings caused by deterministic build macros (e.g. #define __DATE__ "redacted")
|
|
"-Wno-microsoft-unqualified-friend", # This shouldn't normally be enabled, but otherwise we get: google/protobuf/map_field.h: warning: unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier (for: friend class DynamicMessage)
|
|
],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
COPTS = COPTS_TESTS + select({
|
|
"@platforms//os:windows": [""],
|
|
"//conditions:default": ["-Wshadow"],
|
|
})
|
|
|
|
PYX_COPTS = select({
|
|
"//:msvc-cl": [],
|
|
"//conditions:default": [
|
|
# Ignore this warning since CPython and Cython have issue removing deprecated tp_print on MacOS
|
|
"-Wno-deprecated-declarations",
|
|
"-Wno-shadow",
|
|
"-Wno-implicit-fallthrough",
|
|
],
|
|
}) + select({
|
|
"@platforms//os:windows": [
|
|
"/FI" + "src/shims/windows/python-nondebug.h",
|
|
],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
PYX_SRCS = [] + select({
|
|
"@platforms//os:windows": [
|
|
"src/shims/windows/python-nondebug.h",
|
|
],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
def flatbuffer_py_library(name, srcs, outs, out_prefix, includes = [], include_paths = []):
|
|
flatbuffer_library_public(
|
|
name = name,
|
|
srcs = srcs,
|
|
outs = outs,
|
|
language_flag = "-p",
|
|
out_prefix = out_prefix,
|
|
include_paths = include_paths,
|
|
includes = includes,
|
|
)
|
|
|
|
def define_java_module(
|
|
name,
|
|
additional_srcs = [],
|
|
exclude_srcs = [],
|
|
additional_resources = [],
|
|
define_test_lib = False,
|
|
test_deps = [],
|
|
**kwargs):
|
|
"""
|
|
Defines a ray Java module with a pom file.
|
|
|
|
Args:
|
|
name: The base name of the module.
|
|
additional_srcs: Additional source files to include in the module.
|
|
exclude_srcs: Source files to exclude from the module.
|
|
additional_resources: Additional resources to include in the module.
|
|
define_test_lib: Whether to define a test library for the module.
|
|
test_deps: Dependencies for the test library; only used if define_test_lib is True.
|
|
**kwargs: Additional arguments to pass to the java_library rule.
|
|
"""
|
|
lib_name = "io_ray_ray_" + name
|
|
pom_file_targets = [lib_name]
|
|
native.java_library(
|
|
name = lib_name,
|
|
srcs = additional_srcs + native.glob(
|
|
[name + "/src/main/java/**/*.java"],
|
|
exclude = exclude_srcs,
|
|
),
|
|
resources = native.glob([name + "/src/main/resources/**"]) + additional_resources,
|
|
**kwargs
|
|
)
|
|
if define_test_lib:
|
|
test_lib_name = "io_ray_ray_" + name + "_test"
|
|
pom_file_targets.append(test_lib_name)
|
|
native.java_library(
|
|
name = test_lib_name,
|
|
srcs = native.glob([name + "/src/test/java/**/*.java"]),
|
|
deps = test_deps,
|
|
)
|
|
pom_file(
|
|
name = "io_ray_ray_" + name + "_pom",
|
|
targets = pom_file_targets,
|
|
template_file = name + "/pom_template.xml",
|
|
substitutions = {
|
|
"{auto_gen_header}": "<!-- This file is auto-generated by Bazel from pom_template.xml, do not modify it. -->",
|
|
},
|
|
)
|
|
|
|
def native_java_library(module_name, name, native_library_name):
|
|
"""Copy native library file to different path based on operating systems"""
|
|
copy_file(
|
|
name = name + "_darwin",
|
|
src = native_library_name,
|
|
out = module_name + "/src/main/resources/native/darwin/lib{}.dylib".format(name),
|
|
)
|
|
|
|
copy_file(
|
|
name = name + "_linux",
|
|
src = native_library_name,
|
|
out = module_name + "/src/main/resources/native/linux/lib{}.so".format(name),
|
|
)
|
|
|
|
native.filegroup(
|
|
name = name,
|
|
srcs = select({
|
|
"@platforms//os:osx": [name + "_darwin"],
|
|
"@platforms//os:windows": [],
|
|
"//conditions:default": [name + "_linux"],
|
|
}),
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
def ray_cc_library(name, strip_include_prefix = "/src", copts = [], visibility = ["//visibility:public"], **kwargs):
|
|
cc_library(
|
|
name = name,
|
|
strip_include_prefix = strip_include_prefix,
|
|
copts = COPTS + copts,
|
|
visibility = visibility,
|
|
**kwargs
|
|
)
|
|
|
|
def ray_cc_test(name, deps = [], linkopts = [], copts = [], use_ray_gtest_main = True, **kwargs):
|
|
# By default, all `ray_cc_test` targets use `ray_gtest_main`.
|
|
# Some tests might need bespoke setup logic, so let them skip this dependency.
|
|
if use_ray_gtest_main:
|
|
deps = deps + ["//src/ray/common:ray_gtest_main"]
|
|
|
|
cc_test(
|
|
name = name,
|
|
deps = deps,
|
|
copts = COPTS_TESTS + copts,
|
|
linkopts = linkopts + ["-pie"],
|
|
**kwargs
|
|
)
|
|
|
|
def ray_cc_binary(name, linkopts = [], copts = [], **kwargs):
|
|
cc_binary(
|
|
name = name,
|
|
copts = COPTS + copts,
|
|
linkopts = linkopts + ["-pie"],
|
|
**kwargs
|
|
)
|
|
|
|
def _filter_files_with_suffix_impl(ctx):
|
|
suffix = ctx.attr.suffix
|
|
filtered_files = [f for f in ctx.files.srcs if f.basename.endswith(suffix)]
|
|
print(filtered_files)
|
|
return [
|
|
DefaultInfo(
|
|
files = depset(filtered_files),
|
|
),
|
|
]
|
|
|
|
filter_files_with_suffix = rule(
|
|
implementation = _filter_files_with_suffix_impl,
|
|
attrs = {
|
|
"srcs": attr.label_list(allow_files = True),
|
|
"suffix": attr.string(),
|
|
},
|
|
)
|
|
|
|
# It will be passed to the FlatBuffers compiler when defining flatbuffer_cc_library
|
|
FLATC_ARGS = [
|
|
"--gen-object-api",
|
|
"--gen-mutable",
|
|
"--scoped-enums",
|
|
]
|