From 629972e7663547308ff38a582a0f685c1739c241 Mon Sep 17 00:00:00 2001 From: Finn Ball Date: Tue, 26 Mar 2024 11:30:05 +0000 Subject: [PATCH 1/3] feat: port to bzlmod --- .bazelrc | 8 --- .gitignore | 2 +- MODULE.bazel | 71 +++++++++++++++++++++++++ WORKSPACE | 34 ------------ extensions/BUILD.bazel | 0 extensions/ros_repositories.bzl | 8 +++ repositories/bzip2.BUILD.bazel | 16 ------ repositories/deps.bzl | 15 ------ repositories/eigen.BUILD.bazel | 57 -------------------- repositories/lz4.BUILD.bazel | 16 ------ repositories/repositories.bzl | 81 ----------------------------- repositories/ros_comm.BUILD.bazel | 2 +- repositories/rosconsole.BUILD.bazel | 2 +- 13 files changed, 82 insertions(+), 230 deletions(-) create mode 100644 MODULE.bazel delete mode 100644 WORKSPACE create mode 100644 extensions/BUILD.bazel create mode 100644 extensions/ros_repositories.bzl delete mode 100644 repositories/bzip2.BUILD.bazel delete mode 100644 repositories/deps.bzl delete mode 100644 repositories/eigen.BUILD.bazel delete mode 100644 repositories/lz4.BUILD.bazel diff --git a/.bazelrc b/.bazelrc index 2b9f82f..ba54ac1 100644 --- a/.bazelrc +++ b/.bazelrc @@ -4,14 +4,6 @@ # Mandatory at the moment for Bazel 7.0.0. build --noincompatible_sandbox_hermetic_tmp -# This is mandatory if your build env doesn't have a proper Python 3 exe -# -- like the CI build image for this repo. -# The build image is using a fake python exe, see -# https://github.com/mvukov/bazel_builder/blob/main/Dockerfile. -# If blzmod is enabled, but not used as in this repo at the moment), -# then bazel for some reason tries to auto-detect a Python exe. -build --noenable_bzlmod - # Fix the wrong default to generate __init__.py to delimit a Python package. # This is a mandatory flag. build --incompatible_default_to_explicit_init_py diff --git a/.gitignore b/.gitignore index 19a7d87..01946f0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ bazel-* __pycache__ user.bazelrc -MODULE.bazel* +MODULE.bazel.lock diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000..f24599a --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,71 @@ +module(name = "rules_ros", repo_name = "com_github_mvukov_rules_ros") + +bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "bzip2", version = "1.0.8.bcr.1") +bazel_dep(name = "eigen", version = "3.4.0.bcr.1") +bazel_dep(name = "gflags", version = "2.2.2") +bazel_dep(name = "glog", version = "0.7.0") +bazel_dep(name = "googletest", version = "1.14.0.bcr.1") +bazel_dep(name = "lz4", version = "1.9.4") +bazel_dep(name = "platforms", version = "0.0.10") +bazel_dep(name = "rules_cc", version = "0.0.9") +bazel_dep(name = "rules_foreign_cc", version = "0.10.1") +bazel_dep(name = "rules_python", version = "0.33.1", dev_dependency=True) + +non_module_ros_repositories = use_extension("//extensions:ros_repositories.bzl", "non_module_dependencies") +use_repo( + non_module_ros_repositories, + "console_bridge", + "roscpp_core", + "rosconsole", + "ros_genmsg", + "ros_gencpp", + "ros_genpy", + "ros_std_msgs", + "ros_comm_msgs", + "ros_comm", + "ros_ros", + "ros_common_msgs", + "ros_actionlib", + "ros_dynamic_reconfigure", + "ros_geometry2", + "orocos_kdl", + "urdfdom_headers", + "tinyxml", + "urdfdom", +) + +bazel_dep(name = "rules_boost") +archive_override( + module_name = "rules_boost", + urls = "https://github.com/nelhage/rules_boost/archive/42d8155d8f20a1aee8ee20b7903a495bdfb9befd.zip", + strip_prefix = "rules_boost-42d8155d8f20a1aee8ee20b7903a495bdfb9befd", + integrity = "sha256-I1iTdF3qckTmDRab+0yjA37Iya9AOGvEGJVoPtfpADM=", +) + +non_module_boost_repositories = use_extension("@rules_boost//:boost/repositories.bzl", "non_module_dependencies") +use_repo( + non_module_boost_repositories, + "boost", +) + +python = use_extension("@rules_python//python/extensions:python.bzl", "python") +python.toolchain( + is_default = True, + python_version = "3.10", +) +use_repo(python, "python_3_10", "python_versions") + +pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") +pip.parse( + hub_name = "rules_ros_pip_deps", + python_version = "3.10", + requirements_lock = "@com_github_mvukov_rules_ros//:requirements_lock.txt", +) +use_repo(pip, "rules_ros_pip_deps") + +internal_deps = use_extension("@rules_python//python/private/bzlmod:internal_deps.bzl", "internal_deps") +use_repo( + internal_deps, + "rules_python_internal", +) diff --git a/WORKSPACE b/WORKSPACE deleted file mode 100644 index 4672d59..0000000 --- a/WORKSPACE +++ /dev/null @@ -1,34 +0,0 @@ -workspace(name = "com_github_mvukov_rules_ros") - -load("//repositories:repositories.bzl", "ros_repositories") - -ros_repositories() - -load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains") - -py_repositories() - -python_register_toolchains( - name = "rules_ros_python", - python_version = "3.10", -) - -load("@rules_python//python:pip.bzl", "pip_parse") -load("@rules_ros_python//:defs.bzl", python_interpreter_target = "interpreter") - -pip_parse( - name = "rules_ros_pip_deps", - python_interpreter_target = python_interpreter_target, - requirements_lock = "@com_github_mvukov_rules_ros//:requirements_lock.txt", -) - -load( - "@rules_ros_pip_deps//:requirements.bzl", - install_rules_ros_pip_deps = "install_deps", -) - -install_rules_ros_pip_deps() - -load("//repositories:deps.bzl", "ros_deps") - -ros_deps() diff --git a/extensions/BUILD.bazel b/extensions/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/extensions/ros_repositories.bzl b/extensions/ros_repositories.bzl new file mode 100644 index 0000000..81638be --- /dev/null +++ b/extensions/ros_repositories.bzl @@ -0,0 +1,8 @@ +load("//repositories:repositories.bzl", "ros_repositories") + +def _non_module_dependencies_impl(_ctx): + ros_repositories() + +non_module_dependencies = module_extension( + implementation = _non_module_dependencies_impl, +) diff --git a/repositories/bzip2.BUILD.bazel b/repositories/bzip2.BUILD.bazel deleted file mode 100644 index e1fcfb7..0000000 --- a/repositories/bzip2.BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -""" Builds bzip2. -""" - -load("@rules_foreign_cc//foreign_cc:defs.bzl", "make") - -filegroup( - name = "all_srcs", - srcs = glob(["**"]), -) - -make( - name = "bzip2", - lib_source = "//:all_srcs", - out_static_libs = ["libbz2.a"], - visibility = ["//visibility:public"], -) diff --git a/repositories/deps.bzl b/repositories/deps.bzl deleted file mode 100644 index 366a913..0000000 --- a/repositories/deps.bzl +++ /dev/null @@ -1,15 +0,0 @@ -"""Configures repo dependencies. -""" - -load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") -load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps") -load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies") - -def ros_deps(): - """ Sets up ROS deps. - """ - bazel_skylib_workspace() - - boost_deps() - - rules_foreign_cc_dependencies() diff --git a/repositories/eigen.BUILD.bazel b/repositories/eigen.BUILD.bazel deleted file mode 100644 index f53c76f..0000000 --- a/repositories/eigen.BUILD.bazel +++ /dev/null @@ -1,57 +0,0 @@ -""" Builds eigen. - -Taken from https://raw.githubusercontent.com/tensorflow/tensorflow/master/third_party/eigen.BUILD -""" - -load("@rules_cc//cc:defs.bzl", "cc_library") - -licenses([ - # Note: Eigen is an MPL2 library that includes GPL v3 and LGPL v2.1+ code. - # We've taken special care to not reference any restricted code. - "reciprocal", # MPL2 - "notice", # Portions BSD -]) - -exports_files(["COPYING.MPL2"]) - -EIGEN_FILES = [ - "Eigen/**", - "unsupported/Eigen/CXX11/**", - "unsupported/Eigen/FFT", - "unsupported/Eigen/KroneckerProduct", - "unsupported/Eigen/src/FFT/**", - "unsupported/Eigen/src/KroneckerProduct/**", - "unsupported/Eigen/MatrixFunctions", - "unsupported/Eigen/SpecialFunctions", - "unsupported/Eigen/src/MatrixFunctions/**", - "unsupported/Eigen/src/SpecialFunctions/**", -] - -# Files known to be under MPL2 license. -EIGEN_MPL2_HEADER_FILES = glob( - EIGEN_FILES, - exclude = [ - # Guarantees that any non-MPL2 file added to the list above will fail to - # compile. - "Eigen/src/Core/util/NonMPL2.h", - "Eigen/**/CMakeLists.txt", - ], -) - -cc_library( - name = "eigen", - hdrs = EIGEN_MPL2_HEADER_FILES, - defines = [ - # This define (mostly) guarantees we don't link any problematic - # code. We use it, but we do not rely on it, as evidenced above. - "EIGEN_MPL2_ONLY", - ], - includes = ["."], - visibility = ["//visibility:public"], -) - -filegroup( - name = "eigen_header_files", - srcs = EIGEN_MPL2_HEADER_FILES, - visibility = ["//visibility:public"], -) diff --git a/repositories/lz4.BUILD.bazel b/repositories/lz4.BUILD.bazel deleted file mode 100644 index 0e5adf3..0000000 --- a/repositories/lz4.BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -""" Builds lz4. -""" - -load("@rules_foreign_cc//foreign_cc:defs.bzl", "make") - -filegroup( - name = "all_srcs", - srcs = glob(["**"]), -) - -make( - name = "lz4", - lib_source = "//:all_srcs", - out_static_libs = ["liblz4.a"], - visibility = ["//visibility:public"], -) diff --git a/repositories/repositories.bzl b/repositories/repositories.bzl index a52b604..b668cb3 100644 --- a/repositories/repositories.bzl +++ b/repositories/repositories.bzl @@ -7,60 +7,6 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") def ros_repositories(): """Imports external/third-party repositories. """ - maybe( - http_archive, - name = "rules_python", - sha256 = "4912ced70dc1a2a8e4b86cec233b192ca053e82bc72d877b98e126156e8f228d", - strip_prefix = "rules_python-0.32.2", - url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.32.2.tar.gz", - ) - - maybe( - http_archive, - name = "bazel_skylib", - urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz"], - sha256 = "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", - ) - - maybe( - http_archive, - name = "com_github_gflags_gflags", - sha256 = "34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf", - strip_prefix = "gflags-2.2.2", - urls = ["https://github.com/gflags/gflags/archive/v2.2.2.tar.gz"], - ) - - maybe( - http_archive, - name = "com_github_google_glog", - sha256 = "62efeb57ff70db9ea2129a16d0f908941e355d09d6d83c9f7b18557c0a7ab59e", - strip_prefix = "glog-d516278b1cd33cd148e8989aec488b6049a4ca0b", - urls = ["https://github.com/google/glog/archive/d516278b1cd33cd148e8989aec488b6049a4ca0b.zip"], - ) - - maybe( - http_archive, - name = "googletest", - sha256 = "8ad598c73ad796e0d8280b082cebd82a630d73e73cd3c70057938a6501bba5d7", - strip_prefix = "googletest-1.14.0", - url = "https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz", - ) - - maybe( - http_archive, - name = "rules_foreign_cc", - sha256 = "476303bd0f1b04cc311fc258f1708a5f6ef82d3091e53fd1977fa20383425a6a", - strip_prefix = "rules_foreign_cc-0.10.1", - url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.10.1.tar.gz", - ) - - maybe( - http_archive, - name = "com_github_nelhage_rules_boost", - sha256 = "90028713d869769d49a9f26a57e89e9f0e83cc0edc1208727aecf0e3ee094967", - strip_prefix = "rules_boost-f621ad7bec2abf5a597ed1271fd823d2761943b2", - urls = ["https://github.com/nelhage/rules_boost/archive/f621ad7bec2abf5a597ed1271fd823d2761943b2.zip"], - ) maybe( http_archive, @@ -134,24 +80,6 @@ def ros_repositories(): urls = ["https://github.com/ros/ros_comm_msgs/archive/1.11.3.tar.gz"], ) - maybe( - http_archive, - name = "lz4", - build_file = "@com_github_mvukov_rules_ros//repositories:lz4.BUILD.bazel", - sha256 = "030644df4611007ff7dc962d981f390361e6c97a34e5cbc393ddfbe019ffe2c1", - strip_prefix = "lz4-1.9.3", - urls = ["https://github.com/lz4/lz4/archive/v1.9.3.tar.gz"], - ) - - maybe( - http_archive, - name = "bzip2", - build_file = "@com_github_mvukov_rules_ros//repositories:bzip2.BUILD.bazel", - sha256 = "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269", - strip_prefix = "bzip2-1.0.8", - urls = ["https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz"], - ) - # Branched off ros_comm 1.15.9. Changes are in branch feature/rules_ros. maybe( http_archive, @@ -200,15 +128,6 @@ def ros_repositories(): ############################################################################ - maybe( - http_archive, - name = "eigen", - build_file = "@com_github_mvukov_rules_ros2//repositories:eigen.BUILD.bazel", - sha256 = "8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72", - strip_prefix = "eigen-3.4.0", - urls = ["https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz"], - ) - maybe( http_archive, name = "ros_geometry2", diff --git a/repositories/ros_comm.BUILD.bazel b/repositories/ros_comm.BUILD.bazel index 6bd1c99..3078f2c 100644 --- a/repositories/ros_comm.BUILD.bazel +++ b/repositories/ros_comm.BUILD.bazel @@ -255,7 +255,7 @@ cc_ros_library( ":roslz4", "@boost//:filesystem", "@boost//:format", - "@bzip2", + "@bzip2//:bz2", "@console_bridge", "@roscpp_core//:roscpp_serialization", "@roscpp_core//:roscpp_traits", diff --git a/repositories/rosconsole.BUILD.bazel b/repositories/rosconsole.BUILD.bazel index fcc24bd..3c706e8 100644 --- a/repositories/rosconsole.BUILD.bazel +++ b/repositories/rosconsole.BUILD.bazel @@ -17,7 +17,7 @@ cc_ros_library( "@boost//:regex", "@boost//:system", "@boost//:thread", - "@com_github_google_glog//:glog", + "@glog", "@roscpp_core//:cpp_common", "@roscpp_core//:rostime", ], From ad7abddba3dc510964964293d8e071914b107ed7 Mon Sep 17 00:00:00 2001 From: Milan Vukov Date: Sat, 6 Jul 2024 10:51:50 +0200 Subject: [PATCH 2/3] Run pre-commit --- MODULE.bazel | 34 +++++++++++++++------------ third_party/ros/roslaunch/BUILD.bazel | 10 ++++---- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index f24599a..54c76c7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,4 +1,7 @@ -module(name = "rules_ros", repo_name = "com_github_mvukov_rules_ros") +module( + name = "rules_ros", + repo_name = "com_github_mvukov_rules_ros", +) bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "bzip2", version = "1.0.8.bcr.1") @@ -10,37 +13,38 @@ bazel_dep(name = "lz4", version = "1.9.4") bazel_dep(name = "platforms", version = "0.0.10") bazel_dep(name = "rules_cc", version = "0.0.9") bazel_dep(name = "rules_foreign_cc", version = "0.10.1") -bazel_dep(name = "rules_python", version = "0.33.1", dev_dependency=True) + +bazel_dep(name = "rules_python", version = "0.33.1", dev_dependency = True) non_module_ros_repositories = use_extension("//extensions:ros_repositories.bzl", "non_module_dependencies") use_repo( non_module_ros_repositories, "console_bridge", - "roscpp_core", - "rosconsole", - "ros_genmsg", - "ros_gencpp", - "ros_genpy", - "ros_std_msgs", - "ros_comm_msgs", + "orocos_kdl", + "ros_actionlib", "ros_comm", - "ros_ros", + "ros_comm_msgs", "ros_common_msgs", - "ros_actionlib", "ros_dynamic_reconfigure", + "ros_gencpp", + "ros_genmsg", + "ros_genpy", "ros_geometry2", - "orocos_kdl", - "urdfdom_headers", + "ros_ros", + "ros_std_msgs", + "rosconsole", + "roscpp_core", "tinyxml", "urdfdom", + "urdfdom_headers", ) bazel_dep(name = "rules_boost") archive_override( module_name = "rules_boost", - urls = "https://github.com/nelhage/rules_boost/archive/42d8155d8f20a1aee8ee20b7903a495bdfb9befd.zip", - strip_prefix = "rules_boost-42d8155d8f20a1aee8ee20b7903a495bdfb9befd", integrity = "sha256-I1iTdF3qckTmDRab+0yjA37Iya9AOGvEGJVoPtfpADM=", + strip_prefix = "rules_boost-42d8155d8f20a1aee8ee20b7903a495bdfb9befd", + urls = "https://github.com/nelhage/rules_boost/archive/42d8155d8f20a1aee8ee20b7903a495bdfb9befd.zip", ) non_module_boost_repositories = use_extension("@rules_boost//:boost/repositories.bzl", "non_module_dependencies") diff --git a/third_party/ros/roslaunch/BUILD.bazel b/third_party/ros/roslaunch/BUILD.bazel index 7a96701..09cdf2d 100644 --- a/third_party/ros/roslaunch/BUILD.bazel +++ b/third_party/ros/roslaunch/BUILD.bazel @@ -4,6 +4,10 @@ load("//build_tools:pylint.bzl", "pylint") genrule( name = "deps", + srcs = [ + "roscore.xml", + "@ros_comm//:rosmaster", + ], outs = ["deps.py"], cmd = """ ROSMASTER=($(rootpaths @ros_comm//:rosmaster)) @@ -11,14 +15,11 @@ cat < $@ ROSMASTER_PATH = '$${ROSMASTER}' ROSCORE_XML_PATH = '$(rootpath roscore.xml)' EOF""", - srcs = [ - "roscore.xml", - "@ros_comm//:rosmaster", - ], ) genrule( name = "roscore_xml", + srcs = ["@ros_comm//:rosout"], outs = ["roscore.xml"], cmd = """ ROS_COMM=$(rootpaths @ros_comm//:rosout) @@ -29,7 +30,6 @@ cat < $@ EOF""", - srcs = ["@ros_comm//:rosout"], ) py_library( From f0ffbaa7f1c958b5d8a78e82ad58ed4c3b57f882 Mon Sep 17 00:00:00 2001 From: Milan Vukov Date: Sat, 6 Jul 2024 10:53:46 +0200 Subject: [PATCH 3/3] rm rules_python internal deps --- MODULE.bazel | 6 ------ 1 file changed, 6 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 54c76c7..e23a5c9 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -67,9 +67,3 @@ pip.parse( requirements_lock = "@com_github_mvukov_rules_ros//:requirements_lock.txt", ) use_repo(pip, "rules_ros_pip_deps") - -internal_deps = use_extension("@rules_python//python/private/bzlmod:internal_deps.bzl", "internal_deps") -use_repo( - internal_deps, - "rules_python_internal", -)