diff --git a/tools/workspace/clarabel_cpp_internal/BUILD.bazel b/tools/workspace/clarabel_cpp_internal/BUILD.bazel index 7d28d5547faf..485d845605d9 100644 --- a/tools/workspace/clarabel_cpp_internal/BUILD.bazel +++ b/tools/workspace/clarabel_cpp_internal/BUILD.bazel @@ -2,10 +2,10 @@ load("//tools/lint:lint.bzl", "add_lint_tests") load("//tools/skylark:drake_cc.bzl", "drake_cc_test") drake_cc_test( - name = "clarabel_example_lp", + name = "clarabel_example_sdp", srcs = select({ "//tools:with_clarabel": [ - "test/clarabel_example_lp.cc", + "test/clarabel_example_sdp.cc", ], "//conditions:default": [ "test/noop.cc", @@ -21,7 +21,7 @@ drake_cc_test( add_lint_tests( cpplint_extra_srcs = [ - "test/clarabel_example_lp.cc", + "test/clarabel_example_sdp.cc", "test/noop.cc", ], ) diff --git a/tools/workspace/clarabel_cpp_internal/package.BUILD.bazel b/tools/workspace/clarabel_cpp_internal/package.BUILD.bazel index f5de316069c7..7319116e6b7d 100644 --- a/tools/workspace/clarabel_cpp_internal/package.BUILD.bazel +++ b/tools/workspace/clarabel_cpp_internal/package.BUILD.bazel @@ -24,6 +24,7 @@ rust_static_library( name = "clarabel_cpp_rust_wrapper", edition = "2021", srcs = glob(["rust_wrapper/src/**/*.rs"], allow_empty = False), + crate_features = ["sdp"], deps = all_crate_deps(), ) @@ -31,10 +32,15 @@ rust_static_library( cc_library( name = "clarabel_cpp", linkstatic = True, + defines = [ + "FEATURE_SDP", + ], deps = [ ":hdrs", ":clarabel_cpp_rust_wrapper", + "@blas", "@eigen", + "@lapack", ], visibility = ["//visibility:public"], ) diff --git a/tools/workspace/clarabel_cpp_internal/patches/sdp.patch b/tools/workspace/clarabel_cpp_internal/patches/sdp.patch new file mode 100644 index 000000000000..c20cb9ec9c32 --- /dev/null +++ b/tools/workspace/clarabel_cpp_internal/patches/sdp.patch @@ -0,0 +1,16 @@ +[Clarabel.cpp] Enable the SDP feature by default + +--- rust_wrapper/Cargo.toml ++++ rust_wrapper/Cargo.toml +@@ -14,9 +14,10 @@ opt-level = 3 + lto = true + codegen-units = 1 + + [features] ++default = ["sdp"] + # Define features for SDP support in Clarabel.rs +-sdp = [] ++sdp = ["clarabel/sdp"] + sdp-accelerate = ["sdp", "clarabel/sdp", "clarabel/sdp-accelerate"] + sdp-netlib = ["sdp", "clarabel/sdp", "clarabel/sdp-netlib"] + sdp-openblas = ["sdp", "clarabel/sdp", "clarabel/sdp-openblas"] diff --git a/tools/workspace/clarabel_cpp_internal/repository.bzl b/tools/workspace/clarabel_cpp_internal/repository.bzl index 8ac70108dcfa..1680042a1296 100644 --- a/tools/workspace/clarabel_cpp_internal/repository.bzl +++ b/tools/workspace/clarabel_cpp_internal/repository.bzl @@ -11,6 +11,7 @@ def clarabel_cpp_internal_repository( build_file = ":package.BUILD.bazel", patches = [ ":patches/git_submodule.patch", + ":patches/sdp.patch", ], mirrors = mirrors, ) diff --git a/tools/workspace/clarabel_cpp_internal/test/clarabel_example_lp.cc b/tools/workspace/clarabel_cpp_internal/test/clarabel_example_sdp.cc similarity index 57% rename from tools/workspace/clarabel_cpp_internal/test/clarabel_example_lp.cc rename to tools/workspace/clarabel_cpp_internal/test/clarabel_example_sdp.cc index 2a741a11d864..0ae104017cf5 100644 --- a/tools/workspace/clarabel_cpp_internal/test/clarabel_example_lp.cc +++ b/tools/workspace/clarabel_cpp_internal/test/clarabel_example_sdp.cc @@ -1,9 +1,8 @@ // Copied from (Apache-2.0): -// https://github.com/oxfordcontrol/Clarabel.cpp/blob/main/examples/cpp/example_lp.cpp +// https://github.com/oxfordcontrol/Clarabel.cpp/blob/main/examples/cpp/example_sdp.cpp // https://github.com/oxfordcontrol/Clarabel.cpp/blob/main/examples/cpp/utils.h -#include -#include +#include #include #include @@ -34,38 +33,47 @@ void print_solution(const clarabel::DefaultSolution& solution) { } // namespace -int main() { - Eigen::MatrixXd P_dense = Eigen::MatrixXd::Zero(2, 2); - Eigen::SparseMatrix P = P_dense.sparseView(); - P.makeCompressed(); +int main(void) { + // SDP Example + int n = 3; + int nvec = (n * (n + 1)) >> 1; - Eigen::Vector q = {1.0, -1.0}; + // 6 x 6 zero matrix + Eigen::SparseMatrix P = + Eigen::MatrixXd::Zero(nvec, nvec).sparseView(); + P.makeCompressed(); - // a 2-d box constraint, separated into 4 inequalities. - // A = [I; -I] - Eigen::MatrixXd A_dense(4, 2); - A_dense << 1., 0., 0., 1., -1., 0., 0., -1.; + Eigen::Vector c{1, 0, 1, 0, 0, 1}; + + Eigen::MatrixXd A_dense(7, 6); + const double s = M_SQRT2; + // clang-format off + A_dense << + -1, 0, 0, 0, 0, 0, + 0, -s, 0, 0, 0, 0, + 0, 0, -1, 0, 0, 0, + 0, 0, 0, -s, 0, 0, + 0, 0, 0, 0, -s, 0, + 0, 0, 0, 0, 0, -1, + 1, 4, 3, 8, 10, 6; + // clang-format on Eigen::SparseMatrix A = A_dense.sparseView(); A.makeCompressed(); - Eigen::Vector b = {1.0, 1.0, 1.0, 1.0}; + Eigen::Vector b = {0, 0, 0, 0, 0, 0, 1}; std::vector> cones{ - clarabel::NonnegativeConeT(4), - // {.tag = SupportedConeT::Tag::NonnegativeConeT, - // .nonnegative_cone_t = {._0 = 4 }} + clarabel::PSDTriangleConeT(n), + clarabel::ZeroConeT(1), }; // Settings clarabel::DefaultSettings settings = - clarabel::DefaultSettingsBuilder::default_settings() - .equilibrate_enable(true) - .equilibrate_max_iter(50) - .build(); + clarabel::DefaultSettings::default_settings(); // Build solver - clarabel::DefaultSolver solver(P, q, A, b, cones, settings); + clarabel::DefaultSolver solver(P, c, A, b, cones, settings); // Solve solver.solve(); diff --git a/tools/workspace/crate_universe/BUILD.bazel b/tools/workspace/crate_universe/BUILD.bazel index d6c048655ade..c8e8ee42e447 100644 --- a/tools/workspace/crate_universe/BUILD.bazel +++ b/tools/workspace/crate_universe/BUILD.bazel @@ -1,7 +1,7 @@ load("//tools/install:install.bzl", "install") load("//tools/workspace/crate_universe:lock/archives.bzl", "ARCHIVES") load("//tools/lint:lint.bzl", "add_lint_tests") -load("@rules_rust//crate_universe:defs.bzl", "crates_vendor") +load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_vendor") exports_files(glob(["lock/**"])) @@ -9,6 +9,13 @@ exports_files(glob(["lock/**"])) # dependencies. See README.md for instructions on how to run `upgrade.sh`. crates_vendor( name = "crate", + annotations = { + "clarabel": [crate.annotation( + patches = [ + "@drake//tools/workspace/crate_universe:patches/clarabel_blas.patch", # noqa + ], + )], + }, cargo_lockfile = ":lock/Cargo.toml.lock", manifests = [ "@clarabel_cpp_internal//:rust_wrapper/Cargo.toml", diff --git a/tools/workspace/crate_universe/lock/archives.bzl b/tools/workspace/crate_universe/lock/archives.bzl index 834e00c68526..f4d1224bff86 100644 --- a/tools/workspace/crate_universe/lock/archives.bzl +++ b/tools/workspace/crate_universe/lock/archives.bzl @@ -16,6 +16,22 @@ ARCHIVES = [ strip_prefix = "autocfg-1.1.0", build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.autocfg-1.1.0.bazel"), ), + dict( + name = "crate__blas-0.22.0", + sha256 = "ae980f75c3215bfe8203c349b28149b0f4130a262e072913ccb55f877cd239dc", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/blas/0.22.0/download"], + strip_prefix = "blas-0.22.0", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.blas-0.22.0.bazel"), + ), + dict( + name = "crate__blas-sys-0.7.1", + sha256 = "13b1b279ceb25d7c4faaea95a5f7addbe7d8c34f9462044bd8e630cebcfc2440", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/blas-sys/0.7.1/download"], + strip_prefix = "blas-sys-0.7.1", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.blas-sys-0.7.1.bazel"), + ), dict( name = "crate__cfg-if-1.0.0", sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd", @@ -26,6 +42,9 @@ ARCHIVES = [ ), dict( name = "crate__clarabel-0.6.0", + patches = [ + "@drake//tools/workspace/crate_universe:patches/clarabel_blas.patch", + ], sha256 = "fb77b79847293795eb71eb995ea2222af9c67c6f13c8734bd56b02b8415164b6", type = "tar.gz", urls = ["https://crates.io/api/v1/crates/clarabel/0.6.0/download"], @@ -120,6 +139,22 @@ ARCHIVES = [ strip_prefix = "itertools-0.11.0", build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.itertools-0.11.0.bazel"), ), + dict( + name = "crate__lapack-0.19.0", + sha256 = "ad676a6b4df7e76a9fd80a0c50c619a3948d6105b62a0ab135f064d99c51d207", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/lapack/0.19.0/download"], + strip_prefix = "lapack-0.19.0", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.lapack-0.19.0.bazel"), + ), + dict( + name = "crate__lapack-sys-0.14.0", + sha256 = "447f56c85fb410a7a3d36701b2153c1018b1d2b908c5fbaf01c1b04fac33bcbe", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/lapack-sys/0.14.0/download"], + strip_prefix = "lapack-sys-0.14.0", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.lapack-sys-0.14.0.bazel"), + ), dict( name = "crate__lazy_static-1.4.0", sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646", @@ -128,6 +163,22 @@ ARCHIVES = [ strip_prefix = "lazy_static-1.4.0", build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.lazy_static-1.4.0.bazel"), ), + dict( + name = "crate__libc-0.2.149", + sha256 = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/libc/0.2.149/download"], + strip_prefix = "libc-0.2.149", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.libc-0.2.149.bazel"), + ), + dict( + name = "crate__num-complex-0.4.4", + sha256 = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214", + type = "tar.gz", + urls = ["https://crates.io/api/v1/crates/num-complex/0.4.4/download"], + strip_prefix = "num-complex-0.4.4", + build_file = Label("@drake//tools/workspace/crate_universe/lock/details:BUILD.num-complex-0.4.4.bazel"), + ), dict( name = "crate__num-traits-0.2.17", sha256 = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c", diff --git a/tools/workspace/crate_universe/lock/details/BUILD.blas-0.22.0.bazel b/tools/workspace/crate_universe/lock/details/BUILD.blas-0.22.0.bazel new file mode 100644 index 000000000000..56e924c8ddf1 --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.blas-0.22.0.bazel @@ -0,0 +1,88 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # Apache-2.0/MIT +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "blas", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2015", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=blas", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.22.0", + deps = [ + "@crate__blas-sys-0.7.1//:blas_sys", + "@crate__libc-0.2.149//:libc", + "@crate__num-complex-0.4.4//:num_complex", + ], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.blas-sys-0.7.1.bazel b/tools/workspace/crate_universe/lock/details/BUILD.blas-sys-0.7.1.bazel new file mode 100644 index 000000000000..3eda3cbb566c --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.blas-sys-0.7.1.bazel @@ -0,0 +1,86 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # Apache-2.0/MIT +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "blas_sys", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2015", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=blas-sys", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.7.1", + deps = [ + "@crate__libc-0.2.149//:libc", + ], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.clarabel-0.6.0.bazel b/tools/workspace/crate_universe/lock/details/BUILD.clarabel-0.6.0.bazel index 3f4d4380f15d..3c88cbd4c9fe 100644 --- a/tools/workspace/crate_universe/lock/details/BUILD.clarabel-0.6.0.bazel +++ b/tools/workspace/crate_universe/lock/details/BUILD.clarabel-0.6.0.bazel @@ -35,6 +35,11 @@ rust_library( "WORKSPACE.bazel", ], ), + crate_features = [ + "blas", + "lapack", + "sdp", + ], crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ @@ -85,9 +90,11 @@ rust_library( version = "0.6.0", deps = [ "@crate__amd-0.2.2//:amd", + "@crate__blas-0.22.0//:blas", "@crate__cfg-if-1.0.0//:cfg_if", "@crate__derive_builder-0.11.2//:derive_builder", "@crate__itertools-0.11.0//:itertools", + "@crate__lapack-0.19.0//:lapack", "@crate__lazy_static-1.4.0//:lazy_static", "@crate__num-traits-0.2.17//:num_traits", "@crate__thiserror-1.0.50//:thiserror", diff --git a/tools/workspace/crate_universe/lock/details/BUILD.lapack-0.19.0.bazel b/tools/workspace/crate_universe/lock/details/BUILD.lapack-0.19.0.bazel new file mode 100644 index 000000000000..a7b1fbd756de --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.lapack-0.19.0.bazel @@ -0,0 +1,88 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # Apache-2.0/MIT +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "lapack", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2015", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=lapack", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.19.0", + deps = [ + "@crate__lapack-sys-0.14.0//:lapack_sys", + "@crate__libc-0.2.149//:libc", + "@crate__num-complex-0.4.4//:num_complex", + ], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.lapack-sys-0.14.0.bazel b/tools/workspace/crate_universe/lock/details/BUILD.lapack-sys-0.14.0.bazel new file mode 100644 index 000000000000..f539b8ff1a3d --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.lapack-sys-0.14.0.bazel @@ -0,0 +1,86 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # Apache-2.0/MIT +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "lapack_sys", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2015", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=lapack-sys", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.14.0", + deps = [ + "@crate__libc-0.2.149//:libc", + ], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.libc-0.2.149.bazel b/tools/workspace/crate_universe/lock/details/BUILD.libc-0.2.149.bazel new file mode 100644 index 000000000000..b8db5fc34b58 --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.libc-0.2.149.bazel @@ -0,0 +1,132 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # MIT OR Apache-2.0 +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "libc", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "default", + "std", + ], + crate_root = "src/lib.rs", + edition = "2015", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=libc", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.2.149", + deps = [ + "@crate__libc-0.2.149//:build_script_build", + ], +) + +cargo_build_script( + name = "libc_build_script", + srcs = glob(["**/*.rs"]), + crate_features = [ + "default", + "std", + ], + crate_name = "build_script_build", + crate_root = "build.rs", + data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + edition = "2015", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=libc", + "manual", + "noclippy", + "norustfmt", + ], + version = "0.2.149", + visibility = ["//visibility:private"], +) + +alias( + name = "build_script_build", + actual = "libc_build_script", + tags = ["manual"], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.num-complex-0.4.4.bazel b/tools/workspace/crate_universe/lock/details/BUILD.num-complex-0.4.4.bazel new file mode 100644 index 000000000000..d91690053e02 --- /dev/null +++ b/tools/workspace/crate_universe/lock/details/BUILD.num-complex-0.4.4.bazel @@ -0,0 +1,86 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# tools/workspace/crate_universe/upgrade.sh +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +# licenses([ +# "TODO", # MIT OR Apache-2.0 +# ]) +filegroup( + name = "license_glob", + srcs = glob( + ["LICENSE*"], + allow_empty = False, + ), +) + +rust_library( + name = "num_complex", + srcs = glob(["**/*.rs"]), + compile_data = glob( + include = ["**"], + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2018", + rustc_flags = ["--cap-lints=allow"], + tags = [ + "cargo-bazel", + "crate-name=num-complex", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-fuchsia": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasi": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-fuchsia": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.4.4", + deps = [ + "@crate__num-traits-0.2.17//:num_traits", + ], +) diff --git a/tools/workspace/crate_universe/lock/details/BUILD.num-traits-0.2.17.bazel b/tools/workspace/crate_universe/lock/details/BUILD.num-traits-0.2.17.bazel index 8c7c644d2843..d9690643dccd 100644 --- a/tools/workspace/crate_universe/lock/details/BUILD.num-traits-0.2.17.bazel +++ b/tools/workspace/crate_universe/lock/details/BUILD.num-traits-0.2.17.bazel @@ -38,6 +38,7 @@ rust_library( ), crate_features = [ "default", + "i128", "std", ], crate_root = "src/lib.rs", @@ -95,6 +96,7 @@ cargo_build_script( srcs = glob(["**/*.rs"]), crate_features = [ "default", + "i128", "std", ], crate_name = "build_script_build", diff --git a/tools/workspace/crate_universe/patches/clarabel_blas.patch b/tools/workspace/crate_universe/patches/clarabel_blas.patch new file mode 100644 index 000000000000..da78e3846f47 --- /dev/null +++ b/tools/workspace/crate_universe/patches/clarabel_blas.patch @@ -0,0 +1,25 @@ +[clarabel] Opt-out of Rust linking for BLAS/LAPACK + +The blas_src and lapack_src crates are the Rust ecosystem's solution +for inversion of control when linking the BLAS and LAPACK libraries. +Library code refers to those crates and then the top-level Cargo file +of the ultimate application binary turns on a feature flag of those +crates that adds the right lines to the linker (and can also rebuild +BLAS and LAPACK from source, if necessary). + +However, since Drake's ultimate "application" is to ship our own +shared library, we must not allow Rust to govern which libraries to +link. Thus, we need to delete the lines that perform the linking. + +--- src/algebra/dense/blas.rs ++++ src/algebra/dense/blas.rs +@@ -8,8 +8,6 @@ cfg_if::cfg_if! { + } + else { +- // standard imports via blas-lapack-rs crates +- extern crate blas_src; +- extern crate lapack_src; ++ // Use whatever shared libraries Drake provided. + use lapack::*; + use blas::*; + } diff --git a/tools/workspace/crate_universe/repository.bzl b/tools/workspace/crate_universe/repository.bzl index b2ea22efa634..ad44075da286 100644 --- a/tools/workspace/crate_universe/repository.bzl +++ b/tools/workspace/crate_universe/repository.bzl @@ -1,3 +1,4 @@ +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "patch") load("//tools/workspace/crate_universe:lock/archives.bzl", "ARCHIVES") load("//tools/workspace:metadata.bzl", "generate_repository_metadata") @@ -47,6 +48,8 @@ def _create_http_archive_impl(repo_ctx): stripPrefix = strip_prefix, type = type, ) + if repo_ctx.attr.patches: + patch(repo_ctx) repo_ctx.symlink(repo_ctx.attr.build_file, "BUILD.bazel") generate_repository_metadata( repo_ctx, @@ -64,6 +67,9 @@ crate_http_archive = repository_rule( "mirrors": attr.string_list_dict( mandatory = True, ), + "patches": attr.label_list(), + "patch_tool": attr.string(default = "patch"), + "patch_args": attr.string_list(default = ["-p0"]), "sha256": attr.string( mandatory = True, ),