diff --git a/.bazelrc b/.bazelrc index 83188b577f9..c929a2154bb 100644 --- a/.bazelrc +++ b/.bazelrc @@ -27,6 +27,13 @@ test --test_env=OCL_ICD_FILENAMES \ # This variable is needed for MPI test --test_env=FI_PROVIDER_PATH +# This flag is added for migration to Bazel 9.0.0: +# In Bazel 9.0.0, the strict action environment for tests is enabled by default +# (see https://github.com/bazelbuild/bazel/releases/tag/9.0.0) +# Instead of using --incompatible_strict_action_env, we explicitly pass +# the required environment variable to tests for compatibility: +test --test_env=LD_LIBRARY_PATH + # This variable is used to determine location of datasets for testing test --test_env=DAAL_DATASETS diff --git a/.bazelversion b/.bazelversion index f9c71a52e2f..f7ee06693c1 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.5.1 +9.0.0 diff --git a/MODULE.bazel b/MODULE.bazel index 324a9444a96..0ef160a5c85 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,6 +19,7 @@ module(name = "onedal") bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "rules_shell", version = "0.6.1") bazel_dep(name = "fmt", version = "12.1.0") declare_onedal_config = use_repo_rule("@onedal//dev/bazel/config:config.bzl", "declare_onedal_config") diff --git a/dev/bazel/AGENTS.md b/dev/bazel/AGENTS.md index 46c3293aaf6..3f50ee414cc 100644 --- a/dev/bazel/AGENTS.md +++ b/dev/bazel/AGENTS.md @@ -39,8 +39,8 @@ module( version = "1.0.0", ) -bazel_dep(name = "rules_cc", version = "0.0.9") -bazel_dep(name = "catch2", version = "3.4.0") +bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "catch2", version = "3.9.1") ``` ## 🔧 Build Rules and Patterns diff --git a/dev/bazel/cc.bzl b/dev/bazel/cc.bzl index 76c210e23e0..772a7d68729 100644 --- a/dev/bazel/cc.bzl +++ b/dev/bazel/cc.bzl @@ -19,9 +19,13 @@ load("@onedal//dev/bazel:utils.bzl", "paths", "sets", ) + +load("@rules_cc//cc:defs.bzl", "cc_library") load("@onedal//dev/bazel/config:config.bzl", "CpuInfo", ) +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") +load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") load("@onedal//dev/bazel/cc:common.bzl", onedal_cc_common = "common", ) @@ -123,7 +127,7 @@ def cc_module(name, hdrs=[], deps=[], **kwargs): # > The list of possible extensions for 'public_hdrs' is: # .h,.hh,.hpp,.ipp,.hxx,.h++,.inc,.inl,.tlh,.tli,.H,.tcc if hdrs: - native.cc_library( + cc_library( name = "__{}_headers__".format(name), hdrs = hdrs, ) diff --git a/dev/bazel/cc/common.bzl b/dev/bazel/cc/common.bzl index e98dd75a5dd..17c9052fe59 100644 --- a/dev/bazel/cc/common.bzl +++ b/dev/bazel/cc/common.bzl @@ -14,6 +14,9 @@ # limitations under the License. #=============================================================================== +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") +load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") + load("@onedal//dev/bazel:utils.bzl", "utils", "paths", diff --git a/dev/bazel/cc/compile.bzl b/dev/bazel/cc/compile.bzl index 41fab6f5ae8..fb2b46096bf 100644 --- a/dev/bazel/cc/compile.bzl +++ b/dev/bazel/cc/compile.bzl @@ -14,6 +14,8 @@ # limitations under the License. #=============================================================================== +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") + load("@onedal//dev/bazel:utils.bzl", "utils", "paths", diff --git a/dev/bazel/cc/link.bzl b/dev/bazel/cc/link.bzl index 9db8883984d..63ceb3b2b81 100644 --- a/dev/bazel/cc/link.bzl +++ b/dev/bazel/cc/link.bzl @@ -14,11 +14,14 @@ # limitations under the License. #=============================================================================== +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") + load("@onedal//dev/bazel:utils.bzl", "utils", "paths", "sets", ) + load("@onedal//dev/bazel/toolchains:action_names.bzl", "CPP_MERGE_STATIC_LIBRARIES" ) diff --git a/dev/bazel/dal.bzl b/dev/bazel/dal.bzl index c00cb02c352..3d5e016410a 100644 --- a/dev/bazel/dal.bzl +++ b/dev/bazel/dal.bzl @@ -345,12 +345,10 @@ def _test_deps_on_daal(): ], "@config//:test_link_mode_release_static": [ "@onedal_release//:core_static", - "@onedal_release//:parameters_static", "@onedal//cpp/daal:threading_release_static", ], "@config//:test_link_mode_release_dynamic": [ "@onedal_release//:core_dynamic", - "@onedal_release//:parameters_dynamic", "@onedal//cpp/daal:threading_release_dynamic", ], }) diff --git a/dev/bazel/deps/catch2.BUILD b/dev/bazel/deps/catch2.BUILD index b5bd605a933..3168938e651 100644 --- a/dev/bazel/deps/catch2.BUILD +++ b/dev/bazel/deps/catch2.BUILD @@ -28,8 +28,9 @@ # SPDX-License-Identifier: BSL-1.0 load("@bazel_skylib//rules:expand_template.bzl", "expand_template") +load("@rules_cc//cc:defs.bzl", "cc_library") -# oneDAL verison of catch2 bazel build file +# oneDAL version of catch2 bazel build file expand_template( name = "catch_user_config", out = "catch2/catch_user_config.hpp", diff --git a/dev/bazel/deps/ccl.tpl.BUILD b/dev/bazel/deps/ccl.tpl.BUILD index de3f0f6e3ef..5fc8f93623c 100644 --- a/dev/bazel/deps/ccl.tpl.BUILD +++ b/dev/bazel/deps/ccl.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", features = [ "dpc++" ], diff --git a/dev/bazel/deps/dpl.tpl.BUILD b/dev/bazel/deps/dpl.tpl.BUILD index b5d588a37fa..9f272732ca6 100644 --- a/dev/bazel/deps/dpl.tpl.BUILD +++ b/dev/bazel/deps/dpl.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", hdrs = glob(["include/**/**/*"]), diff --git a/dev/bazel/deps/mkl.tpl.BUILD b/dev/bazel/deps/mkl.tpl.BUILD index 63c29c23c9e..064d8cc4548 100644 --- a/dev/bazel/deps/mkl.tpl.BUILD +++ b/dev/bazel/deps/mkl.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", hdrs = glob([ diff --git a/dev/bazel/deps/mpi.tpl.BUILD b/dev/bazel/deps/mpi.tpl.BUILD index aafa1c7f327..6bd5dfb5386 100644 --- a/dev/bazel/deps/mpi.tpl.BUILD +++ b/dev/bazel/deps/mpi.tpl.BUILD @@ -1,5 +1,6 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") filegroup( name = "mpi_runfiles", srcs = glob([ diff --git a/dev/bazel/deps/onedal.tpl.BUILD b/dev/bazel/deps/onedal.tpl.BUILD index 439cf78be00..12ebfa094bf 100644 --- a/dev/bazel/deps/onedal.tpl.BUILD +++ b/dev/bazel/deps/onedal.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", hdrs = glob([ @@ -34,31 +34,11 @@ cc_library( ], ) -cc_library( - name = "parameters_static", - srcs = [ - "lib/intel64/libonedal_parameters.a", - ], - deps = [ - ":headers", - ], -) - cc_library( name = "onedal_static", srcs = [ "lib/intel64/libonedal.a", - ], - deps = [ - ":headers", - ":parameters_static", - ], -) - -cc_library( - name = "parameters_static_dpc", - srcs = [ - "lib/intel64/libonedal_parameters_dpc.a", + "lib/intel64/libonedal_parameters.a", ], deps = [ ":headers", @@ -69,11 +49,11 @@ cc_library( name = "onedal_static_dpc", srcs = [ "lib/intel64/libonedal_dpc.a", + "lib/intel64/libonedal_parameters_dpc.a", ], deps = [ ":headers", "@mkl//:mkl_dpc", - ":parameters_static_dpc", ], ) @@ -102,31 +82,11 @@ cc_library( ], ) -cc_library( - name = "parameters_dynamic", - srcs = [ - "lib/intel64/libonedal_parameters.so", - ], - deps = [ - ":headers", - ], -) - cc_library( name = "onedal_dynamic", srcs = [ "lib/intel64/libonedal.so", - ], - deps = [ - ":headers", - ":parameters_dynamic", - ], -) - -cc_library( - name = "parameters_dynamic_dpc", - srcs = [ - "lib/intel64/libonedal_parameters_dpc.so", + "lib/intel64/libonedal_parameters.so", ], deps = [ ":headers", @@ -137,10 +97,10 @@ cc_library( name = "onedal_dynamic_dpc", srcs = [ "lib/intel64/libonedal_dpc.so", + "lib/intel64/libonedal_parameters_dpc.so", ], deps = [ ":headers", "@mkl//:mkl_dpc", - ":parameters_dynamic_dpc", ], ) diff --git a/dev/bazel/deps/openblas.tpl.BUILD b/dev/bazel/deps/openblas.tpl.BUILD index 9a5a7dc0af2..de810d1d26f 100644 --- a/dev/bazel/deps/openblas.tpl.BUILD +++ b/dev/bazel/deps/openblas.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", hdrs = glob(["include/**/*.h"]), diff --git a/dev/bazel/deps/opencl.bzl b/dev/bazel/deps/opencl.bzl index 05e95fb556b..93205257064 100644 --- a/dev/bazel/deps/opencl.bzl +++ b/dev/bazel/deps/opencl.bzl @@ -26,9 +26,13 @@ def _opencl_repo_impl(repo_ctx): if dpcpp_root: lib_dir = paths.join(dpcpp_root, "lib") libs = [ - "libOpenCL.so", - "libOpenCL.so.1", - "libOpenCL.so.1.2", + "libOpenCL*.so*", + "libsvml.so", + "libirng.so", + "libimf.so", + "libintlc.so*", + "libsycl.so.*", + "libur_loader.so.*", ] repos.create_symlinks(repo_ctx, lib_dir, libs) repo_ctx.template( diff --git a/dev/bazel/deps/opencl.tpl.BUILD b/dev/bazel/deps/opencl.tpl.BUILD index a5a88986de6..5a5e3e84a69 100644 --- a/dev/bazel/deps/opencl.tpl.BUILD +++ b/dev/bazel/deps/opencl.tpl.BUILD @@ -1,7 +1,15 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "opencl_binary", + srcs = glob( + [ + "*.so", + "*.so.*", + ], + allow_empty = True, + exclude = ["*.py", "*.cmake", "*.a"], + ), linkopts = ["-lOpenCL"], visibility = ["//visibility:public"], ) diff --git a/dev/bazel/deps/tbb.tpl.BUILD b/dev/bazel/deps/tbb.tpl.BUILD index 0863830fb0d..c6ba070e650 100644 --- a/dev/bazel/deps/tbb.tpl.BUILD +++ b/dev/bazel/deps/tbb.tpl.BUILD @@ -1,5 +1,5 @@ package(default_visibility = ["//visibility:public"]) - +load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "headers", hdrs = glob(["include/**/*.h"]), diff --git a/dev/bazel/release.bzl b/dev/bazel/release.bzl index 9d785b20f12..c11a19d0b8b 100644 --- a/dev/bazel/release.bzl +++ b/dev/bazel/release.bzl @@ -16,6 +16,7 @@ load("@onedal//dev/bazel:utils.bzl", "utils", "paths") load("@onedal//dev/bazel:cc.bzl", "ModuleInfo") +load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") def _match_file_name(file, entries): for entry in entries: diff --git a/dev/bazel/repos.bzl b/dev/bazel/repos.bzl index 881937aa713..fc34842d185 100644 --- a/dev/bazel/repos.bzl +++ b/dev/bazel/repos.bzl @@ -91,12 +91,49 @@ def _normalize_download_info(repo_ctx): )) return result -def _create_symlinks(repo_ctx, root, entries, substitutions={}, mapping={}): +def _create_symlinks(repo_ctx, root, entries, substitutions=None, mapping=None): + substitutions = substitutions or {} + mapping = mapping or {} + for entry in entries: entry_fmt = utils.substitute(entry, substitutions) - src_entry_path = utils.substitute(paths.join(root, entry_fmt), mapping) - dst_entry_path = entry_fmt - repo_ctx.symlink(src_entry_path, dst_entry_path) + if "*" in entry_fmt: + pattern = entry_fmt.split("/")[-1] + dir_part = entry_fmt[:entry_fmt.rfind("/")] if "/" in entry_fmt else "" + root_with_dir = utils.substitute( + paths.join(root, dir_part) if dir_part else root, + mapping + ) + matched = False + for fs_entry in repo_ctx.path(root_with_dir).readdir(): + if _matches_glob(fs_entry.basename, pattern): + matched = True + dst = (paths.join(dir_part, fs_entry.basename) + if dir_part else fs_entry.basename) + repo_ctx.symlink(str(fs_entry), dst) + if not matched: + fail("No files matched pattern '%s' in directory '%s' while creating symlinks for entry '%s'" % + (pattern, root_with_dir, entry_fmt)) + else: + src_entry_path = utils.substitute(paths.join(root, entry_fmt), mapping) + dst_entry_path = entry_fmt + repo_ctx.symlink(src_entry_path, dst_entry_path) + +def _matches_glob(name, pattern): + if "*" not in pattern: + return name == pattern + parts = pattern.split("*") + if not name.startswith(parts[0]): + return False + if not name.endswith(parts[-1]): + return False + pos = len(parts[0]) + for part in parts[1:-1]: + idx = name.find(part, pos) + if idx == -1: + return False + pos = idx + len(part) + return True def _download(repo_ctx): output = repo_ctx.path("archive") diff --git a/dev/bazel/toolchains/cc_toolchain_config_lnx.bzl b/dev/bazel/toolchains/cc_toolchain_config_lnx.bzl index 8df1a194adc..4f0c30fffef 100644 --- a/dev/bazel/toolchains/cc_toolchain_config_lnx.bzl +++ b/dev/bazel/toolchains/cc_toolchain_config_lnx.bzl @@ -14,7 +14,9 @@ # limitations under the License. #=============================================================================== -load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", +load("@rules_cc//cc:action_names.bzl", "ACTION_NAMES") + +load("@rules_cc//cc:cc_toolchain_config_lib.bzl", "feature", "feature_set", "flag_group", @@ -26,8 +28,9 @@ load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "tool", "artifact_name_pattern", ) -load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES") load("@onedal//dev/bazel/toolchains:action_names.bzl", "CPP_MERGE_STATIC_LIBRARIES") +load("@rules_cc//cc/common:cc_common.bzl", "cc_common") +load("@rules_cc//cc/toolchains:cc_toolchain_config_info.bzl", "CcToolchainConfigInfo") all_compile_actions = [ ACTION_NAMES.c_compile, diff --git a/dev/bazel/toolchains/cc_toolchain_lnx.tpl.BUILD b/dev/bazel/toolchains/cc_toolchain_lnx.tpl.BUILD index bff6fc0aa75..7ac4f60bad2 100644 --- a/dev/bazel/toolchains/cc_toolchain_lnx.tpl.BUILD +++ b/dev/bazel/toolchains/cc_toolchain_lnx.tpl.BUILD @@ -17,6 +17,7 @@ package(default_visibility = ["//visibility:public"]) load("@onedal//dev/bazel/toolchains:cc_toolchain_config_lnx.bzl", "cc_toolchain_config") +load("@rules_cc//cc:defs.bzl", "cc_toolchain") filegroup( name = "empty",