diff --git a/BUILD.bazel b/BUILD.bazel index e2a2ceef..49d1da36 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -15,6 +15,7 @@ bzl_library( deps = [ ":bazel_tools_bzl_srcs", "//for_workspace:bzl_srcs", + "//foreign_cc:bzl_srcs", "//toolchains:bzl_srcs", "//tools/build_defs:bzl_srcs", ], diff --git a/docs/README.md b/docs/README.md index 579d592b..cce07973 100644 --- a/docs/README.md +++ b/docs/README.md @@ -261,7 +261,7 @@ Rule for building Make. Invokes configure script and make install. native_tool_toolchain(name, path, target) -Rule for defining the toolchain data of the native tools (cmake, ninja), to be used by rules_foreign_cc with toolchain types `@rules_foreign_cc//tools/build_defs:cmake_toolchain` and `@rules_foreign_cc//tools/build_defs:ninja_toolchain`. +Rule for defining the toolchain data of the native tools (cmake, ninja), to be used by rules_foreign_cc with toolchain types `@rules_foreign_cc//toolchains:cmake_toolchain` and `@rules_foreign_cc//toolchains:ninja_toolchain`. **ATTRIBUTES** @@ -487,7 +487,7 @@ Call this function from the WORKSPACE file to initialize rules_foreign_cc de | Name | Description | Default Value | | :------------- | :------------- | :------------- | -| native_tools_toolchains | pass the toolchains for toolchain types '@rules_foreign_cc//tools/build_defs:cmake_toolchain' and '@rules_foreign_cc//tools/build_defs:ninja_toolchain' with the needed platform constraints. If you do not pass anything, registered default toolchains will be selected (see below). | [] | +| native_tools_toolchains | pass the toolchains for toolchain types '@rules_foreign_cc//toolchains:cmake_toolchain' and '@rules_foreign_cc//toolchains:ninja_toolchain' with the needed platform constraints. If you do not pass anything, registered default toolchains will be selected (see below). | [] | | register_default_tools | If True, the cmake and ninja toolchains, calling corresponding preinstalled binaries by name (cmake, ninja) will be registered after 'native_tools_toolchains' without any platform constraints. The default is True. | True | | cmake_version | The target version of the cmake toolchain if register_default_tools or register_built_tools is set to True. | "3.19.6" | | make_version | The target version of the default make toolchain if register_built_tools is set to True. | "4.3" | diff --git a/docs/docs.bzl b/docs/docs.bzl index b6fa88be..da471158 100644 --- a/docs/docs.bzl +++ b/docs/docs.bzl @@ -1,9 +1,14 @@ """A module exporting symbols for Stardoc generation.""" load("@rules_foreign_cc//:workspace_definitions.bzl", _rules_foreign_cc_dependencies = "rules_foreign_cc_dependencies") -load("@rules_foreign_cc//for_workspace:cmake_build.bzl", _cmake_tool = "cmake_tool") -load("@rules_foreign_cc//for_workspace:make_build.bzl", _make_tool = "make_tool") -load("@rules_foreign_cc//for_workspace:ninja_build.bzl", _ninja_tool = "ninja_tool") +load("@rules_foreign_cc//foreign_cc/built_tools:cmake_build.bzl", _cmake_tool = "cmake_tool") +load("@rules_foreign_cc//foreign_cc/built_tools:make_build.bzl", _make_tool = "make_tool") +load("@rules_foreign_cc//foreign_cc/built_tools:ninja_build.bzl", _ninja_tool = "ninja_tool") +load( + "@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", + _ToolInfo = "ToolInfo", + _native_tool_toolchain = "native_tool_toolchain", +) load("@rules_foreign_cc//tools/build_defs:boost_build.bzl", _boost_build = "boost_build") load("@rules_foreign_cc//tools/build_defs:cmake.bzl", _cmake = "cmake") load("@rules_foreign_cc//tools/build_defs:configure.bzl", _configure_make = "configure_make") @@ -17,11 +22,6 @@ load( ) load("@rules_foreign_cc//tools/build_defs:make.bzl", _make = "make") load("@rules_foreign_cc//tools/build_defs:ninja.bzl", _ninja = "ninja") -load( - "@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", - _ToolInfo = "ToolInfo", - _native_tool_toolchain = "native_tool_toolchain", -) # Rules Foreign CC symbols boost_build = _boost_build diff --git a/for_workspace/BUILD.bazel b/for_workspace/BUILD.bazel index 1b692ce4..00f1bd16 100644 --- a/for_workspace/BUILD.bazel +++ b/for_workspace/BUILD.bazel @@ -5,7 +5,6 @@ exports_files( "make_build.bzl", "cmake_build.bzl", "ninja_build.bzl", - "install_ws_dependency.bzl", ], ) diff --git a/for_workspace/cmake_build.bzl b/for_workspace/cmake_build.bzl index 3955752d..470402f3 100644 --- a/for_workspace/cmake_build.bzl +++ b/for_workspace/cmake_build.bzl @@ -1,48 +1,5 @@ -""" Rule for building CMake from sources. """ +""" This module is deprecated and has been moved to `//toolchains/built_tools/...` """ -load("@rules_foreign_cc//tools/build_defs:detect_root.bzl", "detect_root") -load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") +load("//foreign_cc/built_tools:cmake_build.bzl", _cmake_tool = "cmake_tool") -def _cmake_tool(ctx): - root = detect_root(ctx.attr.cmake_srcs) - - cmake = ctx.actions.declare_directory("cmake") - script = [ - "export BUILD_DIR=##pwd##", - "export BUILD_TMPDIR=$${BUILD_DIR}$$.build_tmpdir", - "##copy_dir_contents_to_dir## ./{} $BUILD_TMPDIR".format(root), - "##mkdirs## " + cmake.path, - "cd $$BUILD_TMPDIR$$", - "./bootstrap --prefix=install", - "make install", - "##copy_dir_contents_to_dir## ./install $BUILD_DIR/" + cmake.path, - "cd $$BUILD_DIR$$", - ] - - script_text = convert_shell_script(ctx, script) - - ctx.actions.run_shell( - mnemonic = "BootstrapCMake", - inputs = ctx.attr.cmake_srcs.files, - outputs = [cmake], - tools = [], - use_default_shell_env = True, - command = script_text, - execution_requirements = {"block-network": ""}, - ) - - return [DefaultInfo(files = depset([cmake]))] - -cmake_tool = rule( - doc = "Rule for building CMake. Invokes bootstrap script and make install.", - attrs = { - "cmake_srcs": attr.label(mandatory = True), - }, - host_fragments = ["cpp"], - output_to_genfiles = True, - implementation = _cmake_tool, - toolchains = [ - "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", - "@bazel_tools//tools/cpp:toolchain_type", - ], -) +cmake_tool = _cmake_tool diff --git a/for_workspace/make_build.bzl b/for_workspace/make_build.bzl index 654418e3..1d5fb8d0 100644 --- a/for_workspace/make_build.bzl +++ b/for_workspace/make_build.bzl @@ -1,62 +1,5 @@ -""" Rule for building GNU Make from sources. """ +""" This module is deprecated and has been moved to `//toolchains/built_tools/...` """ -load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") -load( - "@rules_foreign_cc//tools/build_defs:run_shell_file_utils.bzl", - "fictive_file_in_genroot", -) -load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") -load("//tools/build_defs:detect_root.bzl", "detect_root") +load("//foreign_cc/built_tools:make_build.bzl", _make_tool = "make_tool") -def _make_tool(ctx): - root = detect_root(ctx.attr.make_srcs) - - cc_toolchain = find_cpp_toolchain(ctx) - - # we need this fictive file in the root to get the path of the root in the script - empty = fictive_file_in_genroot(ctx.actions, ctx.label.name) - - make = ctx.actions.declare_directory("make") - script = [ - "export EXT_BUILD_ROOT=##pwd##", - "export INSTALLDIR=$$EXT_BUILD_ROOT$$/" + empty.file.dirname + "/" + ctx.attr.name, - "export BUILD_TMPDIR=$$INSTALLDIR$$.build_tmpdir", - "##mkdirs## $$BUILD_TMPDIR$$", - "##copy_dir_contents_to_dir## ./{} $BUILD_TMPDIR".format(root), - "cd $$BUILD_TMPDIR$$", - "./configure --disable-dependency-tracking --prefix=$$EXT_BUILD_ROOT$$/{}".format(make.path), - "./build.sh", - "./make install", - empty.script, - ] - script_text = convert_shell_script(ctx, script) - - ctx.actions.run_shell( - mnemonic = "BootstrapMake", - inputs = ctx.attr.make_srcs.files, - outputs = [make, empty.file], - tools = cc_toolchain.all_files, - use_default_shell_env = True, - command = script_text, - execution_requirements = {"block-network": ""}, - ) - - return [DefaultInfo(files = depset([make]))] - -make_tool = rule( - doc = "Rule for building Make. Invokes configure script and make install.", - attrs = { - "make_srcs": attr.label( - doc = "target with the Make sources", - mandatory = True, - ), - "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")), - }, - host_fragments = ["cpp"], - output_to_genfiles = True, - implementation = _make_tool, - toolchains = [ - "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", - "@bazel_tools//tools/cpp:toolchain_type", - ], -) +make_tool = _make_tool diff --git a/for_workspace/ninja_build.bzl b/for_workspace/ninja_build.bzl index 07b68d27..a43c1e21 100644 --- a/for_workspace/ninja_build.bzl +++ b/for_workspace/ninja_build.bzl @@ -1,42 +1,5 @@ -""" Rule for building Ninja from sources. """ +""" This module is deprecated and has been moved to `//toolchains/built_tools/...` """ -load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") -load("//tools/build_defs:detect_root.bzl", "detect_root") +load("//foreign_cc/built_tools:ninja_build.bzl", _ninja_tool = "ninja_tool") -def _ninja_tool(ctx): - root = detect_root(ctx.attr.ninja_srcs) - - ninja = ctx.actions.declare_directory("ninja") - script = [ - "##mkdirs## " + ninja.path, - "##copy_dir_contents_to_dir## ./{} {}".format(root, ninja.path), - "cd " + ninja.path, - "./configure.py --bootstrap", - ] - script_text = convert_shell_script(ctx, script) - - ctx.actions.run_shell( - mnemonic = "BootstrapNinja", - inputs = ctx.attr.ninja_srcs.files, - outputs = [ninja], - tools = [], - use_default_shell_env = True, - command = script_text, - execution_requirements = {"block-network": ""}, - ) - - return [DefaultInfo(files = depset([ninja]))] - -ninja_tool = rule( - doc = "Rule for building Ninja. Invokes configure script and make install.", - attrs = { - "ninja_srcs": attr.label(mandatory = True), - }, - host_fragments = ["cpp"], - output_to_genfiles = True, - implementation = _ninja_tool, - toolchains = [ - "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", - "@bazel_tools//tools/cpp:toolchain_type", - ], -) +ninja_tool = _ninja_tool diff --git a/for_workspace/repositories.bzl b/for_workspace/repositories.bzl index 1d0eb37f..ca714872 100644 --- a/for_workspace/repositories.bzl +++ b/for_workspace/repositories.bzl @@ -6,6 +6,9 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") def repositories(): """Declare repositories used by `rules_foreign_cc`""" + # buildifier: disable=print + print("This macro is deprecated and will soon be removed") + maybe( http_archive, name = "bazel_skylib", diff --git a/foreign_cc/BUILD.bazel b/foreign_cc/BUILD.bazel new file mode 100644 index 00000000..c59e0ec7 --- /dev/null +++ b/foreign_cc/BUILD.bazel @@ -0,0 +1,10 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bzl_srcs", + srcs = glob(["**/*.bzl"]), + visibility = ["//:__subpackages__"], + deps = [ + "//foreign_cc/built_tools:bzl_srcs", + ], +) diff --git a/foreign_cc/built_tools/BUILD.bazel b/foreign_cc/built_tools/BUILD.bazel new file mode 100644 index 00000000..e4db260d --- /dev/null +++ b/foreign_cc/built_tools/BUILD.bazel @@ -0,0 +1,7 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bzl_srcs", + srcs = glob(["**/*.bzl"]), + visibility = ["//:__subpackages__"], +) diff --git a/foreign_cc/built_tools/cmake_build.bzl b/foreign_cc/built_tools/cmake_build.bzl new file mode 100644 index 00000000..3955752d --- /dev/null +++ b/foreign_cc/built_tools/cmake_build.bzl @@ -0,0 +1,48 @@ +""" Rule for building CMake from sources. """ + +load("@rules_foreign_cc//tools/build_defs:detect_root.bzl", "detect_root") +load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") + +def _cmake_tool(ctx): + root = detect_root(ctx.attr.cmake_srcs) + + cmake = ctx.actions.declare_directory("cmake") + script = [ + "export BUILD_DIR=##pwd##", + "export BUILD_TMPDIR=$${BUILD_DIR}$$.build_tmpdir", + "##copy_dir_contents_to_dir## ./{} $BUILD_TMPDIR".format(root), + "##mkdirs## " + cmake.path, + "cd $$BUILD_TMPDIR$$", + "./bootstrap --prefix=install", + "make install", + "##copy_dir_contents_to_dir## ./install $BUILD_DIR/" + cmake.path, + "cd $$BUILD_DIR$$", + ] + + script_text = convert_shell_script(ctx, script) + + ctx.actions.run_shell( + mnemonic = "BootstrapCMake", + inputs = ctx.attr.cmake_srcs.files, + outputs = [cmake], + tools = [], + use_default_shell_env = True, + command = script_text, + execution_requirements = {"block-network": ""}, + ) + + return [DefaultInfo(files = depset([cmake]))] + +cmake_tool = rule( + doc = "Rule for building CMake. Invokes bootstrap script and make install.", + attrs = { + "cmake_srcs": attr.label(mandatory = True), + }, + host_fragments = ["cpp"], + output_to_genfiles = True, + implementation = _cmake_tool, + toolchains = [ + "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", + "@bazel_tools//tools/cpp:toolchain_type", + ], +) diff --git a/foreign_cc/built_tools/make_build.bzl b/foreign_cc/built_tools/make_build.bzl new file mode 100644 index 00000000..654418e3 --- /dev/null +++ b/foreign_cc/built_tools/make_build.bzl @@ -0,0 +1,62 @@ +""" Rule for building GNU Make from sources. """ + +load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") +load( + "@rules_foreign_cc//tools/build_defs:run_shell_file_utils.bzl", + "fictive_file_in_genroot", +) +load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") +load("//tools/build_defs:detect_root.bzl", "detect_root") + +def _make_tool(ctx): + root = detect_root(ctx.attr.make_srcs) + + cc_toolchain = find_cpp_toolchain(ctx) + + # we need this fictive file in the root to get the path of the root in the script + empty = fictive_file_in_genroot(ctx.actions, ctx.label.name) + + make = ctx.actions.declare_directory("make") + script = [ + "export EXT_BUILD_ROOT=##pwd##", + "export INSTALLDIR=$$EXT_BUILD_ROOT$$/" + empty.file.dirname + "/" + ctx.attr.name, + "export BUILD_TMPDIR=$$INSTALLDIR$$.build_tmpdir", + "##mkdirs## $$BUILD_TMPDIR$$", + "##copy_dir_contents_to_dir## ./{} $BUILD_TMPDIR".format(root), + "cd $$BUILD_TMPDIR$$", + "./configure --disable-dependency-tracking --prefix=$$EXT_BUILD_ROOT$$/{}".format(make.path), + "./build.sh", + "./make install", + empty.script, + ] + script_text = convert_shell_script(ctx, script) + + ctx.actions.run_shell( + mnemonic = "BootstrapMake", + inputs = ctx.attr.make_srcs.files, + outputs = [make, empty.file], + tools = cc_toolchain.all_files, + use_default_shell_env = True, + command = script_text, + execution_requirements = {"block-network": ""}, + ) + + return [DefaultInfo(files = depset([make]))] + +make_tool = rule( + doc = "Rule for building Make. Invokes configure script and make install.", + attrs = { + "make_srcs": attr.label( + doc = "target with the Make sources", + mandatory = True, + ), + "_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")), + }, + host_fragments = ["cpp"], + output_to_genfiles = True, + implementation = _make_tool, + toolchains = [ + "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", + "@bazel_tools//tools/cpp:toolchain_type", + ], +) diff --git a/foreign_cc/built_tools/ninja_build.bzl b/foreign_cc/built_tools/ninja_build.bzl new file mode 100644 index 00000000..07b68d27 --- /dev/null +++ b/foreign_cc/built_tools/ninja_build.bzl @@ -0,0 +1,42 @@ +""" Rule for building Ninja from sources. """ + +load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script") +load("//tools/build_defs:detect_root.bzl", "detect_root") + +def _ninja_tool(ctx): + root = detect_root(ctx.attr.ninja_srcs) + + ninja = ctx.actions.declare_directory("ninja") + script = [ + "##mkdirs## " + ninja.path, + "##copy_dir_contents_to_dir## ./{} {}".format(root, ninja.path), + "cd " + ninja.path, + "./configure.py --bootstrap", + ] + script_text = convert_shell_script(ctx, script) + + ctx.actions.run_shell( + mnemonic = "BootstrapNinja", + inputs = ctx.attr.ninja_srcs.files, + outputs = [ninja], + tools = [], + use_default_shell_env = True, + command = script_text, + execution_requirements = {"block-network": ""}, + ) + + return [DefaultInfo(files = depset([ninja]))] + +ninja_tool = rule( + doc = "Rule for building Ninja. Invokes configure script and make install.", + attrs = { + "ninja_srcs": attr.label(mandatory = True), + }, + host_fragments = ["cpp"], + output_to_genfiles = True, + implementation = _ninja_tool, + toolchains = [ + "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", + "@bazel_tools//tools/cpp:toolchain_type", + ], +) diff --git a/toolchains/BUILD.bazel b/toolchains/BUILD.bazel index 41360486..eb5c97c2 100644 --- a/toolchains/BUILD.bazel +++ b/toolchains/BUILD.bazel @@ -1,13 +1,68 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -load("//for_workspace:cmake_build.bzl", "cmake_tool") -load("//for_workspace:make_build.bzl", "make_tool") -load("//for_workspace:ninja_build.bzl", "ninja_tool") -load("//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("//foreign_cc/built_tools:cmake_build.bzl", "cmake_tool") +load("//foreign_cc/built_tools:make_build.bzl", "make_tool") +load("//foreign_cc/built_tools:ninja_build.bzl", "ninja_tool") +load("//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") + +package(default_visibility = ["//visibility:public"]) + +toolchain_type( + name = "cmake_toolchain", +) + +toolchain_type( + name = "ninja_toolchain", +) + +toolchain_type( + name = "make_toolchain", +) + +toolchain( + name = "built_cmake_toolchain", + toolchain = ":built_cmake", + toolchain_type = ":cmake_toolchain", +) + +toolchain( + name = "built_ninja_toolchain", + toolchain = ":built_ninja", + toolchain_type = ":ninja_toolchain", +) + +toolchain( + name = "built_make_toolchain", + toolchain = ":built_make", + toolchain_type = ":make_toolchain", +) + +# Preinstalled cmake will always be the default, if toolchain with more exact constraints +# is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies +toolchain( + name = "preinstalled_cmake_toolchain", + toolchain = ":preinstalled_cmake", + toolchain_type = ":cmake_toolchain", +) + +# Preinstalled ninja will always be the default, if toolchain with more exact constraints +# is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies +toolchain( + name = "preinstalled_ninja_toolchain", + toolchain = ":preinstalled_ninja", + toolchain_type = ":ninja_toolchain", +) + +# Preinstalled make will always be the default, if toolchain with more exact constraints +# is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies +toolchain( + name = "preinstalled_make_toolchain", + toolchain = ":preinstalled_make", + toolchain_type = ":make_toolchain", +) native_tool_toolchain( name = "preinstalled_make", path = "make", - visibility = ["//visibility:public"], ) make_tool( @@ -20,13 +75,11 @@ native_tool_toolchain( name = "built_make", path = "$(execpath :make_tool)/bin/make", target = ":make_tool", - visibility = ["//visibility:public"], ) native_tool_toolchain( name = "preinstalled_cmake", path = "cmake", - visibility = ["//visibility:public"], ) cmake_tool( @@ -39,13 +92,11 @@ native_tool_toolchain( name = "built_cmake", path = "$(execpath :cmake_tool)/bin/cmake", target = ":cmake_tool", - visibility = ["//visibility:public"], ) native_tool_toolchain( name = "preinstalled_ninja", path = "ninja", - visibility = ["//visibility:public"], ) ninja_tool( @@ -58,11 +109,13 @@ native_tool_toolchain( name = "built_ninja", path = "$(execpath :ninja_tool)/ninja", target = ":ninja_tool", - visibility = ["//visibility:public"], ) bzl_library( name = "bzl_srcs", srcs = glob(["**/*.bzl"]), - visibility = ["//visibility:public"], + visibility = ["//:__subpackages__"], + deps = [ + "//toolchains/native_tools:bzl_srcs", + ], ) diff --git a/toolchains/built_toolchains.bzl b/toolchains/built_toolchains.bzl index d61e6aaa..1a571e38 100644 --- a/toolchains/built_toolchains.bzl +++ b/toolchains/built_toolchains.bzl @@ -23,7 +23,7 @@ def built_toolchains(cmake_version, make_version, ninja_version): def _cmake_toolchain(version): native.register_toolchains( - "@rules_foreign_cc//tools/build_defs:built_cmake_toolchain", + "@rules_foreign_cc//toolchains:built_cmake_toolchain", ) if version == "3.19.6": maybe( @@ -42,7 +42,7 @@ def _cmake_toolchain(version): def _make_toolchain(version): native.register_toolchains( - "@rules_foreign_cc//tools/build_defs:built_make_toolchain", + "@rules_foreign_cc//toolchains:built_make_toolchain", ) if version == "4.3": maybe( @@ -61,7 +61,7 @@ def _make_toolchain(version): def _ninja_toolchain(version): native.register_toolchains( - "@rules_foreign_cc//tools/build_defs:built_ninja_toolchain", + "@rules_foreign_cc//toolchains:built_ninja_toolchain", ) if version == "1.10.2": maybe( diff --git a/toolchains/native_tools/BUILD.bazel b/toolchains/native_tools/BUILD.bazel new file mode 100644 index 00000000..d42fc71c --- /dev/null +++ b/toolchains/native_tools/BUILD.bazel @@ -0,0 +1,7 @@ +load("@bazel_skylib//:bzl_library.bzl", "bzl_library") + +bzl_library( + name = "bzl_srcs", + srcs = glob(["**/*.bzl"]), + visibility = ["//visibility:public"], +) diff --git a/toolchains/native_tools/native_tools_toolchain.bzl b/toolchains/native_tools/native_tools_toolchain.bzl new file mode 100644 index 00000000..69f18fc7 --- /dev/null +++ b/toolchains/native_tools/native_tools_toolchain.bzl @@ -0,0 +1,59 @@ +# buildifier: disable=module-docstring +ToolInfo = provider( + doc = "Information about the native tool", + fields = { + "path": ( + "Absolute path to the tool in case the tool is preinstalled on the machine. " + + "Relative path to the tool in case the tool is built as part of a build; the path should be relative " + + "to the bazel-genfiles, i.e. it should start with the name of the top directory of the built tree " + + "artifact. (Please see the example `//examples:built_cmake_toolchain`)" + ), + "target": ( + "If the tool is preinstalled, must be None. " + + "If the tool is built as part of the build, the corresponding build target, which should produce " + + "the tree artifact with the binary to call." + ), + }, +) + +def _native_tool_toolchain_impl(ctx): + if not ctx.attr.path and not ctx.attr.target: + fail("Either path or target (and path) should be defined for the tool.") + path = None + if ctx.attr.target: + path = ctx.expand_location(ctx.attr.path, targets = [ctx.attr.target]) + else: + path = ctx.expand_location(ctx.attr.path) + return platform_common.ToolchainInfo(data = ToolInfo( + path = path, + target = ctx.attr.target, + )) + +native_tool_toolchain = rule( + doc = ( + "Rule for defining the toolchain data of the native tools (cmake, ninja), " + + "to be used by rules_foreign_cc with toolchain types " + + "`@rules_foreign_cc//toolchains:cmake_toolchain` and " + + "`@rules_foreign_cc//toolchains:ninja_toolchain`." + ), + implementation = _native_tool_toolchain_impl, + attrs = { + "path": attr.string( + mandatory = False, + doc = ( + "Absolute path to the tool in case the tool is preinstalled on the machine. " + + "Relative path to the tool in case the tool is built as part of a build; the path should be " + + "relative to the bazel-genfiles, i.e. it should start with the name of the top directory " + + "of the built tree artifact. (Please see the example `//examples:built_cmake_toolchain`)" + ), + ), + "target": attr.label( + mandatory = False, + doc = ( + "If the tool is preinstalled, must be None. " + + "If the tool is built as part of the build, the corresponding build target, " + + "which should produce the tree artifact with the binary to call." + ), + ), + }, +) diff --git a/toolchains/native_tools/tool_access.bzl b/toolchains/native_tools/tool_access.bzl new file mode 100644 index 00000000..4d0c3a2e --- /dev/null +++ b/toolchains/native_tools/tool_access.bzl @@ -0,0 +1,54 @@ +"""A module defining convienence methoods for accessing build tools from +rules_foreign_cc toolchains +""" + +load(":native_tools_toolchain.bzl", "ToolInfo") + +def access_tool(toolchain_type_, ctx, tool_name): + """A helper macro for getting the path to a build tool's executable + + Args: + toolchain_type_ (str): The name of the toolchain type + ctx (ctx): The rule's context object + tool_name (str): The name of the tool to query + + Returns: + ToolInfo: A provider containing information about the toolchain's executable + """ + tool_toolchain = ctx.toolchains[toolchain_type_] + if tool_toolchain: + return tool_toolchain.data + return ToolInfo( + path = tool_name, + target = None, + ) + +def get_cmake_data(ctx): + return _access_and_expect_label_copied("@rules_foreign_cc//toolchains:cmake_toolchain", ctx, "cmake") + +def get_ninja_data(ctx): + return _access_and_expect_label_copied("@rules_foreign_cc//toolchains:ninja_toolchain", ctx, "ninja") + +def get_make_data(ctx): + return _access_and_expect_label_copied("@rules_foreign_cc//toolchains:make_toolchain", ctx, "make") + +def _access_and_expect_label_copied(toolchain_type_, ctx, tool_name): + tool_data = access_tool(toolchain_type_, ctx, tool_name) + if tool_data.target: + # This could be made more efficient by changing the + # toolchain to provide the executable as a target + cmd_file = tool_data + for f in tool_data.target.files.to_list(): + if f.path.endswith("/" + tool_data.path): + cmd_file = f + break + return struct( + deps = [tool_data.target], + # as the tool will be copied into tools directory + path = "$EXT_BUILD_ROOT/{}".format(cmd_file.path), + ) + else: + return struct( + deps = [], + path = tool_data.path, + ) diff --git a/toolchains/prebuilt_toolchains.bzl b/toolchains/prebuilt_toolchains.bzl index 2a8084e9..2e94d686 100644 --- a/toolchains/prebuilt_toolchains.bzl +++ b/toolchains/prebuilt_toolchains.bzl @@ -9,7 +9,7 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("@rules_foreign_cc//toolchains:prebuilt_toolchains_repository.bzl", "prebuilt_toolchains_repository") _CMAKE_BUILD_FILE = """\ -load("@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") package(default_visibility = ["//visibility:public"]) @@ -36,7 +36,7 @@ native_tool_toolchain( """ _NINJA_BUILD_FILE = """\ -load("@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") package(default_visibility = ["//visibility:public"]) @@ -62,6 +62,7 @@ def prebuilt_toolchains(cmake_version, ninja_version): """ _cmake_toolchains(cmake_version) _ninja_toolchains(ninja_version) + _make_toolchains() def _cmake_toolchains(version): if "3.19.6" == version: @@ -1056,3 +1057,7 @@ def _ninja_toolchains(version): return fail("Unsupported version: " + str(version)) + +def _make_toolchains(): + # There are currently no prebuilt make binaries + pass diff --git a/toolchains/prebuilt_toolchains.py b/toolchains/prebuilt_toolchains.py index f01288bd..1a3fbd0e 100755 --- a/toolchains/prebuilt_toolchains.py +++ b/toolchains/prebuilt_toolchains.py @@ -114,7 +114,7 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("@rules_foreign_cc//toolchains:prebuilt_toolchains_repository.bzl", "prebuilt_toolchains_repository") _CMAKE_BUILD_FILE = \"\"\"\\ -load("@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") package(default_visibility = ["//visibility:public"]) @@ -141,7 +141,7 @@ native_tool_toolchain( \"\"\" _NINJA_BUILD_FILE = \"\"\"\\ -load("@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") package(default_visibility = ["//visibility:public"]) @@ -366,7 +366,7 @@ def get_make_definitions() -> str: """ return indent( - "native.register_toolchains(\"@rules_foreign_cc//tools/build_defs:preinstalled_make_toolchain\")", + "# There are currently no prebuilt make binaries\npass", " " * 4) diff --git a/toolchains/prebuilt_toolchains_repository.bzl b/toolchains/prebuilt_toolchains_repository.bzl index 0a9559f7..2e7ec747 100644 --- a/toolchains/prebuilt_toolchains_repository.bzl +++ b/toolchains/prebuilt_toolchains_repository.bzl @@ -1,7 +1,7 @@ """A module defining a repository rule for housing toolchain definitions""" _BUILD_FILE = """\ -load("@rules_foreign_cc//tools/build_defs/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") +load("@rules_foreign_cc//toolchains/native_tools:native_tools_toolchain.bzl", "native_tool_toolchain") {toolchains} """ @@ -11,7 +11,7 @@ toolchain( name = "{repo}_toolchain", exec_compatible_with = {exec_compatible_with}, toolchain = "@{repo}//:{tool}_tool", - toolchain_type = "@rules_foreign_cc//tools/build_defs:{tool}_toolchain", + toolchain_type = "@rules_foreign_cc//toolchains:{tool}_toolchain", ) """ diff --git a/toolchains/toolchains.bzl b/toolchains/toolchains.bzl index 3f4c6775..938ab026 100644 --- a/toolchains/toolchains.bzl +++ b/toolchains/toolchains.bzl @@ -13,7 +13,7 @@ prebuilt_toolchains = _prebuilt_toolchains def preinstalled_toolchains(): """Register toolchains for various build tools expected to be installed on the exec host""" native.register_toolchains( - "@rules_foreign_cc//tools/build_defs:preinstalled_cmake_toolchain", - "@rules_foreign_cc//tools/build_defs:preinstalled_make_toolchain", - "@rules_foreign_cc//tools/build_defs:preinstalled_ninja_toolchain", + "@rules_foreign_cc//toolchains:preinstalled_cmake_toolchain", + "@rules_foreign_cc//toolchains:preinstalled_make_toolchain", + "@rules_foreign_cc//toolchains:preinstalled_ninja_toolchain", ) diff --git a/tools/build_defs/BUILD.bazel b/tools/build_defs/BUILD.bazel index 7cd6b5d1..9e4e085f 100644 --- a/tools/build_defs/BUILD.bazel +++ b/tools/build_defs/BUILD.bazel @@ -1,60 +1,66 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") -toolchain_type( +alias( name = "cmake_toolchain", + actual = "//toolchains:cmake_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", visibility = ["//visibility:public"], ) -toolchain_type( +alias( name = "ninja_toolchain", + actual = "//toolchains:ninja_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", visibility = ["//visibility:public"], ) -toolchain_type( +alias( name = "make_toolchain", + actual = "//toolchains:make_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", visibility = ["//visibility:public"], ) -toolchain( +alias( name = "built_cmake_toolchain", - toolchain = "@rules_foreign_cc//toolchains:built_cmake", - toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", + actual = "//toolchains:built_cmake_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) -toolchain( +alias( name = "built_ninja_toolchain", - toolchain = "@rules_foreign_cc//toolchains:built_ninja", - toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", + actual = "//toolchains:built_ninja_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) -toolchain( +alias( name = "built_make_toolchain", - toolchain = "@rules_foreign_cc//toolchains:built_make", - toolchain_type = "@rules_foreign_cc//tools/build_defs:make_toolchain", + actual = "//toolchains:built_make_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) # Preinstalled cmake will always be the default, if toolchain with more exact constraints # is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies -toolchain( +alias( name = "preinstalled_cmake_toolchain", - toolchain = "@rules_foreign_cc//toolchains:preinstalled_cmake", - toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", + actual = "//toolchains:preinstalled_cmake_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) # Preinstalled ninja will always be the default, if toolchain with more exact constraints # is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies -toolchain( +alias( name = "preinstalled_ninja_toolchain", - toolchain = "@rules_foreign_cc//toolchains:preinstalled_ninja", - toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", + actual = "//toolchains:preinstalled_ninja_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) # Preinstalled make will always be the default, if toolchain with more exact constraints # is not defined before; registered from workspace_definitions.bzl#rules_foreign_cc_dependencies -toolchain( +alias( name = "preinstalled_make_toolchain", - toolchain = "@rules_foreign_cc//toolchains:preinstalled_make", - toolchain_type = "@rules_foreign_cc//tools/build_defs:make_toolchain", + actual = "//toolchains:preinstalled_make_toolchain", + deprecation = "This target has been moved to `@rules_foreign_cc//toolchains/...`", ) bzl_library( diff --git a/tools/build_defs/cmake.bzl b/tools/build_defs/cmake.bzl index e28b9be8..56e53cbd 100644 --- a/tools/build_defs/cmake.bzl +++ b/tools/build_defs/cmake.bzl @@ -1,6 +1,12 @@ """ Defines the rule for building external library with CMake """ +load( + "//toolchains/native_tools:tool_access.bzl", + "get_cmake_data", + "get_make_data", + "get_ninja_data", +) load( "//tools/build_defs:cc_toolchain_util.bzl", "get_flags_info", @@ -17,12 +23,6 @@ load( "cc_external_rule_impl", "create_attrs", ) -load( - "//tools/build_defs/native_tools:tool_access.bzl", - "get_cmake_data", - "get_make_data", - "get_ninja_data", -) load(":cmake_script.bzl", "create_cmake_script") def _cmake_impl(ctx): @@ -155,9 +155,9 @@ cmake = rule( output_to_genfiles = True, implementation = _cmake_impl, toolchains = [ - "@rules_foreign_cc//tools/build_defs:cmake_toolchain", - "@rules_foreign_cc//tools/build_defs:ninja_toolchain", - "@rules_foreign_cc//tools/build_defs:make_toolchain", + "@rules_foreign_cc//toolchains:cmake_toolchain", + "@rules_foreign_cc//toolchains:ninja_toolchain", + "@rules_foreign_cc//toolchains:make_toolchain", "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", "@bazel_tools//tools/cpp:toolchain_type", ], diff --git a/tools/build_defs/configure.bzl b/tools/build_defs/configure.bzl index f8019da8..892ecc4a 100644 --- a/tools/build_defs/configure.bzl +++ b/tools/build_defs/configure.bzl @@ -1,5 +1,6 @@ # buildifier: disable=module-docstring load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "os_name") +load("//toolchains/native_tools:tool_access.bzl", "get_make_data") load( "//tools/build_defs:cc_toolchain_util.bzl", "get_flags_info", @@ -16,7 +17,6 @@ load( "cc_external_rule_impl", "create_attrs", ) -load("//tools/build_defs/native_tools:tool_access.bzl", "get_make_data") load(":configure_script.bzl", "create_configure_script") def _configure_make(ctx): @@ -179,7 +179,7 @@ configure_make = rule( output_to_genfiles = True, implementation = _configure_make, toolchains = [ - "@rules_foreign_cc//tools/build_defs:make_toolchain", + "@rules_foreign_cc//toolchains:make_toolchain", "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", "@bazel_tools//tools/cpp:toolchain_type", ], diff --git a/tools/build_defs/make.bzl b/tools/build_defs/make.bzl index 1bdedef5..4fa7477a 100644 --- a/tools/build_defs/make.bzl +++ b/tools/build_defs/make.bzl @@ -1,4 +1,5 @@ # buildifier: disable=module-docstring +load("//toolchains/native_tools:tool_access.bzl", "get_make_data") load( "//tools/build_defs:cc_toolchain_util.bzl", "get_flags_info", @@ -14,7 +15,6 @@ load( "cc_external_rule_impl", "create_attrs", ) -load("//tools/build_defs/native_tools:tool_access.bzl", "get_make_data") load(":configure_script.bzl", "create_make_script") def _make(ctx): @@ -122,7 +122,7 @@ make = rule( output_to_genfiles = True, implementation = _make, toolchains = [ - "@rules_foreign_cc//tools/build_defs:make_toolchain", + "@rules_foreign_cc//toolchains:make_toolchain", "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", "@bazel_tools//tools/cpp:toolchain_type", ], diff --git a/tools/build_defs/native_tools/native_tools_toolchain.bzl b/tools/build_defs/native_tools/native_tools_toolchain.bzl index d8881baa..98963c79 100644 --- a/tools/build_defs/native_tools/native_tools_toolchain.bzl +++ b/tools/build_defs/native_tools/native_tools_toolchain.bzl @@ -1,68 +1,9 @@ -# buildifier: disable=module-docstring -ToolInfo = provider( - doc = "Information about the native tool", - fields = { - "path": ( - "Absolute path to the tool in case the tool is preinstalled on the machine. " + - "Relative path to the tool in case the tool is built as part of a build; the path should be relative " + - "to the bazel-genfiles, i.e. it should start with the name of the top directory of the built tree " + - "artifact. (Please see the example `//examples:built_cmake_toolchain`)" - ), - "target": ( - "If the tool is preinstalled, must be None. " + - "If the tool is built as part of the build, the corresponding build target, which should produce " + - "the tree artifact with the binary to call." - ), - }, -) +"""This module has been moved to `//toolchains/native_tools:native_tools_toolchains.bzl`. +This file will be removed at some point in the future +""" -def _native_tool_toolchain_impl(ctx): - if not ctx.attr.path and not ctx.attr.target: - fail("Either path or target (and path) should be defined for the tool.") - path = None - if ctx.attr.target: - path = ctx.expand_location(ctx.attr.path, targets = [ctx.attr.target]) - else: - path = ctx.expand_location(ctx.attr.path) - return platform_common.ToolchainInfo(data = ToolInfo( - path = path, - target = ctx.attr.target, - )) +load("//toolchains/native_tools:native_tools_toolchain.bzl", _native_tool_toolchain = "native_tool_toolchain") +load("//toolchains/native_tools:tool_access.bzl", _access_tool = "access_tool") -native_tool_toolchain = rule( - doc = ( - "Rule for defining the toolchain data of the native tools (cmake, ninja), " + - "to be used by rules_foreign_cc with toolchain types " + - "`@rules_foreign_cc//tools/build_defs:cmake_toolchain` and " + - "`@rules_foreign_cc//tools/build_defs:ninja_toolchain`." - ), - implementation = _native_tool_toolchain_impl, - attrs = { - "path": attr.string( - mandatory = False, - doc = ( - "Absolute path to the tool in case the tool is preinstalled on the machine. " + - "Relative path to the tool in case the tool is built as part of a build; the path should be " + - "relative to the bazel-genfiles, i.e. it should start with the name of the top directory " + - "of the built tree artifact. (Please see the example `//examples:built_cmake_toolchain`)" - ), - ), - "target": attr.label( - mandatory = False, - doc = ( - "If the tool is preinstalled, must be None. " + - "If the tool is built as part of the build, the corresponding build target, " + - "which should produce the tree artifact with the binary to call." - ), - ), - }, -) - -def access_tool(toolchain_type_, ctx, tool_name): - tool_toolchain = ctx.toolchains[toolchain_type_] - if tool_toolchain: - return tool_toolchain.data - return ToolInfo( - path = tool_name, - target = None, - ) +native_tool_toolchain = _native_tool_toolchain +access_tool = _access_tool diff --git a/tools/build_defs/native_tools/tool_access.bzl b/tools/build_defs/native_tools/tool_access.bzl index a17f75dd..c6ba5c2d 100644 --- a/tools/build_defs/native_tools/tool_access.bzl +++ b/tools/build_defs/native_tools/tool_access.bzl @@ -1,32 +1,14 @@ -# buildifier: disable=module-docstring -load(":native_tools_toolchain.bzl", "access_tool") +"""This module has been moved to `//toolchains/native_tools:native_tools_toolchains.bzl`. +This file will be removed at some point in the future +""" -def get_cmake_data(ctx): - return _access_and_expect_label_copied("@rules_foreign_cc//tools/build_defs:cmake_toolchain", ctx, "cmake") +load( + "//toolchains/native_tools:tool_access.bzl", + _get_cmake_data = "get_cmake_data", + _get_make_data = "get_make_data", + _get_ninja_data = "get_ninja_data", +) -def get_ninja_data(ctx): - return _access_and_expect_label_copied("@rules_foreign_cc//tools/build_defs:ninja_toolchain", ctx, "ninja") - -def get_make_data(ctx): - return _access_and_expect_label_copied("@rules_foreign_cc//tools/build_defs:make_toolchain", ctx, "make") - -def _access_and_expect_label_copied(toolchain_type_, ctx, tool_name): - tool_data = access_tool(toolchain_type_, ctx, tool_name) - if tool_data.target: - # This could be made more efficient by changing the - # toolchain to provide the executable as a target - cmd_file = tool_data - for f in tool_data.target.files.to_list(): - if f.path.endswith("/" + tool_data.path): - cmd_file = f - break - return struct( - deps = [tool_data.target], - # as the tool will be copied into tools directory - path = "$EXT_BUILD_ROOT/{}".format(cmd_file.path), - ) - else: - return struct( - deps = [], - path = tool_data.path, - ) +get_cmake_data = _get_cmake_data +get_make_data = _get_make_data +get_ninja_data = _get_ninja_data diff --git a/tools/build_defs/ninja.bzl b/tools/build_defs/ninja.bzl index 23d436bc..60072f4e 100644 --- a/tools/build_defs/ninja.bzl +++ b/tools/build_defs/ninja.bzl @@ -1,5 +1,6 @@ """A module defining the `ninja` rule. A rule for building projects using the Ninja build tool""" +load("//toolchains/native_tools:tool_access.bzl", "get_ninja_data") load( "//tools/build_defs:detect_root.bzl", "detect_root", @@ -10,7 +11,6 @@ load( "cc_external_rule_impl", "create_attrs", ) -load("//tools/build_defs/native_tools:tool_access.bzl", "get_ninja_data") def _ninja_impl(ctx): """The implementation of the `ninja` rule @@ -117,7 +117,7 @@ ninja = rule( output_to_genfiles = True, implementation = _ninja_impl, toolchains = [ - "@rules_foreign_cc//tools/build_defs:ninja_toolchain", + "@rules_foreign_cc//toolchains:ninja_toolchain", "@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands", "@bazel_tools//tools/cpp:toolchain_type", ], diff --git a/workspace_definitions.bzl b/workspace_definitions.bzl index d659fa1d..05d98b72 100644 --- a/workspace_definitions.bzl +++ b/workspace_definitions.bzl @@ -1,6 +1,7 @@ """A module for defining WORKSPACE dependencies required for rules_foreign_cc""" -load("//for_workspace:repositories.bzl", "repositories") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("//toolchains:toolchains.bzl", "built_toolchains", "prebuilt_toolchains", "preinstalled_toolchains") load( "//tools/build_defs/shell_toolchain/toolchains:ws_defs.bzl", @@ -24,8 +25,8 @@ def rules_foreign_cc_dependencies( Args: native_tools_toolchains: pass the toolchains for toolchain types - '@rules_foreign_cc//tools/build_defs:cmake_toolchain' and - '@rules_foreign_cc//tools/build_defs:ninja_toolchain' with the needed platform constraints. + '@rules_foreign_cc//toolchains:cmake_toolchain' and + '@rules_foreign_cc//toolchains:ninja_toolchain' with the needed platform constraints. If you do not pass anything, registered default toolchains will be selected (see below). register_default_tools: If True, the cmake and ninja toolchains, calling corresponding @@ -56,7 +57,6 @@ def rules_foreign_cc_dependencies( This value is needed since register_toolchains() is called for these toolchains. Please refer to example in @rules_foreign_cc//toolchain_examples. """ - repositories() shell_toolchain_workspace_initalization( additional_shell_toolchain_mappings, @@ -77,3 +77,13 @@ def rules_foreign_cc_dependencies( if register_preinstalled_tools: preinstalled_toolchains() + + maybe( + http_archive, + name = "bazel_skylib", + sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz", + ], + )