diff --git a/.bazelrc b/.bazelrc index 753c0d0b82..7ad5041736 100644 --- a/.bazelrc +++ b/.bazelrc @@ -3,6 +3,8 @@ try-import %workspace%/user.bazelrc common --noenable_bzlmod +build --incompatible_disallow_empty_glob=1 # Bazel 8 prep + build --java_language_version=17 build --java_runtime_version=roboriojdk_17 build --tool_java_language_version=17 diff --git a/BUILD.bazel b/BUILD.bazel index 3c3b5bde20..1256c81299 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -16,7 +16,8 @@ compile_pip_requirements( extra_args = ["--allow-unsafe"], requirements_in = "requirements.txt", requirements_txt = "requirements_lock.txt", - tags = ["no-roborio"], + # compile_pip_requirements does not respect target_compatible_with for some of the targets it generates under the hood + tags = ["no-systemcore"], ) alias( diff --git a/WORKSPACE b/WORKSPACE index b8848cde8f..fd05c435f9 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -123,12 +123,17 @@ maven_artifacts = [ maven_install( name = "maven", artifacts = maven_artifacts, + maven_install_json = "//:maven_install.json", repositories = [ "https://repo1.maven.org/maven2", "https://frcmaven.wpi.edu/artifactory/release/", ], ) +load("@maven//:defs.bzl", "pinned_maven_install") + +pinned_maven_install() + # Setup aspect lib http_archive( name = "aspect_bazel_lib", @@ -208,8 +213,8 @@ setup_legacy_bzlmodrio_ni_cpp_dependencies() http_archive( name = "bzlmodrio-opencv", - sha256 = "ba3f4910ce9cc0e08abff732aeb5835b1bcfd864ca5296edeadcf2935f7e81b9", - url = "https://github.com/wpilibsuite/bzlmodRio-opencv/releases/download/2025.4.10.0-3.bcr1/bzlmodRio-opencv-2025.4.10.0-3.bcr1.tar.gz", + sha256 = "6e8544fae07ed5b4fedc146f6ad083d0d8947e3efb5332a20abc46601a52a1b5", + url = "https://github.com/wpilibsuite/bzlmodRio-opencv/releases/download/2025.4.10.0-3.bcr2/bzlmodRio-opencv-2025.4.10.0-3.bcr2.tar.gz", ) load("@bzlmodrio-opencv//:maven_cpp_deps.bzl", "setup_legacy_bzlmodrio_opencv_cpp_dependencies") @@ -220,6 +225,17 @@ load("@bzlmodrio-opencv//:maven_java_deps.bzl", "setup_legacy_bzlmodrio_opencv_j setup_legacy_bzlmodrio_opencv_java_dependencies() +http_archive( + name = "bzlmodrio-libssh", + sha256 = "65caef82554617403a16c79e8bcac6553d40eca3e23197e63275bba22db7d5b5", + strip_prefix = "bzlmodRio-libssh-8405fbd5eb4e42b495f08f6ccf6fbbe5ced28bb7", + urls = ["https://github.com/wpilibsuite/bzlmodRio-libssh/archive/8405fbd5eb4e42b495f08f6ccf6fbbe5ced28bb7.tar.gz"], +) + +load("@bzlmodrio-libssh//:maven_cpp_deps.bzl", "setup_legacy_bzlmodrio_libssh_cpp_dependencies") + +setup_legacy_bzlmodrio_libssh_cpp_dependencies() + http_archive( name = "build_bazel_apple_support", sha256 = "c4bb2b7367c484382300aee75be598b92f847896fb31bbd22f3a2346adf66a80", diff --git a/apriltag/BUILD.bazel b/apriltag/BUILD.bazel index 3544d27ef0..dce7db88e0 100644 --- a/apriltag/BUILD.bazel +++ b/apriltag/BUILD.bazel @@ -1,6 +1,7 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") @@ -33,7 +34,6 @@ cc_library( }), includes = ["src/main/native/thirdparty/apriltag/include/common"], strip_include_prefix = "src/main/native/thirdparty/apriltag/include", - visibility = ["//visibility:public"], ) generate_resources( @@ -41,10 +41,9 @@ generate_resources( namespace = "frc", prefix = "APRILTAG", resource_files = glob(["src/main/native/resources/**"]), - visibility = ["//visibility:public"], ) -cc_library( +wpilib_cc_library( name = "apriltag.static", srcs = [":generate-resources"] + glob( ["src/main/native/cpp/**"], @@ -135,5 +134,8 @@ java_binary( py_binary( name = "convert_apriltag_layouts", srcs = ["convert_apriltag_layouts.py"], - tags = ["manual"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), ) diff --git a/cameraserver/BUILD.bazel b/cameraserver/BUILD.bazel index 73995c0135..9d60bef335 100644 --- a/cameraserver/BUILD.bazel +++ b/cameraserver/BUILD.bazel @@ -1,7 +1,8 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary", "java_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") -cc_library( +wpilib_cc_library( name = "cameraserver.static", srcs = glob(["src/main/native/cpp/**"]), hdrs = glob(["src/main/native/include/**/*"]), diff --git a/cscore/BUILD.bazel b/cscore/BUILD.bazel index 0af974eab6..f312efcf38 100644 --- a/cscore/BUILD.bazel +++ b/cscore/BUILD.bazel @@ -1,7 +1,9 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test", "objc_library") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") +load("//shared/bazel/rules:objectivec_rules.bzl", "wpilib_objc_library") WIN_SRCS = glob([ "src/main/native/windows/**/*.cpp", @@ -24,7 +26,7 @@ filegroup( }), ) -objc_library( +wpilib_objc_library( name = "cscore-mac", srcs = glob([ "src/main/native/objcpp/**/*.mm", @@ -34,9 +36,7 @@ objc_library( "src/main/native/include/**/*", "src/main/native/objcpp/**/*.h", ]), - copts = [ - "-std=c++20", - ], + include_arc = False, includes = [ "src/main/native/cpp", "src/main/native/include", @@ -50,7 +50,6 @@ objc_library( "CoreVideo", "IOKit", ], - tags = ["manual"], deps = [ "//wpinet:wpinet.static", "//wpiutil:wpiutil.static", @@ -58,7 +57,7 @@ objc_library( ], ) -cc_library( +wpilib_cc_library( name = "cscore.static", srcs = [":native-srcs"] + glob( ["src/main/native/cpp/**"], @@ -138,3 +137,24 @@ java_binary( "//wpiutil:wpiutil-java", ], ) + +[wpilib_cc_library( + name = example + "-examples", + srcs = glob([ + "examples/" + example + "/*.cpp", + ]), + tags = [ + "wpi-example", + ], + deps = [ + "//cscore:cscore.static", + "//wpigui", + ], +) for example in [ + "enum_usb", + "httpcvstream", + "settings", + "usbcvstream", + "usbstream", + "usbviewer", +]] diff --git a/cscore/java-examples/RawCVMatSink.java b/cscore/java-examples/RawCVMatSink.java deleted file mode 100644 index 686b8203d4..0000000000 --- a/cscore/java-examples/RawCVMatSink.java +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package edu.wpi.cscore; - -import edu.wpi.cscore.VideoMode.PixelFormat; -import edu.wpi.cscore.raw.RawFrame; -import java.nio.ByteBuffer; -import org.opencv.core.CvType; -import org.opencv.core.Mat; - -public class RawCVMatSink extends ImageSink { - RawFrame frame = new RawFrame(); - Mat tmpMat; - ByteBuffer origByteBuffer; - int width; - int height; - int pixelFormat; - int bgrValue = PixelFormat.kBGR.getValue(); - - private int getCVFormat(PixelFormat pixelFormat) { - return switch (pixelFormat) { - case kYUYV, kRGB565, kY16, kUYVY -> CvType.CV_8UC2; - case kBGR -> CvType.CV_8UC3; - case kBGRA -> CvType.CV_8UC4; - case kGray, kMJPEG, kUnknown -> CvType.CV_8UC1; - }; - } - - /** - * Create a sink for accepting OpenCV images. WaitForFrame() must be called on the created sink to - * get each new image. - * - * @param name Source name (arbitrary unique identifier) - */ - public RawCVMatSink(String name) { - super(CameraServerJNI.createRawSink(name)); - } - - /** - * Wait for the next frame and get the image. Times out (returning 0) after 0.225 seconds. The - * provided image will have three 3-bit channels stored in BGR order. - * - * @return Frame time, or 0 on error (call GetError() to obtain the error message) - */ - public long grabFrame(Mat image) { - return grabFrame(image, 0.225); - } - - /** - * Wait for the next frame and get the image. Times out (returning 0) after timeout seconds. The - * provided image will have three 3-bit channels stored in BGR order. - * - * @return Frame time, or 0 on error (call GetError() to obtain the error message); the frame time - * is in 1 us increments. - */ - public long grabFrame(Mat image, double timeout) { - frame.setWidth(0); - frame.setHeight(0); - frame.setPixelFormat(bgrValue); - long rv = CameraServerJNI.grabSinkFrameTimeout(m_handle, frame, timeout); - if (rv <= 0) { - return rv; - } - - if (frame.getDataByteBuffer() != origByteBuffer - || width != frame.getWidth() - || height != frame.getHeight() - || pixelFormat != frame.getPixelFormat()) { - origByteBuffer = frame.getDataByteBuffer(); - height = frame.getHeight(); - width = frame.getWidth(); - pixelFormat = frame.getPixelFormat(); - tmpMat = - new Mat( - frame.getHeight(), - frame.getWidth(), - getCVFormat(VideoMode.getPixelFormatFromInt(pixelFormat)), - origByteBuffer); - } - tmpMat.copyTo(image); - return rv; - } -} diff --git a/cscore/java-examples/RawCVMatSource.java b/cscore/java-examples/RawCVMatSource.java deleted file mode 100644 index e000ae3dd1..0000000000 --- a/cscore/java-examples/RawCVMatSource.java +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -package edu.wpi.cscore; - -import edu.wpi.cscore.VideoMode.PixelFormat; -import org.opencv.core.Mat; - -public class RawCVMatSource extends ImageSource { - /** - * Create an OpenCV source. - * - * @param name Source name (arbitrary unique identifier) - * @param mode Video mode being generated - */ - public RawCVMatSource(String name, VideoMode mode) { - super( - CameraServerJNI.createRawSource( - name, mode.pixelFormat.getValue(), mode.width, mode.height, mode.fps)); - } - - /** - * Create an OpenCV source. - * - * @param name Source name (arbitrary unique identifier) - * @param pixelFormat Pixel format - * @param width width - * @param height height - * @param fps fps - */ - public RawCVMatSource( - String name, VideoMode.PixelFormat pixelFormat, int width, int height, int fps) { - super(CameraServerJNI.createRawSource(name, pixelFormat.getValue(), width, height, fps)); - } - - /** - * Put an OpenCV image and notify sinks. - * - *

Only 8-bit single-channel or 3-channel (with BGR channel order) images are supported. If the - * format, depth or channel order is different, use Mat.convertTo() and/or cvtColor() to convert - * it first. - * - * @param image OpenCV image - */ - public void putFrame(Mat image) { - int channels = image.channels(); - if (channels != 1 && channels != 3) { - throw new VideoException("Unsupported Image Type"); - } - int imgType = channels == 1 ? PixelFormat.kGray.getValue() : PixelFormat.kBGR.getValue(); - CameraServerJNI.putRawSourceFrame( - m_handle, - image.dataAddr(), - image.width(), - image.height(), - imgType, - (int) image.total() * channels); - } -} diff --git a/datalog/BUILD.bazel b/datalog/BUILD.bazel index 1e3c34c117..327d1a120e 100644 --- a/datalog/BUILD.bazel +++ b/datalog/BUILD.bazel @@ -1,10 +1,11 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") -cc_library( +wpilib_cc_library( name = "datalog.static", srcs = glob( ["src/main/native/cpp/**"], @@ -46,7 +47,10 @@ wpilib_jni_java_library( py_binary( name = "datalog", srcs = ["examples/printlog/datalog.py"], - tags = ["manual"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), ) cc_binary( @@ -79,10 +83,7 @@ java_binary( cc_test( name = "datalog-cpp-test", size = "small", - srcs = glob([ - "src/test/native/**/*.cpp", - "src/test/native/**/*.h", - ]), + srcs = glob(["src/test/native/**/*.cpp"]), tags = [ "exclusive", "no-asan", diff --git a/datalogtool/BUILD.bazel b/datalogtool/BUILD.bazel new file mode 100644 index 0000000000..ffce4df961 --- /dev/null +++ b/datalogtool/BUILD.bazel @@ -0,0 +1,57 @@ +load("@rules_cc//cc:defs.bzl", "cc_binary") +load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") +load("//shared/bazel/rules/gen:gen-version-file.bzl", "generate_version_file") + +generate_resources( + name = "generate-resources", + namespace = "dlt", + prefix = "DLT", + resource_files = glob(["src/main/native/resources/*"]), +) + +generate_version_file( + name = "generate-version", + output_file = "WPILibVersion.cpp", + template = "src/main/generate/WPILibVersion.cpp.in", +) + +cc_binary( + name = "datalogtool", + srcs = glob(["src/main/native/cpp/*"]) + [ + ":generate-resources", + ":generate-version", + ], + defines = ["LIBSSH_STATIC"], + linkopts = select({ + "@bazel_tools//src/conditions:darwin": [ + "-framework", + "Kerberos", + ], + "@bazel_tools//src/conditions:linux_x86_64": [], + "@bazel_tools//src/conditions:windows": [ + "-DEFAULTLIB:Gdi32.lib", + "-DEFAULTLIB:Shell32.lib", + "-DEFAULTLIB:d3d11.lib", + "-DEFAULTLIB:d3dcompiler.lib", + "-DEFAULTLIB:ws2_32.lib", + "-DEFAULTLIB:advapi32.lib", + "-DEFAULTLIB:crypt32.lib", + "-DEFAULTLIB:user32.lib", + "-SUBSYSTEM:WINDOWS", + ], + "@rules_bzlmodrio_toolchains//constraints/combined:is_cross_compiler": [], + }), + tags = [ + "no-roborio", + "wpi-cpp-gui", + ], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), + deps = [ + "//datalog:datalog.static", + "//glass:libglass", + "@bzlmodrio-libssh//libraries/cpp/libssh", + ], +) diff --git a/fieldImages/BUILD.bazel b/fieldImages/BUILD.bazel index e006e9ef83..3066fc26ce 100644 --- a/fieldImages/BUILD.bazel +++ b/fieldImages/BUILD.bazel @@ -1,5 +1,5 @@ -load("@rules_cc//cc:defs.bzl", "cc_library") load("@rules_java//java:defs.bzl", "java_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") @@ -8,10 +8,9 @@ generate_resources( namespace = "fields", prefix = "FIELDS", resource_files = glob(["src/main/native/resources/**"]), - visibility = ["//visibility:public"], ) -cc_library( +wpilib_cc_library( name = "fieldImages", srcs = [":generate-resources"] + glob(["src/main/native/cpp/**"]), hdrs = glob(["src/main/native/include/**/*"]), diff --git a/glass/BUILD.bazel b/glass/BUILD.bazel index 0ebb5b7de9..2fc8b8a7cd 100644 --- a/glass/BUILD.bazel +++ b/glass/BUILD.bazel @@ -1,8 +1,9 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") +load("@rules_cc//cc:defs.bzl", "cc_binary") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") load("//shared/bazel/rules/gen:gen-version-file.bzl", "generate_version_file") -cc_library( +wpilib_cc_library( name = "libglass", srcs = glob(["src/lib/native/cpp/**/*.cpp"]), hdrs = glob(["src/lib/native/include/**"]), @@ -19,7 +20,7 @@ cc_library( ], ) -cc_library( +wpilib_cc_library( name = "libglassnt", srcs = glob(["src/libnt/native/cpp/*.cpp"]), hdrs = glob(["src/libnt/native/include/**/*.h"]), diff --git a/hal/BUILD.bazel b/hal/BUILD.bazel index b846ddd730..db9cf0cbe1 100644 --- a/hal/BUILD.bazel +++ b/hal/BUILD.bazel @@ -3,14 +3,10 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") load("//hal:generate.bzl", "generate_hal") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") -filegroup( - name = "templates", - srcs = glob(["src/generate/*"]), -) - filegroup( name = "proto_files", srcs = glob(["src/mrc/proto/**/*.proto"]), @@ -24,7 +20,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], ) generate_hal( @@ -42,34 +37,16 @@ write_source_files( visibility = ["//visibility:public"], ) -cc_library( - name = "generated_cc_headers", - hdrs = glob(["src/generated/main/native/include/**"]), - includes = ["src/generated/main/native/include"], - strip_include_prefix = "src/generated/main/native/include", - visibility = ["//hal:__subpackages__"], -) - -cc_library( - name = "mrc_cc_headers", - hdrs = glob(["src/mrc/include/**"]), - includes = ["src/mrc/include"], - strip_include_prefix = "src/mrc/include", - visibility = ["//hal:__subpackages__"], +third_party_cc_lib_helper( + name = "mrc", + include_root = "src/mrc/include", ) cc_library( name = "generated_mrc_cc_headers", - hdrs = glob(["src/generated/main/native/cpp/mrc/protobuf/**"]), + hdrs = glob(["src/generated/main/native/cpp/mrc/protobuf/*.npb.h"]), includes = ["src/generated/main/native/cpp/mrc/protobuf"], strip_include_prefix = "src/generated/main/native/cpp/mrc/protobuf", - visibility = ["//hal:__subpackages__"], -) - -filegroup( - name = "generated_java", - srcs = glob(["src/generated/main/java/**/*.java"]), - visibility = ["//hal:__subpackages__"], ) SYSTEMCORE_SRCS = glob(["src/main/native/systemcore/**"]) @@ -84,7 +61,7 @@ filegroup( }), ) -cc_library( +wpilib_cc_library( name = "wpiHal.static", srcs = [":platform-srcs"] + glob( [ @@ -96,11 +73,12 @@ cc_library( hdrs = glob(["src/main/native/include/**/*"]), includes = ["src/main/native/include"], strip_include_prefix = "src/main/native/include", + third_party_header_only_libraries = [ + ":mrc", + ], visibility = ["//visibility:public"], deps = [ - ":generated_cc_headers", ":generated_mrc_cc_headers", - ":mrc_cc_headers", "//ntcore:ntcore.static", "//wpinet:wpinet.static", "//wpiutil:wpiutil.static", @@ -132,10 +110,7 @@ wpilib_jni_java_library( cc_test( name = "hal-cpp-test", size = "small", - srcs = glob([ - "src/test/native/**/*.cpp", - "src/test/native/**/*.h", - ]), + srcs = glob(["src/test/native/**/*.cpp"]), deps = [ ":wpiHal.static", "//thirdparty/googletest:googletest.static", diff --git a/hal/generate.bzl b/hal/generate.bzl index 29bdd38b39..44ab6cd89c 100644 --- a/hal/generate.bzl +++ b/hal/generate.bzl @@ -9,7 +9,7 @@ def __generate_hal_impl(ctx): args.add("--nanopb", ctx.executable._nanopb_generator) ctx.actions.run( - inputs = ctx.attr._templates.files.to_list() + ctx.attr.proto_files.files.to_list(), + inputs = ctx.attr.proto_files.files.to_list(), outputs = [output_dir], executable = ctx.executable._tool, arguments = [args], @@ -35,9 +35,6 @@ generate_hal = rule( cfg = "exec", executable = True, ), - "_templates": attr.label( - default = Label("//hal:templates"), - ), "_tool": attr.label( default = Label("//hal:generate_nanopb"), cfg = "exec", diff --git a/maven_install.json b/maven_install.json new file mode 100755 index 0000000000..32bc1cdf6d --- /dev/null +++ b/maven_install.json @@ -0,0 +1,1313 @@ +{ + "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", + "__INPUT_ARTIFACTS_HASH": 76301167, + "__RESOLVED_ARTIFACTS_HASH": 90189104, + "artifacts": { + "com.fasterxml.jackson.core:jackson-annotations": { + "shasums": { + "jar": "04e21f94dcfee4b078fa5a5f53047b785aaba69d19de392f616e7a7fe5d3882f" + }, + "version": "2.15.2" + }, + "com.fasterxml.jackson.core:jackson-core": { + "shasums": { + "jar": "303c99e82b1faa91a0bae5d8fbeb56f7e2adf9b526a900dd723bf140d62bd4b4" + }, + "version": "2.15.2" + }, + "com.fasterxml.jackson.core:jackson-databind": { + "shasums": { + "jar": "0eb2fdad6e40ab8832a78c9b22f58196dd970594e8d3d5a26ead87847c4f3a96" + }, + "version": "2.15.2" + }, + "com.google.auto.value:auto-value": { + "shasums": { + "jar": "7ca3edd75517fcc8bfc420fda15d2ae2e89ebd6ed477b351caa746e44b2d5603" + }, + "version": "1.10" + }, + "com.google.auto.value:auto-value-annotations": { + "shasums": { + "jar": "37ec09b47d7ed35a99d13927db5c86fc9071f620f943ead5d757144698310852" + }, + "version": "1.8.1" + }, + "com.google.auto:auto-common": { + "shasums": { + "jar": "f43f29fe2a6ebaf04b2598cdeec32a4e346d49a9404e990f5fc19c19f3a28d0e" + }, + "version": "1.2.1" + }, + "com.google.code.findbugs:jsr305": { + "shasums": { + "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" + }, + "version": "3.0.2" + }, + "com.google.code.gson:gson": { + "shasums": { + "jar": "4241c14a7727c34feea6507ec801318a3d4a90f070e4525681079fb94ee4c593" + }, + "version": "2.10.1" + }, + "com.google.errorprone:error_prone_annotations": { + "shasums": { + "jar": "721cb91842b46fa056847d104d5225c8b8e1e8b62263b993051e1e5a0137b7ec" + }, + "version": "2.11.0" + }, + "com.google.guava:failureaccess": { + "shasums": { + "jar": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26" + }, + "version": "1.0.1" + }, + "com.google.guava:guava": { + "shasums": { + "jar": "a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab" + }, + "version": "31.1-jre" + }, + "com.google.guava:listenablefuture": { + "shasums": { + "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" + }, + "version": "9999.0-empty-to-avoid-conflict-with-guava" + }, + "com.google.j2objc:j2objc-annotations": { + "shasums": { + "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b" + }, + "version": "1.3" + }, + "com.google.testing.compile:compile-testing": { + "shasums": { + "jar": "da42c0b350c0e5717df91a7e554ee5acbf07f4b87d4d2240589521070b4bce72" + }, + "version": "0.21.0" + }, + "com.google.truth:truth": { + "shasums": { + "jar": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3" + }, + "version": "1.1.3" + }, + "com.googlecode.junit-toolbox:junit-toolbox": { + "shasums": { + "jar": "3b327a1b9deb0e15148094153abb72d7bcf5cf3b5b36e97c86e910103812df25" + }, + "version": "2.4" + }, + "commons-io:commons-io": { + "shasums": { + "jar": "cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581" + }, + "version": "2.4" + }, + "junit:junit": { + "shasums": { + "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" + }, + "version": "4.13.2" + }, + "net.bytebuddy:byte-buddy": { + "shasums": { + "jar": "9062fb0ae3ae7fab0118d77e9c8bc2dae2ce0144a71b6952d7ba4ddc14c69c5f" + }, + "version": "1.12.1" + }, + "net.bytebuddy:byte-buddy-agent": { + "shasums": { + "jar": "99c0ad053f5c9635049e2079112a4f0d864c7d5c44b352513e594e8964cff9b3" + }, + "version": "1.12.1" + }, + "org.apache.ant:ant": { + "shasums": { + "jar": "5c6a438c3ebe7a306eba452b09fa307b0e60314926177920bca896c4a504eaf6" + }, + "version": "1.10.12" + }, + "org.apache.ant:ant-junit": { + "shasums": { + "jar": "800eb1f75188fd1e2cd9e7ba31561f16e3bd81b94e813821440f03a0fa07ce50" + }, + "version": "1.10.12" + }, + "org.apache.ant:ant-launcher": { + "shasums": { + "jar": "42a7ca7e7bb777fe7ee75a5ed4cc529c766bc43486367fdaad0ab4a32ee9c249" + }, + "version": "1.10.12" + }, + "org.apiguardian:apiguardian-api": { + "shasums": { + "jar": "b509448ac506d607319f182537f0b35d71007582ec741832a1f111e5b5b70b38" + }, + "version": "1.1.2" + }, + "org.checkerframework:checker-qual": { + "shasums": { + "jar": "13071d3b67326eeec0180d07fcbb1c79b0c27b173f04fea0982203c151160986" + }, + "version": "3.26.0" + }, + "org.ejml:ejml-cdense": { + "shasums": { + "jar": "20c96f2b25facf9014c46c6d0e0139e2c1bbec7954411e9eb1b4c53ef7eaef6d" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-core": { + "shasums": { + "jar": "04136b8fabedf92c218914da3a837e27ba0aefbf924444d2aac243f77dbf208d" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-ddense": { + "shasums": { + "jar": "bb3d00c111868673d35f1aca24de7fe72b970c47dc44295f510684b2be6eb7ce" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-dsparse": { + "shasums": { + "jar": "5b15d7d06e88d0384ed40358127f3358cab462ad4d273da1763e9f5282ad27e1" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-fdense": { + "shasums": { + "jar": "67dc4bebaa52a9864c2028ad150444a22227792a712bbc13f5d0c1ebe836b029" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-fsparse": { + "shasums": { + "jar": "23ef080a75893f7d1b0b2f16bd937ddbc4199a2999c246d905a55663a4d54a91" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-simple": { + "shasums": { + "jar": "348acd004027e1e0719b76cac6432d368640489eb3d619508275fd37373acb0d" + }, + "version": "0.43.1" + }, + "org.ejml:ejml-zdense": { + "shasums": { + "jar": "dc47e7395fb7dd3652f0f2e82566f193824ba3762fc709487e03d76bba13e070" + }, + "version": "0.43.1" + }, + "org.hamcrest:hamcrest-all": { + "shasums": { + "jar": "4877670629ab96f34f5f90ab283125fcd9acb7e683e66319a68be6eb2cca60de" + }, + "version": "1.3" + }, + "org.hamcrest:hamcrest-core": { + "shasums": { + "jar": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9" + }, + "version": "1.3" + }, + "org.hamcrest:hamcrest-library": { + "shasums": { + "jar": "711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c" + }, + "version": "1.3" + }, + "org.junit.jupiter:junit-jupiter": { + "shasums": { + "jar": "c1a386e901fae28e493185a47c8cea988fb1a37422b353a0f8b4df2e6c5d6037" + }, + "version": "5.10.1" + }, + "org.junit.jupiter:junit-jupiter-api": { + "shasums": { + "jar": "60d5c398c32dc7039b99282514ad6064061d8417cf959a1f6bd2038cc907c913" + }, + "version": "5.10.1" + }, + "org.junit.jupiter:junit-jupiter-engine": { + "shasums": { + "jar": "02930dfe495f93fe70b26550ace3a28f7e1b900c84426c2e4626ce020c7282d6" + }, + "version": "5.10.1" + }, + "org.junit.jupiter:junit-jupiter-params": { + "shasums": { + "jar": "c8cf62debcbb354deefe1ffd0671eff785514907567d22a615ff8a8de4522b21" + }, + "version": "5.10.1" + }, + "org.junit.platform:junit-platform-commons": { + "shasums": { + "jar": "7d9855ee3f3f71f015eb1479559bf923783243c24fbfbd8b29bed8e8099b5672" + }, + "version": "1.10.1" + }, + "org.junit.platform:junit-platform-console": { + "shasums": { + "jar": "21cfa2a03f5a7b3502bfcad3eba188aa1299d8a667ff636f813d2a267267c355" + }, + "version": "1.10.1" + }, + "org.junit.platform:junit-platform-engine": { + "shasums": { + "jar": "baa48e470d6dee7369a0a8820c51da89c1463279eda6e13a304d11f45922c760" + }, + "version": "1.10.1" + }, + "org.junit.platform:junit-platform-launcher": { + "shasums": { + "jar": "ded414c504e88d02270331071969084e1b2fd9bcf8443f35d44da2c6e3301bc2" + }, + "version": "1.10.1" + }, + "org.junit.platform:junit-platform-reporting": { + "shasums": { + "jar": "222245aba7091f6660aa72d491e8c621faf19146a58126d058249aa8abf151df" + }, + "version": "1.10.1" + }, + "org.mockito:mockito-core": { + "shasums": { + "jar": "9a924658ec795777cce66da7ecbefde57b079408b838992a624db33d52da9359" + }, + "version": "4.1.0" + }, + "org.objenesis:objenesis": { + "shasums": { + "jar": "03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3" + }, + "version": "3.2" + }, + "org.opentest4j:opentest4j": { + "shasums": { + "jar": "48e2df636cab6563ced64dcdff8abb2355627cb236ef0bf37598682ddf742f1b" + }, + "version": "1.3.0" + }, + "org.ow2.asm:asm": { + "shasums": { + "jar": "cda4de455fab48ff0bcb7c48b4639447d4de859a7afc30a094a986f0936beba2" + }, + "version": "9.1" + }, + "us.hebi.quickbuf:quickbuf-runtime": { + "shasums": { + "jar": "7af02629bb416fa78dae39984fad1b20d5637dbffd47ff4849f1599e95ec5b1c" + }, + "version": "1.3.3" + } + }, + "dependencies": { + "com.fasterxml.jackson.core:jackson-databind": [ + "com.fasterxml.jackson.core:jackson-annotations", + "com.fasterxml.jackson.core:jackson-core" + ], + "com.google.auto:auto-common": [ + "com.google.guava:guava" + ], + "com.google.guava:guava": [ + "com.google.code.findbugs:jsr305", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "org.checkerframework:checker-qual" + ], + "com.google.testing.compile:compile-testing": [ + "com.google.auto.value:auto-value", + "com.google.auto:auto-common", + "com.google.guava:guava", + "com.google.truth:truth", + "junit:junit", + "org.checkerframework:checker-qual" + ], + "com.google.truth:truth": [ + "com.google.auto.value:auto-value-annotations", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:guava", + "junit:junit", + "org.checkerframework:checker-qual", + "org.ow2.asm:asm" + ], + "com.googlecode.junit-toolbox:junit-toolbox": [ + "commons-io:commons-io", + "junit:junit", + "org.hamcrest:hamcrest-library", + "org.mockito:mockito-core" + ], + "junit:junit": [ + "org.hamcrest:hamcrest-core" + ], + "org.apache.ant:ant": [ + "org.apache.ant:ant-launcher" + ], + "org.apache.ant:ant-junit": [ + "junit:junit", + "org.apache.ant:ant" + ], + "org.ejml:ejml-cdense": [ + "org.ejml:ejml-core" + ], + "org.ejml:ejml-ddense": [ + "org.ejml:ejml-core" + ], + "org.ejml:ejml-dsparse": [ + "org.ejml:ejml-core", + "org.ejml:ejml-ddense" + ], + "org.ejml:ejml-fdense": [ + "org.ejml:ejml-core" + ], + "org.ejml:ejml-fsparse": [ + "org.ejml:ejml-core", + "org.ejml:ejml-fdense" + ], + "org.ejml:ejml-simple": [ + "org.ejml:ejml-cdense", + "org.ejml:ejml-core", + "org.ejml:ejml-ddense", + "org.ejml:ejml-dsparse", + "org.ejml:ejml-fdense", + "org.ejml:ejml-fsparse", + "org.ejml:ejml-zdense" + ], + "org.ejml:ejml-zdense": [ + "org.ejml:ejml-core" + ], + "org.hamcrest:hamcrest-library": [ + "org.hamcrest:hamcrest-core" + ], + "org.junit.jupiter:junit-jupiter": [ + "org.junit.jupiter:junit-jupiter-api", + "org.junit.jupiter:junit-jupiter-engine", + "org.junit.jupiter:junit-jupiter-params" + ], + "org.junit.jupiter:junit-jupiter-api": [ + "org.apiguardian:apiguardian-api", + "org.junit.platform:junit-platform-commons", + "org.opentest4j:opentest4j" + ], + "org.junit.jupiter:junit-jupiter-engine": [ + "org.apiguardian:apiguardian-api", + "org.junit.jupiter:junit-jupiter-api", + "org.junit.platform:junit-platform-engine" + ], + "org.junit.jupiter:junit-jupiter-params": [ + "org.apiguardian:apiguardian-api", + "org.junit.jupiter:junit-jupiter-api" + ], + "org.junit.platform:junit-platform-commons": [ + "org.apiguardian:apiguardian-api" + ], + "org.junit.platform:junit-platform-console": [ + "org.apiguardian:apiguardian-api", + "org.junit.platform:junit-platform-reporting" + ], + "org.junit.platform:junit-platform-engine": [ + "org.apiguardian:apiguardian-api", + "org.junit.platform:junit-platform-commons", + "org.opentest4j:opentest4j" + ], + "org.junit.platform:junit-platform-launcher": [ + "org.apiguardian:apiguardian-api", + "org.junit.platform:junit-platform-engine" + ], + "org.junit.platform:junit-platform-reporting": [ + "org.apiguardian:apiguardian-api", + "org.junit.platform:junit-platform-launcher" + ], + "org.mockito:mockito-core": [ + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "org.objenesis:objenesis" + ] + }, + "packages": { + "com.fasterxml.jackson.core:jackson-annotations": [ + "com.fasterxml.jackson.annotation" + ], + "com.fasterxml.jackson.core:jackson-core": [ + "com.fasterxml.jackson.core", + "com.fasterxml.jackson.core.async", + "com.fasterxml.jackson.core.base", + "com.fasterxml.jackson.core.exc", + "com.fasterxml.jackson.core.filter", + "com.fasterxml.jackson.core.format", + "com.fasterxml.jackson.core.io", + "com.fasterxml.jackson.core.io.doubleparser", + "com.fasterxml.jackson.core.io.schubfach", + "com.fasterxml.jackson.core.json", + "com.fasterxml.jackson.core.json.async", + "com.fasterxml.jackson.core.sym", + "com.fasterxml.jackson.core.type", + "com.fasterxml.jackson.core.util" + ], + "com.fasterxml.jackson.core:jackson-databind": [ + "com.fasterxml.jackson.databind", + "com.fasterxml.jackson.databind.annotation", + "com.fasterxml.jackson.databind.cfg", + "com.fasterxml.jackson.databind.deser", + "com.fasterxml.jackson.databind.deser.impl", + "com.fasterxml.jackson.databind.deser.std", + "com.fasterxml.jackson.databind.exc", + "com.fasterxml.jackson.databind.ext", + "com.fasterxml.jackson.databind.introspect", + "com.fasterxml.jackson.databind.jdk14", + "com.fasterxml.jackson.databind.json", + "com.fasterxml.jackson.databind.jsonFormatVisitors", + "com.fasterxml.jackson.databind.jsonschema", + "com.fasterxml.jackson.databind.jsontype", + "com.fasterxml.jackson.databind.jsontype.impl", + "com.fasterxml.jackson.databind.module", + "com.fasterxml.jackson.databind.node", + "com.fasterxml.jackson.databind.ser", + "com.fasterxml.jackson.databind.ser.impl", + "com.fasterxml.jackson.databind.ser.std", + "com.fasterxml.jackson.databind.type", + "com.fasterxml.jackson.databind.util", + "com.fasterxml.jackson.databind.util.internal" + ], + "com.google.auto.value:auto-value": [ + "autovalue.shaded.com.google.auto.common", + "autovalue.shaded.com.google.auto.service", + "autovalue.shaded.com.google.common.annotations", + "autovalue.shaded.com.google.common.base", + "autovalue.shaded.com.google.common.cache", + "autovalue.shaded.com.google.common.collect", + "autovalue.shaded.com.google.common.escape", + "autovalue.shaded.com.google.common.eventbus", + "autovalue.shaded.com.google.common.graph", + "autovalue.shaded.com.google.common.hash", + "autovalue.shaded.com.google.common.html", + "autovalue.shaded.com.google.common.io", + "autovalue.shaded.com.google.common.math", + "autovalue.shaded.com.google.common.net", + "autovalue.shaded.com.google.common.primitives", + "autovalue.shaded.com.google.common.reflect", + "autovalue.shaded.com.google.common.util.concurrent", + "autovalue.shaded.com.google.common.xml", + "autovalue.shaded.com.google.errorprone.annotations", + "autovalue.shaded.com.google.errorprone.annotations.concurrent", + "autovalue.shaded.com.google.escapevelocity", + "autovalue.shaded.com.google.j2objc.annotations", + "autovalue.shaded.com.squareup.javapoet", + "autovalue.shaded.kotlin", + "autovalue.shaded.kotlin.annotation", + "autovalue.shaded.kotlin.collections", + "autovalue.shaded.kotlin.collections.builders", + "autovalue.shaded.kotlin.collections.unsigned", + "autovalue.shaded.kotlin.comparisons", + "autovalue.shaded.kotlin.coroutines", + "autovalue.shaded.kotlin.coroutines.intrinsics", + "autovalue.shaded.kotlin.coroutines.jvm.internal", + "autovalue.shaded.kotlin.experimental", + "autovalue.shaded.kotlin.internal", + "autovalue.shaded.kotlin.jvm", + "autovalue.shaded.kotlin.jvm.functions", + "autovalue.shaded.kotlin.jvm.internal", + "autovalue.shaded.kotlin.jvm.internal.markers", + "autovalue.shaded.kotlin.random", + "autovalue.shaded.kotlin.ranges", + "autovalue.shaded.kotlin.reflect", + "autovalue.shaded.kotlin.sequences", + "autovalue.shaded.kotlin.text", + "autovalue.shaded.kotlinx.metadata", + "autovalue.shaded.kotlinx.metadata.impl", + "autovalue.shaded.kotlinx.metadata.impl.extensions", + "autovalue.shaded.kotlinx.metadata.internal.metadata", + "autovalue.shaded.kotlinx.metadata.internal.metadata.deserialization", + "autovalue.shaded.kotlinx.metadata.internal.metadata.jvm", + "autovalue.shaded.kotlinx.metadata.internal.metadata.jvm.deserialization", + "autovalue.shaded.kotlinx.metadata.internal.metadata.jvm.serialization", + "autovalue.shaded.kotlinx.metadata.internal.metadata.serialization", + "autovalue.shaded.kotlinx.metadata.internal.protobuf", + "autovalue.shaded.kotlinx.metadata.jvm", + "autovalue.shaded.kotlinx.metadata.jvm.impl", + "autovalue.shaded.net.ltgt.gradle.incap", + "autovalue.shaded.org.checkerframework.checker.nullness.qual", + "autovalue.shaded.org.checkerframework.framework.qual", + "autovalue.shaded.org.objectweb.asm", + "com.google.auto.value.extension", + "com.google.auto.value.extension.memoized.processor", + "com.google.auto.value.extension.serializable.processor", + "com.google.auto.value.extension.serializable.serializer", + "com.google.auto.value.extension.serializable.serializer.impl", + "com.google.auto.value.extension.serializable.serializer.interfaces", + "com.google.auto.value.extension.serializable.serializer.runtime", + "com.google.auto.value.extension.toprettystring.processor", + "com.google.auto.value.processor", + "org.jetbrains.annotations" + ], + "com.google.auto.value:auto-value-annotations": [ + "com.google.auto.value", + "com.google.auto.value.extension.memoized", + "com.google.auto.value.extension.serializable", + "com.google.auto.value.extension.toprettystring" + ], + "com.google.auto:auto-common": [ + "com.google.auto.common" + ], + "com.google.code.findbugs:jsr305": [ + "javax.annotation", + "javax.annotation.concurrent", + "javax.annotation.meta" + ], + "com.google.code.gson:gson": [ + "com.google.gson", + "com.google.gson.annotations", + "com.google.gson.internal", + "com.google.gson.internal.bind", + "com.google.gson.internal.bind.util", + "com.google.gson.internal.reflect", + "com.google.gson.internal.sql", + "com.google.gson.reflect", + "com.google.gson.stream" + ], + "com.google.errorprone:error_prone_annotations": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "com.google.guava:failureaccess": [ + "com.google.common.util.concurrent.internal" + ], + "com.google.guava:guava": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "com.google.j2objc:j2objc-annotations": [ + "com.google.j2objc.annotations" + ], + "com.google.testing.compile:compile-testing": [ + "com.google.testing.compile" + ], + "com.google.truth:truth": [ + "com.google.common.truth" + ], + "com.googlecode.junit-toolbox:junit-toolbox": [ + "com.googlecode.junittoolbox", + "com.googlecode.junittoolbox.util" + ], + "commons-io:commons-io": [ + "org.apache.commons.io", + "org.apache.commons.io.comparator", + "org.apache.commons.io.filefilter", + "org.apache.commons.io.input", + "org.apache.commons.io.monitor", + "org.apache.commons.io.output" + ], + "junit:junit": [ + "junit.extensions", + "junit.framework", + "junit.runner", + "junit.textui", + "org.junit", + "org.junit.experimental", + "org.junit.experimental.categories", + "org.junit.experimental.max", + "org.junit.experimental.results", + "org.junit.experimental.runners", + "org.junit.experimental.theories", + "org.junit.experimental.theories.internal", + "org.junit.experimental.theories.suppliers", + "org.junit.function", + "org.junit.internal", + "org.junit.internal.builders", + "org.junit.internal.management", + "org.junit.internal.matchers", + "org.junit.internal.requests", + "org.junit.internal.runners", + "org.junit.internal.runners.model", + "org.junit.internal.runners.rules", + "org.junit.internal.runners.statements", + "org.junit.matchers", + "org.junit.rules", + "org.junit.runner", + "org.junit.runner.manipulation", + "org.junit.runner.notification", + "org.junit.runners", + "org.junit.runners.model", + "org.junit.runners.parameterized", + "org.junit.validator" + ], + "net.bytebuddy:byte-buddy": [ + "net.bytebuddy", + "net.bytebuddy.agent.builder", + "net.bytebuddy.asm", + "net.bytebuddy.build", + "net.bytebuddy.description", + "net.bytebuddy.description.annotation", + "net.bytebuddy.description.enumeration", + "net.bytebuddy.description.field", + "net.bytebuddy.description.method", + "net.bytebuddy.description.modifier", + "net.bytebuddy.description.type", + "net.bytebuddy.dynamic", + "net.bytebuddy.dynamic.loading", + "net.bytebuddy.dynamic.scaffold", + "net.bytebuddy.dynamic.scaffold.inline", + "net.bytebuddy.dynamic.scaffold.subclass", + "net.bytebuddy.implementation", + "net.bytebuddy.implementation.attribute", + "net.bytebuddy.implementation.auxiliary", + "net.bytebuddy.implementation.bind", + "net.bytebuddy.implementation.bind.annotation", + "net.bytebuddy.implementation.bytecode", + "net.bytebuddy.implementation.bytecode.assign", + "net.bytebuddy.implementation.bytecode.assign.primitive", + "net.bytebuddy.implementation.bytecode.assign.reference", + "net.bytebuddy.implementation.bytecode.collection", + "net.bytebuddy.implementation.bytecode.constant", + "net.bytebuddy.implementation.bytecode.member", + "net.bytebuddy.jar.asm", + "net.bytebuddy.jar.asm.commons", + "net.bytebuddy.jar.asm.signature", + "net.bytebuddy.matcher", + "net.bytebuddy.pool", + "net.bytebuddy.utility", + "net.bytebuddy.utility.dispatcher", + "net.bytebuddy.utility.privilege", + "net.bytebuddy.utility.visitor" + ], + "net.bytebuddy:byte-buddy-agent": [ + "net.bytebuddy.agent" + ], + "org.apache.ant:ant": [ + "org.apache.tools.ant", + "org.apache.tools.ant.attribute", + "org.apache.tools.ant.dispatch", + "org.apache.tools.ant.filters", + "org.apache.tools.ant.filters.util", + "org.apache.tools.ant.helper", + "org.apache.tools.ant.input", + "org.apache.tools.ant.listener", + "org.apache.tools.ant.loader", + "org.apache.tools.ant.property", + "org.apache.tools.ant.taskdefs", + "org.apache.tools.ant.taskdefs.compilers", + "org.apache.tools.ant.taskdefs.condition", + "org.apache.tools.ant.taskdefs.cvslib", + "org.apache.tools.ant.taskdefs.email", + "org.apache.tools.ant.taskdefs.launcher", + "org.apache.tools.ant.taskdefs.modules", + "org.apache.tools.ant.taskdefs.optional", + "org.apache.tools.ant.taskdefs.optional.ccm", + "org.apache.tools.ant.taskdefs.optional.clearcase", + "org.apache.tools.ant.taskdefs.optional.depend", + "org.apache.tools.ant.taskdefs.optional.depend.constantpool", + "org.apache.tools.ant.taskdefs.optional.ejb", + "org.apache.tools.ant.taskdefs.optional.extension", + "org.apache.tools.ant.taskdefs.optional.extension.resolvers", + "org.apache.tools.ant.taskdefs.optional.i18n", + "org.apache.tools.ant.taskdefs.optional.j2ee", + "org.apache.tools.ant.taskdefs.optional.javacc", + "org.apache.tools.ant.taskdefs.optional.javah", + "org.apache.tools.ant.taskdefs.optional.jlink", + "org.apache.tools.ant.taskdefs.optional.jsp", + "org.apache.tools.ant.taskdefs.optional.jsp.compilers", + "org.apache.tools.ant.taskdefs.optional.native2ascii", + "org.apache.tools.ant.taskdefs.optional.net", + "org.apache.tools.ant.taskdefs.optional.pvcs", + "org.apache.tools.ant.taskdefs.optional.script", + "org.apache.tools.ant.taskdefs.optional.sos", + "org.apache.tools.ant.taskdefs.optional.testing", + "org.apache.tools.ant.taskdefs.optional.unix", + "org.apache.tools.ant.taskdefs.optional.vss", + "org.apache.tools.ant.taskdefs.optional.windows", + "org.apache.tools.ant.taskdefs.rmic", + "org.apache.tools.ant.types", + "org.apache.tools.ant.types.mappers", + "org.apache.tools.ant.types.optional", + "org.apache.tools.ant.types.optional.depend", + "org.apache.tools.ant.types.resources", + "org.apache.tools.ant.types.resources.comparators", + "org.apache.tools.ant.types.resources.selectors", + "org.apache.tools.ant.types.selectors", + "org.apache.tools.ant.types.selectors.modifiedselector", + "org.apache.tools.ant.types.spi", + "org.apache.tools.ant.util", + "org.apache.tools.ant.util.depend", + "org.apache.tools.ant.util.facade", + "org.apache.tools.ant.util.java15", + "org.apache.tools.ant.util.optional", + "org.apache.tools.ant.util.regexp", + "org.apache.tools.bzip2", + "org.apache.tools.mail", + "org.apache.tools.tar", + "org.apache.tools.zip" + ], + "org.apache.ant:ant-junit": [ + "org.apache.tools.ant.taskdefs.optional.junit" + ], + "org.apache.ant:ant-launcher": [ + "org.apache.tools.ant.launch" + ], + "org.apiguardian:apiguardian-api": [ + "org.apiguardian.api" + ], + "org.checkerframework:checker-qual": [ + "org.checkerframework.checker.builder.qual", + "org.checkerframework.checker.calledmethods.qual", + "org.checkerframework.checker.compilermsgs.qual", + "org.checkerframework.checker.fenum.qual", + "org.checkerframework.checker.formatter.qual", + "org.checkerframework.checker.guieffect.qual", + "org.checkerframework.checker.i18n.qual", + "org.checkerframework.checker.i18nformatter.qual", + "org.checkerframework.checker.index.qual", + "org.checkerframework.checker.initialization.qual", + "org.checkerframework.checker.interning.qual", + "org.checkerframework.checker.lock.qual", + "org.checkerframework.checker.mustcall.qual", + "org.checkerframework.checker.nullness.qual", + "org.checkerframework.checker.optional.qual", + "org.checkerframework.checker.propkey.qual", + "org.checkerframework.checker.regex.qual", + "org.checkerframework.checker.signature.qual", + "org.checkerframework.checker.signedness.qual", + "org.checkerframework.checker.tainting.qual", + "org.checkerframework.checker.units.qual", + "org.checkerframework.common.aliasing.qual", + "org.checkerframework.common.initializedfields.qual", + "org.checkerframework.common.reflection.qual", + "org.checkerframework.common.returnsreceiver.qual", + "org.checkerframework.common.subtyping.qual", + "org.checkerframework.common.util.report.qual", + "org.checkerframework.common.value.qual", + "org.checkerframework.dataflow.qual", + "org.checkerframework.framework.qual" + ], + "org.ejml:ejml-cdense": [ + "org.ejml.dense.row", + "org.ejml.dense.row.decompose", + "org.ejml.dense.row.decompose.chol", + "org.ejml.dense.row.decompose.hessenberg", + "org.ejml.dense.row.decompose.lu", + "org.ejml.dense.row.decompose.qr", + "org.ejml.dense.row.factory", + "org.ejml.dense.row.linsol", + "org.ejml.dense.row.linsol.chol", + "org.ejml.dense.row.linsol.lu", + "org.ejml.dense.row.linsol.qr", + "org.ejml.dense.row.misc", + "org.ejml.dense.row.mult" + ], + "org.ejml:ejml-core": [ + "org.ejml", + "org.ejml.concurrency", + "org.ejml.data", + "org.ejml.interfaces", + "org.ejml.interfaces.decomposition", + "org.ejml.interfaces.linsol", + "org.ejml.masks", + "org.ejml.ops", + "org.ejml.sparse", + "pabeles.concurrency" + ], + "org.ejml:ejml-ddense": [ + "org.ejml.dense.block", + "org.ejml.dense.block.decomposition.bidiagonal", + "org.ejml.dense.block.decomposition.chol", + "org.ejml.dense.block.decomposition.hessenberg", + "org.ejml.dense.block.decomposition.qr", + "org.ejml.dense.block.linsol.chol", + "org.ejml.dense.block.linsol.qr", + "org.ejml.dense.fixed", + "org.ejml.dense.row", + "org.ejml.dense.row.decomposition", + "org.ejml.dense.row.decomposition.bidiagonal", + "org.ejml.dense.row.decomposition.chol", + "org.ejml.dense.row.decomposition.eig", + "org.ejml.dense.row.decomposition.eig.symm", + "org.ejml.dense.row.decomposition.eig.watched", + "org.ejml.dense.row.decomposition.hessenberg", + "org.ejml.dense.row.decomposition.lu", + "org.ejml.dense.row.decomposition.qr", + "org.ejml.dense.row.decomposition.svd", + "org.ejml.dense.row.decomposition.svd.implicitqr", + "org.ejml.dense.row.factory", + "org.ejml.dense.row.linsol", + "org.ejml.dense.row.linsol.chol", + "org.ejml.dense.row.linsol.lu", + "org.ejml.dense.row.linsol.qr", + "org.ejml.dense.row.linsol.svd", + "org.ejml.dense.row.misc", + "org.ejml.dense.row.mult", + "org.ejml.generic" + ], + "org.ejml:ejml-dsparse": [ + "org.ejml.sparse.csc", + "org.ejml.sparse.csc.decomposition.chol", + "org.ejml.sparse.csc.decomposition.lu", + "org.ejml.sparse.csc.decomposition.qr", + "org.ejml.sparse.csc.factory", + "org.ejml.sparse.csc.linsol.chol", + "org.ejml.sparse.csc.linsol.lu", + "org.ejml.sparse.csc.linsol.qr", + "org.ejml.sparse.csc.misc", + "org.ejml.sparse.csc.mult", + "org.ejml.sparse.triplet" + ], + "org.ejml:ejml-fdense": [ + "org.ejml.dense.block", + "org.ejml.dense.block.decomposition.bidiagonal", + "org.ejml.dense.block.decomposition.chol", + "org.ejml.dense.block.decomposition.hessenberg", + "org.ejml.dense.block.decomposition.qr", + "org.ejml.dense.block.linsol.chol", + "org.ejml.dense.block.linsol.qr", + "org.ejml.dense.fixed", + "org.ejml.dense.row", + "org.ejml.dense.row.decomposition", + "org.ejml.dense.row.decomposition.bidiagonal", + "org.ejml.dense.row.decomposition.chol", + "org.ejml.dense.row.decomposition.eig", + "org.ejml.dense.row.decomposition.eig.symm", + "org.ejml.dense.row.decomposition.eig.watched", + "org.ejml.dense.row.decomposition.hessenberg", + "org.ejml.dense.row.decomposition.lu", + "org.ejml.dense.row.decomposition.qr", + "org.ejml.dense.row.decomposition.svd", + "org.ejml.dense.row.decomposition.svd.implicitqr", + "org.ejml.dense.row.factory", + "org.ejml.dense.row.linsol", + "org.ejml.dense.row.linsol.chol", + "org.ejml.dense.row.linsol.lu", + "org.ejml.dense.row.linsol.qr", + "org.ejml.dense.row.linsol.svd", + "org.ejml.dense.row.misc", + "org.ejml.dense.row.mult", + "org.ejml.generic" + ], + "org.ejml:ejml-fsparse": [ + "org.ejml.sparse.csc", + "org.ejml.sparse.csc.decomposition.chol", + "org.ejml.sparse.csc.decomposition.lu", + "org.ejml.sparse.csc.decomposition.qr", + "org.ejml.sparse.csc.factory", + "org.ejml.sparse.csc.linsol.chol", + "org.ejml.sparse.csc.linsol.lu", + "org.ejml.sparse.csc.linsol.qr", + "org.ejml.sparse.csc.misc", + "org.ejml.sparse.csc.mult", + "org.ejml.sparse.triplet" + ], + "org.ejml:ejml-simple": [ + "org.ejml.equation", + "org.ejml.simple", + "org.ejml.simple.ops" + ], + "org.ejml:ejml-zdense": [ + "org.ejml.dense.row", + "org.ejml.dense.row.decompose", + "org.ejml.dense.row.decompose.chol", + "org.ejml.dense.row.decompose.hessenberg", + "org.ejml.dense.row.decompose.lu", + "org.ejml.dense.row.decompose.qr", + "org.ejml.dense.row.factory", + "org.ejml.dense.row.linsol", + "org.ejml.dense.row.linsol.chol", + "org.ejml.dense.row.linsol.lu", + "org.ejml.dense.row.linsol.qr", + "org.ejml.dense.row.misc", + "org.ejml.dense.row.mult" + ], + "org.hamcrest:hamcrest-all": [ + "org.hamcrest", + "org.hamcrest.beans", + "org.hamcrest.collection", + "org.hamcrest.core", + "org.hamcrest.generator", + "org.hamcrest.generator.config", + "org.hamcrest.generator.qdox", + "org.hamcrest.generator.qdox.ant", + "org.hamcrest.generator.qdox.directorywalker", + "org.hamcrest.generator.qdox.junit", + "org.hamcrest.generator.qdox.model", + "org.hamcrest.generator.qdox.model.annotation", + "org.hamcrest.generator.qdox.model.util", + "org.hamcrest.generator.qdox.parser", + "org.hamcrest.generator.qdox.parser.impl", + "org.hamcrest.generator.qdox.parser.structs", + "org.hamcrest.generator.qdox.tools", + "org.hamcrest.integration", + "org.hamcrest.internal", + "org.hamcrest.number", + "org.hamcrest.object", + "org.hamcrest.text", + "org.hamcrest.xml" + ], + "org.hamcrest:hamcrest-core": [ + "org.hamcrest", + "org.hamcrest.core", + "org.hamcrest.internal" + ], + "org.hamcrest:hamcrest-library": [ + "org.hamcrest", + "org.hamcrest.beans", + "org.hamcrest.collection", + "org.hamcrest.number", + "org.hamcrest.object", + "org.hamcrest.text", + "org.hamcrest.xml" + ], + "org.junit.jupiter:junit-jupiter-api": [ + "org.junit.jupiter.api", + "org.junit.jupiter.api.condition", + "org.junit.jupiter.api.extension", + "org.junit.jupiter.api.extension.support", + "org.junit.jupiter.api.function", + "org.junit.jupiter.api.io", + "org.junit.jupiter.api.parallel" + ], + "org.junit.jupiter:junit-jupiter-engine": [ + "org.junit.jupiter.engine", + "org.junit.jupiter.engine.config", + "org.junit.jupiter.engine.descriptor", + "org.junit.jupiter.engine.discovery", + "org.junit.jupiter.engine.discovery.predicates", + "org.junit.jupiter.engine.execution", + "org.junit.jupiter.engine.extension", + "org.junit.jupiter.engine.support" + ], + "org.junit.jupiter:junit-jupiter-params": [ + "org.junit.jupiter.params", + "org.junit.jupiter.params.aggregator", + "org.junit.jupiter.params.converter", + "org.junit.jupiter.params.provider", + "org.junit.jupiter.params.shadow.com.univocity.parsers.annotations", + "org.junit.jupiter.params.shadow.com.univocity.parsers.annotations.helpers", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.beans", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.fields", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.input", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.input.concurrent", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.iterators", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.processor", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.processor.core", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.record", + "org.junit.jupiter.params.shadow.com.univocity.parsers.common.routine", + "org.junit.jupiter.params.shadow.com.univocity.parsers.conversions", + "org.junit.jupiter.params.shadow.com.univocity.parsers.csv", + "org.junit.jupiter.params.shadow.com.univocity.parsers.fixed", + "org.junit.jupiter.params.shadow.com.univocity.parsers.tsv", + "org.junit.jupiter.params.support" + ], + "org.junit.platform:junit-platform-commons": [ + "org.junit.platform.commons", + "org.junit.platform.commons.annotation", + "org.junit.platform.commons.function", + "org.junit.platform.commons.logging", + "org.junit.platform.commons.support", + "org.junit.platform.commons.util" + ], + "org.junit.platform:junit-platform-console": [ + "org.junit.platform.console", + "org.junit.platform.console.options", + "org.junit.platform.console.shadow.picocli", + "org.junit.platform.console.tasks" + ], + "org.junit.platform:junit-platform-engine": [ + "org.junit.platform.engine", + "org.junit.platform.engine.discovery", + "org.junit.platform.engine.reporting", + "org.junit.platform.engine.support.config", + "org.junit.platform.engine.support.descriptor", + "org.junit.platform.engine.support.discovery", + "org.junit.platform.engine.support.filter", + "org.junit.platform.engine.support.hierarchical", + "org.junit.platform.engine.support.store" + ], + "org.junit.platform:junit-platform-launcher": [ + "org.junit.platform.launcher", + "org.junit.platform.launcher.core", + "org.junit.platform.launcher.listeners", + "org.junit.platform.launcher.listeners.discovery", + "org.junit.platform.launcher.listeners.session", + "org.junit.platform.launcher.tagexpression" + ], + "org.junit.platform:junit-platform-reporting": [ + "org.junit.platform.reporting.legacy", + "org.junit.platform.reporting.legacy.xml", + "org.junit.platform.reporting.open.xml", + "org.junit.platform.reporting.shadow.org.opentest4j.reporting.events.api", + "org.junit.platform.reporting.shadow.org.opentest4j.reporting.events.core", + "org.junit.platform.reporting.shadow.org.opentest4j.reporting.events.java", + "org.junit.platform.reporting.shadow.org.opentest4j.reporting.events.root", + "org.junit.platform.reporting.shadow.org.opentest4j.reporting.schema" + ], + "org.mockito:mockito-core": [ + "org.mockito", + "org.mockito.codegen", + "org.mockito.configuration", + "org.mockito.creation.instance", + "org.mockito.exceptions.base", + "org.mockito.exceptions.misusing", + "org.mockito.exceptions.stacktrace", + "org.mockito.exceptions.verification", + "org.mockito.exceptions.verification.junit", + "org.mockito.exceptions.verification.opentest4j", + "org.mockito.hamcrest", + "org.mockito.internal", + "org.mockito.internal.configuration", + "org.mockito.internal.configuration.injection", + "org.mockito.internal.configuration.injection.filter", + "org.mockito.internal.configuration.injection.scanner", + "org.mockito.internal.configuration.plugins", + "org.mockito.internal.creation", + "org.mockito.internal.creation.bytebuddy", + "org.mockito.internal.creation.instance", + "org.mockito.internal.creation.proxy", + "org.mockito.internal.creation.settings", + "org.mockito.internal.creation.util", + "org.mockito.internal.debugging", + "org.mockito.internal.exceptions", + "org.mockito.internal.exceptions.stacktrace", + "org.mockito.internal.exceptions.util", + "org.mockito.internal.framework", + "org.mockito.internal.hamcrest", + "org.mockito.internal.handler", + "org.mockito.internal.invocation", + "org.mockito.internal.invocation.finder", + "org.mockito.internal.invocation.mockref", + "org.mockito.internal.junit", + "org.mockito.internal.listeners", + "org.mockito.internal.matchers", + "org.mockito.internal.matchers.apachecommons", + "org.mockito.internal.matchers.text", + "org.mockito.internal.progress", + "org.mockito.internal.reporting", + "org.mockito.internal.runners", + "org.mockito.internal.runners.util", + "org.mockito.internal.session", + "org.mockito.internal.stubbing", + "org.mockito.internal.stubbing.answers", + "org.mockito.internal.stubbing.defaultanswers", + "org.mockito.internal.util", + "org.mockito.internal.util.collections", + "org.mockito.internal.util.concurrent", + "org.mockito.internal.util.io", + "org.mockito.internal.util.reflection", + "org.mockito.internal.verification", + "org.mockito.internal.verification.api", + "org.mockito.internal.verification.argumentmatching", + "org.mockito.internal.verification.checkers", + "org.mockito.invocation", + "org.mockito.junit", + "org.mockito.listeners", + "org.mockito.mock", + "org.mockito.plugins", + "org.mockito.quality", + "org.mockito.session", + "org.mockito.stubbing", + "org.mockito.verification" + ], + "org.objenesis:objenesis": [ + "org.objenesis", + "org.objenesis.instantiator", + "org.objenesis.instantiator.android", + "org.objenesis.instantiator.annotations", + "org.objenesis.instantiator.basic", + "org.objenesis.instantiator.gcj", + "org.objenesis.instantiator.perc", + "org.objenesis.instantiator.sun", + "org.objenesis.instantiator.util", + "org.objenesis.strategy" + ], + "org.opentest4j:opentest4j": [ + "org.opentest4j" + ], + "org.ow2.asm:asm": [ + "org.objectweb.asm", + "org.objectweb.asm.signature" + ], + "us.hebi.quickbuf:quickbuf-runtime": [ + "us.hebi.quickbuf" + ] + }, + "repositories": { + "https://repo1.maven.org/maven2/": [ + "com.fasterxml.jackson.core:jackson-annotations", + "com.fasterxml.jackson.core:jackson-core", + "com.fasterxml.jackson.core:jackson-databind", + "com.google.auto.value:auto-value", + "com.google.auto.value:auto-value-annotations", + "com.google.auto:auto-common", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.testing.compile:compile-testing", + "com.google.truth:truth", + "com.googlecode.junit-toolbox:junit-toolbox", + "commons-io:commons-io", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "org.apache.ant:ant", + "org.apache.ant:ant-junit", + "org.apache.ant:ant-launcher", + "org.apiguardian:apiguardian-api", + "org.checkerframework:checker-qual", + "org.ejml:ejml-cdense", + "org.ejml:ejml-core", + "org.ejml:ejml-ddense", + "org.ejml:ejml-dsparse", + "org.ejml:ejml-fdense", + "org.ejml:ejml-fsparse", + "org.ejml:ejml-simple", + "org.ejml:ejml-zdense", + "org.hamcrest:hamcrest-all", + "org.hamcrest:hamcrest-core", + "org.hamcrest:hamcrest-library", + "org.junit.jupiter:junit-jupiter", + "org.junit.jupiter:junit-jupiter-api", + "org.junit.jupiter:junit-jupiter-engine", + "org.junit.jupiter:junit-jupiter-params", + "org.junit.platform:junit-platform-commons", + "org.junit.platform:junit-platform-console", + "org.junit.platform:junit-platform-engine", + "org.junit.platform:junit-platform-launcher", + "org.junit.platform:junit-platform-reporting", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.opentest4j:opentest4j", + "org.ow2.asm:asm", + "us.hebi.quickbuf:quickbuf-runtime" + ], + "https://frcmaven.wpi.edu/artifactory/release/": [ + "com.fasterxml.jackson.core:jackson-annotations", + "com.fasterxml.jackson.core:jackson-core", + "com.fasterxml.jackson.core:jackson-databind", + "com.google.auto.value:auto-value", + "com.google.auto.value:auto-value-annotations", + "com.google.auto:auto-common", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.google.testing.compile:compile-testing", + "com.google.truth:truth", + "com.googlecode.junit-toolbox:junit-toolbox", + "commons-io:commons-io", + "junit:junit", + "net.bytebuddy:byte-buddy", + "net.bytebuddy:byte-buddy-agent", + "org.apache.ant:ant", + "org.apache.ant:ant-junit", + "org.apache.ant:ant-launcher", + "org.apiguardian:apiguardian-api", + "org.checkerframework:checker-qual", + "org.ejml:ejml-cdense", + "org.ejml:ejml-core", + "org.ejml:ejml-ddense", + "org.ejml:ejml-dsparse", + "org.ejml:ejml-fdense", + "org.ejml:ejml-fsparse", + "org.ejml:ejml-simple", + "org.ejml:ejml-zdense", + "org.hamcrest:hamcrest-all", + "org.hamcrest:hamcrest-core", + "org.hamcrest:hamcrest-library", + "org.junit.jupiter:junit-jupiter", + "org.junit.jupiter:junit-jupiter-api", + "org.junit.jupiter:junit-jupiter-engine", + "org.junit.jupiter:junit-jupiter-params", + "org.junit.platform:junit-platform-commons", + "org.junit.platform:junit-platform-console", + "org.junit.platform:junit-platform-engine", + "org.junit.platform:junit-platform-launcher", + "org.junit.platform:junit-platform-reporting", + "org.mockito:mockito-core", + "org.objenesis:objenesis", + "org.opentest4j:opentest4j", + "org.ow2.asm:asm", + "us.hebi.quickbuf:quickbuf-runtime" + ] + }, + "services": { + "com.fasterxml.jackson.core:jackson-core": { + "com.fasterxml.jackson.core.JsonFactory": [ + "com.fasterxml.jackson.core.JsonFactory" + ] + }, + "com.fasterxml.jackson.core:jackson-databind": { + "com.fasterxml.jackson.core.ObjectCodec": [ + "com.fasterxml.jackson.databind.ObjectMapper" + ] + }, + "com.google.auto.value:auto-value": { + "autovalue.shaded.kotlinx.metadata.impl.extensions.MetadataExtensions": [ + "autovalue.shaded.kotlinx.metadata.jvm.impl.JvmMetadataExtensions" + ], + "com.google.auto.value.extension.AutoValueExtension": [ + "com.google.auto.value.extension.memoized.processor.MemoizeExtension", + "com.google.auto.value.extension.serializable.processor.SerializableAutoValueExtension", + "com.google.auto.value.extension.toprettystring.processor.ToPrettyStringExtension" + ], + "com.google.auto.value.extension.serializable.serializer.interfaces.SerializerExtension": [ + "com.google.auto.value.extension.serializable.serializer.impl.ImmutableListSerializerExtension", + "com.google.auto.value.extension.serializable.serializer.impl.ImmutableMapSerializerExtension", + "com.google.auto.value.extension.serializable.serializer.impl.OptionalSerializerExtension" + ], + "javax.annotation.processing.Processor": [ + "com.google.auto.value.extension.memoized.processor.MemoizedValidator", + "com.google.auto.value.extension.toprettystring.processor.ToPrettyStringValidator", + "com.google.auto.value.processor.AutoAnnotationProcessor", + "com.google.auto.value.processor.AutoBuilderProcessor", + "com.google.auto.value.processor.AutoOneOfProcessor", + "com.google.auto.value.processor.AutoValueBuilderProcessor", + "com.google.auto.value.processor.AutoValueProcessor" + ] + }, + "org.junit.jupiter:junit-jupiter-engine": { + "org.junit.platform.engine.TestEngine": [ + "org.junit.jupiter.engine.JupiterTestEngine" + ] + }, + "org.junit.platform:junit-platform-console": { + "java.util.spi.ToolProvider": [ + "org.junit.platform.console.ConsoleLauncherToolProvider" + ] + }, + "org.junit.platform:junit-platform-launcher": { + "org.junit.platform.launcher.TestExecutionListener": [ + "org.junit.platform.launcher.listeners.UniqueIdTrackingListener" + ] + }, + "org.junit.platform:junit-platform-reporting": { + "org.junit.platform.launcher.TestExecutionListener": [ + "org.junit.platform.reporting.open.xml.OpenTestReportGeneratingListener" + ] + } + }, + "version": "2" +} diff --git a/ntcore/BUILD.bazel b/ntcore/BUILD.bazel index fedf16b531..e2b7b7941c 100644 --- a/ntcore/BUILD.bazel +++ b/ntcore/BUILD.bazel @@ -1,9 +1,10 @@ load("@allwpilib_pip_deps//:requirements.bzl", "requirement") load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") load("//ntcore:generate_ntcore.bzl", "generate_ntcore") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") @@ -28,7 +29,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [requirement("jinja2")], ) @@ -42,50 +42,40 @@ write_source_files( visibility = ["//visibility:public"], ) -cc_library( - name = "generated_cc_headers", - hdrs = glob(["src/generated/main/native/include/**"]), - includes = ["src/generated/main/native/include"], - strip_include_prefix = "src/generated/main/native/include", - visibility = ["//ntcore:__subpackages__"], -) - -filegroup( - name = "generated_cc_source", - srcs = glob( - ["src/generated/main/native/cpp/**"], - exclude = ["src/generated/main/native/cpp/jni/**"], - ), - visibility = ["//ntcore:__subpackages__"], +third_party_cc_lib_helper( + name = "generated_cc", + include_root = "src/generated/main/native/include", + src_excludes = ["src/generated/main/native/cpp/jni/**"], + src_root = "src/generated/main/native/cpp", ) filegroup( name = "generated_jni", srcs = glob(["src/generated/main/native/cpp/jni/**"]), - visibility = ["//ntcore:__subpackages__"], ) filegroup( name = "generated_java", srcs = glob(["src/generated/main/java/**/*.java"]), - visibility = ["//ntcore:__subpackages__"], ) -cc_library( +wpilib_cc_library( name = "ntcore.static", srcs = glob( ["src/main/native/cpp/**"], exclude = ["src/main/native/cpp/jni/**"], - ) + [":generated_cc_source"], + ), hdrs = glob(["src/main/native/include/**/*"]), includes = [ "src/main/native/cpp", "src/main/native/include", ], strip_include_prefix = "src/main/native/include", + third_party_libraries = [ + ":generated_cc", + ], visibility = ["//visibility:public"], deps = [ - ":generated_cc_headers", "//datalog:datalog.static", "//wpinet:wpinet.static", "//wpiutil:wpiutil.static", diff --git a/ntcore/manualTests/java/Client.java b/ntcore/manualTests/java/Client.java deleted file mode 100644 index a329c83e61..0000000000 --- a/ntcore/manualTests/java/Client.java +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -import edu.wpi.first.wpilibj.networktables.*; -import edu.wpi.first.wpilibj.tables.*; - -public class Client { - private static class MyLogger implements NetworkTablesJNI.LoggerFunction { - public void apply(int level, String file, int line, String msg) { - System.err.println(msg); - } - } - - public static void main(String[] args) { - NetworkTablesJNI.setLogger(new MyLogger(), 0); - NetworkTable.setIPAddress("127.0.0.1"); - NetworkTable.setPort(10000); - NetworkTable.setClientMode(); - NetworkTable nt = NetworkTable.getTable(""); - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - } - try { - System.out.println("Got foo: " + nt.getNumber("foo")); - } catch (TableKeyNotDefinedException ex) { - } - nt.putBoolean("bar", false); - nt.setFlags("bar", NetworkTable.PERSISTENT); - nt.putBoolean("bar2", true); - nt.putBoolean("bar2", false); - nt.putBoolean("bar2", true); - nt.putString("str", "hello world"); - double[] nums = new double[3]; - nums[0] = 0.5; - nums[1] = 1.2; - nums[2] = 3.0; - nt.putNumberArray("numarray", nums); - String[] strs = new String[2]; - strs[0] = "Hello"; - strs[1] = "World"; - nt.putStringArray("strarray", strs); - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - } - } -} diff --git a/ntcore/manualTests/java/Server.java b/ntcore/manualTests/java/Server.java deleted file mode 100644 index 9527c96be0..0000000000 --- a/ntcore/manualTests/java/Server.java +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -import edu.wpi.first.wpilibj.networktables.*; -import edu.wpi.first.wpilibj.tables.*; - -public class Server { - private static class MyLogger implements NetworkTablesJNI.LoggerFunction { - public void apply(int level, String file, int line, String msg) { - System.err.println(msg); - } - } - - public static void main(String[] args) { - NetworkTablesJNI.setLogger(new MyLogger(), 0); - NetworkTable.setIPAddress("127.0.0.1"); - NetworkTable.setPort(10000); - NetworkTable.setServerMode(); - NetworkTable nt = NetworkTable.getTable(""); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - nt.putNumber("foo", 0.5); - nt.setFlags("foo", NetworkTable.PERSISTENT); - nt.putNumber("foo2", 0.5); - nt.putNumber("foo2", 0.7); - nt.putNumber("foo2", 0.6); - nt.putNumber("foo2", 0.5); - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - } - } -} diff --git a/ntcore/manualTests/native/client.cpp b/ntcore/manualTests/native/client.cpp deleted file mode 100644 index f9466738e6..0000000000 --- a/ntcore/manualTests/native/client.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -#include -#include -#include -#include - -#include "ntcore.h" - -int main() { - auto inst = nt::GetDefaultInstance(); - nt::AddLogger( - inst, - [](const nt::LogMessage& msg) { - std::fputs(msg.message.c_str(), stderr); - std::fputc('\n', stderr); - }, - 0, UINT_MAX); - nt::StartClient(inst, "127.0.0.1", 10000); - std::this_thread::sleep_for(std::chrono::seconds(2)); - - auto foo = nt::GetEntry(inst, "/foo"); - auto foo_val = nt::GetEntryValue(foo); - if (foo_val && foo_val->IsDouble()) { - std::printf("Got foo: %g\n", foo_val->GetDouble()); - } - - auto bar = nt::GetEntry(inst, "/bar"); - nt::SetEntryValue(bar, nt::Value::MakeBoolean(false)); - nt::SetEntryFlags(bar, NT_PERSISTENT); - - auto bar2 = nt::GetEntry(inst, "/bar2"); - nt::SetEntryValue(bar2, nt::Value::MakeBoolean(true)); - nt::SetEntryValue(bar2, nt::Value::MakeBoolean(false)); - nt::SetEntryValue(bar2, nt::Value::MakeBoolean(true)); - std::this_thread::sleep_for(std::chrono::seconds(10)); -} diff --git a/ntcore/manualTests/native/server.cpp b/ntcore/manualTests/native/server.cpp deleted file mode 100644 index 08259602bc..0000000000 --- a/ntcore/manualTests/native/server.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -#include -#include -#include -#include - -#include "ntcore.h" - -int main() { - auto inst = nt::GetDefaultInstance(); - nt::AddLogger( - inst, - [](const nt::LogMessage& msg) { - std::fputs(msg.message.c_str(), stderr); - std::fputc('\n', stderr); - }, - 0, UINT_MAX); - nt::StartServer(inst, "persistent.ini", "", 10000); - std::this_thread::sleep_for(std::chrono::seconds(1)); - - auto foo = nt::GetEntry(inst, "/foo"); - nt::SetEntryValue(foo, nt::Value::MakeDouble(0.5)); - nt::SetEntryFlags(foo, NT_PERSISTENT); - - auto foo2 = nt::GetEntry(inst, "/foo2"); - nt::SetEntryValue(foo2, nt::Value::MakeDouble(0.5)); - nt::SetEntryValue(foo2, nt::Value::MakeDouble(0.7)); - nt::SetEntryValue(foo2, nt::Value::MakeDouble(0.6)); - nt::SetEntryValue(foo2, nt::Value::MakeDouble(0.5)); - - std::this_thread::sleep_for(std::chrono::seconds(10)); -} diff --git a/romiVendordep/BUILD.bazel b/romiVendordep/BUILD.bazel index 7cc0913b6e..5a76a246bd 100644 --- a/romiVendordep/BUILD.bazel +++ b/romiVendordep/BUILD.bazel @@ -1,7 +1,8 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary", "java_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") -cc_library( +wpilib_cc_library( name = "romi-cpp.static", srcs = glob([ "src/main/native/cpp/**", diff --git a/shared/bazel/compiler_flags/systemcore_flags.rc b/shared/bazel/compiler_flags/systemcore_flags.rc index f50d4c203c..0fc2f12d86 100644 --- a/shared/bazel/compiler_flags/systemcore_flags.rc +++ b/shared/bazel/compiler_flags/systemcore_flags.rc @@ -2,7 +2,7 @@ build:systemcore --config=base_linux build:systemcore --platforms=@rules_bzlmodrio_toolchains//platforms/systemcore -build:systemcore --build_tag_filters=-no-bookworm +build:systemcore --build_tag_filters=-no-systemcore build:systemcore --features=compiler_param_file build:systemcore --platform_suffix=systemcore build:systemcore --incompatible_enable_cc_toolchain_resolution diff --git a/shared/bazel/rules/cc_rules.bzl b/shared/bazel/rules/cc_rules.bzl new file mode 100644 index 0000000000..67bc267f71 --- /dev/null +++ b/shared/bazel/rules/cc_rules.bzl @@ -0,0 +1,60 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + +def third_party_cc_lib_helper( + name, + include_root, + src_root = None, + src_excludes = [], + visibility = None): + """ + Helper for src / headers pairs that aren't directly compiled, but rather pulled into a bigger library. + + Due to allwpilibs directory structure of includes and sources living next to eachother, it often is required + to make a header shim to deal with the include path, and a filegroup of the sources. This pattern is extermely + common for the thirdparty libraries that live beneath certain libraries. + + This will produce a library shim with the include path stripped, and a filegroup of sources. + + Params + include_root: The package relative path to the header files. This will be used to glob the files and strip the include prefix + src_root: Optional. The package relative path to the source files. + src_excludes: Optional. Used to exclude files from the src_root glob + visibilty: The visibility of header shim / source files / package files + """ + cc_library( + name = name + "-headers", + hdrs = native.glob([ + include_root + "/**", + ]), + includes = [include_root], + strip_include_prefix = include_root, + visibility = visibility, + ) + + if src_root: + native.filegroup( + name = name + "-srcs", + srcs = native.glob([src_root + "/**"], exclude = src_excludes), + visibility = visibility, + ) + +def wpilib_cc_library( + name, + srcs = [], + deps = [], + third_party_libraries = [], + third_party_header_only_libraries = [], + **kwargs): + """ + This function is used to ease the creation of a cc_library with helpers for handling thirdparty libraries in the standard allwpilib format. + + Params: + third_party_libraries: These are helper dependencies, created by third_party_cc_lib_helper. Header shims will be added as deps and src filegroups will be added to srcs + third_party_header_only_libraries: Similar to third_party_libraries, but for shims that contain no sources + """ + cc_library( + name = name, + srcs = srcs + [lib + "-srcs" for lib in third_party_libraries], + deps = deps + [lib + "-headers" for lib in third_party_libraries + third_party_header_only_libraries], + **kwargs + ) diff --git a/shared/bazel/rules/gen/BUILD.bazel b/shared/bazel/rules/gen/BUILD.bazel index 49f2e10eb9..6fb915c7e2 100644 --- a/shared/bazel/rules/gen/BUILD.bazel +++ b/shared/bazel/rules/gen/BUILD.bazel @@ -3,6 +3,9 @@ load("@rules_python//python:defs.bzl", "py_binary") py_binary( name = "gen_resources", srcs = ["gen_resources.py"], - tags = ["manual"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), visibility = ["//visibility:public"], ) diff --git a/shared/bazel/rules/halsim_library.bzl b/shared/bazel/rules/halsim_library.bzl new file mode 100644 index 0000000000..475094d405 --- /dev/null +++ b/shared/bazel/rules/halsim_library.bzl @@ -0,0 +1,18 @@ +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") + +def wpilib_halsim_extension( + name, + **kwargs): + """ + Helper wrapper for creating a HALSIM extension. Provides some of the default argments for creating the library. + """ + wpilib_cc_library( + name = name, + includes = ["src/main/native/include"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), + visibility = ["//visibility:public"], + **kwargs + ) diff --git a/shared/bazel/rules/java_rules.bzl b/shared/bazel/rules/java_rules.bzl index b712c0cb7c..47f36d28ff 100644 --- a/shared/bazel/rules/java_rules.bzl +++ b/shared/bazel/rules/java_rules.bzl @@ -30,6 +30,6 @@ def wpilib_java_junit5_test( main_class = "org.junit.platform.console.ConsoleLauncher", use_testrunner = False, testonly = True, - tags = tags + ["no-roborio", "no-bionic", "no-raspbian", "allwpilib-build-java", "no-asan", "no-tsan", "no-ubsan"], + tags = tags + ["allwpilib-build-java", "no-asan", "no-tsan", "no-ubsan"], **kwargs ) diff --git a/shared/bazel/rules/jni_rules.bzl b/shared/bazel/rules/jni_rules.bzl index dfc23dbb48..1b93b888c2 100644 --- a/shared/bazel/rules/jni_rules.bzl +++ b/shared/bazel/rules/jni_rules.bzl @@ -81,7 +81,6 @@ def wpilib_jni_java_library( jni = "@rules_bzlmodrio_toolchains//jni" _jni_headers( name = headers_name, - tags = ["manual"], jni = jni, lib = ":" + name, testonly = testonly, diff --git a/simulation/halsim_ds_socket/BUILD.bazel b/simulation/halsim_ds_socket/BUILD.bazel index f11e9f6e64..0a1e373fe8 100644 --- a/simulation/halsim_ds_socket/BUILD.bazel +++ b/simulation/halsim_ds_socket/BUILD.bazel @@ -1,4 +1,5 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("//shared/bazel/rules:halsim_library.bzl", "wpilib_halsim_extension") cc_library( name = "headers", @@ -6,15 +7,9 @@ cc_library( includes = ["src/main/native/include"], ) -cc_library( +wpilib_halsim_extension( name = "halsim_ds_socket", srcs = glob(["src/main/native/cpp/**"]), - target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], - "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], deps = [ ":headers", "//hal:wpiHal.static", @@ -25,10 +20,7 @@ cc_library( cc_test( name = "halsim_ds_socket-test", size = "small", - srcs = glob([ - "src/test/native/**/*.cpp", - "src/test/native/**/*.h", - ]), + srcs = glob(["src/test/native/**/*.cpp"]), deps = [ "//simulation/halsim_ds_socket", "//thirdparty/googletest:googletest.static", diff --git a/simulation/halsim_gui/BUILD.bazel b/simulation/halsim_gui/BUILD.bazel index 40e9fc79c7..1dcf111b98 100644 --- a/simulation/halsim_gui/BUILD.bazel +++ b/simulation/halsim_gui/BUILD.bazel @@ -1,21 +1,15 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") +load("//shared/bazel/rules:halsim_library.bzl", "wpilib_halsim_extension") -cc_library( +wpilib_halsim_extension( name = "halsim_gui", srcs = glob([ "src/main/native/cpp/*", "src/main/native/include/*.h", ]), - includes = ["src/main/native/include"], tags = [ "wpi-cpp-gui", ], - target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], - "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], deps = [ "//glass:libglassnt", "//hal:wpiHal.static", @@ -25,10 +19,7 @@ cc_library( cc_test( name = "halsim_gui-test", size = "small", - srcs = glob([ - "src/test/native/**/*.cpp", - "src/test/native/**/*.h", - ]), + srcs = glob(["src/test/native/**/*.cpp"]), tags = [ "no-asan", "wpi-cpp-gui", diff --git a/simulation/halsim_ws_client/BUILD.bazel b/simulation/halsim_ws_client/BUILD.bazel index 49948187ec..4740502357 100644 --- a/simulation/halsim_ws_client/BUILD.bazel +++ b/simulation/halsim_ws_client/BUILD.bazel @@ -1,18 +1,12 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") +load("@rules_cc//cc:defs.bzl", "cc_binary") +load("//shared/bazel/rules:halsim_library.bzl", "wpilib_halsim_extension") -cc_library( +wpilib_halsim_extension( name = "halsim_ws_client", srcs = glob([ "src/main/native/cpp/*.cpp", "src/main/native/include/*.h", ]), - includes = ["src/main/native/include"], - target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], - "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], deps = [ "//simulation/halsim_ws_core", ], diff --git a/simulation/halsim_ws_core/BUILD.bazel b/simulation/halsim_ws_core/BUILD.bazel index 93cbcc3bad..52d9696d5e 100644 --- a/simulation/halsim_ws_core/BUILD.bazel +++ b/simulation/halsim_ws_core/BUILD.bazel @@ -1,12 +1,9 @@ -load("@rules_cc//cc:defs.bzl", "cc_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") -cc_library( +wpilib_cc_library( name = "halsim_ws_core", srcs = glob(["src/main/native/cpp/*.cpp"]), - hdrs = glob([ - "src/main/native/include/*.h", - "src/main/native/include/*.inc", - ]), + hdrs = glob(["src/main/native/include/*.h"]), strip_include_prefix = "src/main/native/include", target_compatible_with = select({ "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], diff --git a/simulation/halsim_ws_server/BUILD.bazel b/simulation/halsim_ws_server/BUILD.bazel index 34840b6a0e..625a563a20 100644 --- a/simulation/halsim_ws_server/BUILD.bazel +++ b/simulation/halsim_ws_server/BUILD.bazel @@ -1,4 +1,5 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("//shared/bazel/rules:halsim_library.bzl", "wpilib_halsim_extension") cc_library( name = "headers", @@ -6,15 +7,9 @@ cc_library( includes = ["src/main/native/include"], ) -cc_library( +wpilib_halsim_extension( name = "halsim_ws_server", srcs = glob(["src/main/native/cpp/**"]), - target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], - "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], deps = [ ":headers", "//simulation/halsim_ws_core", diff --git a/simulation/halsim_xrp/BUILD.bazel b/simulation/halsim_xrp/BUILD.bazel index 000a60fc50..23dd143d51 100644 --- a/simulation/halsim_xrp/BUILD.bazel +++ b/simulation/halsim_xrp/BUILD.bazel @@ -1,18 +1,12 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") +load("@rules_cc//cc:defs.bzl", "cc_binary") +load("//shared/bazel/rules:halsim_library.bzl", "wpilib_halsim_extension") -cc_library( +wpilib_halsim_extension( name = "halsim_xrp", srcs = glob([ "src/main/native/cpp/*", "src/main/native/include/*.h", ]), - includes = ["src/main/native/include"], - target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], - "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], - "//conditions:default": [], - }), - visibility = ["//visibility:public"], deps = [ "//simulation/halsim_ws_core", "//xrpVendordep:xrp-cpp", diff --git a/sysid/BUILD.bazel b/sysid/BUILD.bazel index 4372fdfb70..6735aa5333 100644 --- a/sysid/BUILD.bazel +++ b/sysid/BUILD.bazel @@ -6,7 +6,6 @@ generate_version_file( name = "generate-version", output_file = "WPILibVersion.cpp", template = "src/main/generate/WPILibVersion.cpp.in", - visibility = ["//sysid:__subpackages__"], ) generate_resources( @@ -27,7 +26,6 @@ cc_library( ], hdrs = glob(["src/main/native/include/**"]), strip_include_prefix = "src/main/native/include", - visibility = ["//sysid:__subpackages__"], deps = [ "//datalog:datalog.static", "//glass:libglass", diff --git a/thirdparty/googletest/BUILD.bazel b/thirdparty/googletest/BUILD.bazel index 198ae1e0c2..1cb41818f6 100644 --- a/thirdparty/googletest/BUILD.bazel +++ b/thirdparty/googletest/BUILD.bazel @@ -1,6 +1,6 @@ -load("@rules_cc//cc:defs.bzl", "cc_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") -cc_library( +wpilib_cc_library( name = "googletest.static", srcs = glob(["src/**"]), hdrs = glob(["include/**"]), diff --git a/thirdparty/imgui_suite/BUILD.bazel b/thirdparty/imgui_suite/BUILD.bazel index 3e4bf54263..dc5821db5b 100644 --- a/thirdparty/imgui_suite/BUILD.bazel +++ b/thirdparty/imgui_suite/BUILD.bazel @@ -1,5 +1,6 @@ load("@rules_cc//cc:defs.bzl", "cc_library") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:objectivec_rules.bzl", "wpilib_objc_library") cc_library( @@ -168,7 +169,11 @@ cc_library( "@bazel_tools//src/conditions:windows": WINDOWS_DEFINES, "@rules_bzlmodrio_toolchains//constraints/combined:is_linux": LINUX_DEFINES, }), - tags = ["manual"], + target_compatible_with = select({ + "@bazel_tools//src/conditions:windows": [], + "@rules_bzlmodrio_toolchains//constraints/combined:is_linux": [], + "//conditions:default": ["@platforms//:incompatible"], + }), deps = [ ":glfw_hdrs", ], @@ -203,7 +208,6 @@ cc_library( "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//thirdparty/imgui_suite:__subpackages__"], deps = [":glfw_hdrs"] + select({ "@bazel_tools//src/conditions:darwin": [":glfw_src_darwin"], "@bazel_tools//src/conditions:windows": [":glfw_src"], @@ -281,8 +285,11 @@ cc_library( ], linkstatic = True, strip_include_prefix = "imgui/include", - tags = ["manual"], - visibility = ["//thirdparty/imgui_suite:__subpackages__"], + target_compatible_with = select({ + "@bazel_tools//src/conditions:windows": [], + "@rules_bzlmodrio_toolchains//constraints/combined:is_linux": [], + "//conditions:default": ["@platforms//:incompatible"], + }), deps = [ ":glfw", ], @@ -305,7 +312,6 @@ wpilib_objc_library( cc_library( name = "imgui", - visibility = ["//thirdparty/imgui_suite:__subpackages__"], deps = select({ "@bazel_tools//src/conditions:darwin": [":imgui_src_darwin"], "@bazel_tools//src/conditions:windows": [":imgui_src"], @@ -324,7 +330,6 @@ cc_library( includes = ["implot/include"], linkstatic = True, strip_include_prefix = "implot/include", - visibility = ["//thirdparty/imgui_suite:__subpackages__"], deps = [ "//thirdparty/imgui_suite:imgui", ], @@ -340,13 +345,12 @@ cc_library( hdrs = glob(["stb/include/**"]), linkstatic = True, strip_include_prefix = "stb/include", - visibility = ["//visibility:public"], ) ######################################### # IMGUI suite ######################################### -cc_library( +wpilib_cc_library( name = "imgui_suite", linkstatic = True, visibility = ["//visibility:public"], diff --git a/wpigui/BUILD.bazel b/wpigui/BUILD.bazel index fcaefac228..6d6b965d16 100644 --- a/wpigui/BUILD.bazel +++ b/wpigui/BUILD.bazel @@ -1,4 +1,5 @@ load("@rules_cc//cc:defs.bzl", "cc_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") load("//shared/bazel/rules:objectivec_rules.bzl", "wpilib_objc_library") WIN_SRCS = glob(["src/main/native/directx11/**/*.cpp"]) @@ -31,7 +32,7 @@ wpilib_objc_library( ], ) -cc_library( +wpilib_cc_library( name = "wpigui", srcs = glob(["src/main/native/cpp/**/*.cpp"]) + select({ diff --git a/wpilibNewCommands/BUILD.bazel b/wpilibNewCommands/BUILD.bazel index 5011bba0c5..aa9eced156 100644 --- a/wpilibNewCommands/BUILD.bazel +++ b/wpilibNewCommands/BUILD.bazel @@ -1,8 +1,9 @@ load("@allwpilib_pip_deps//:requirements.bzl", "requirement") load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary", "java_library") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//wpilibNewCommands:generate.bzl", "generate_wpilib_new_commands") @@ -10,11 +11,9 @@ py_binary( name = "generate_hids", srcs = ["generate_hids.py"], target_compatible_with = select({ - "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@platforms//:incompatible"], "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [requirement("jinja2")], ) @@ -23,7 +22,6 @@ filegroup( srcs = glob(["src/generate/main/**"]) + [ "//wpilibj:hid_schema", ], - visibility = ["//wpilibNewCommands:__subpackages__"], ) generate_wpilib_new_commands( @@ -40,35 +38,28 @@ write_source_files( visibility = ["//visibility:public"], ) -cc_library( - name = "generated_cc_headers", - hdrs = glob(["src/generated/main/native/include/**"]), - includes = ["src/generated/main/native/include"], - strip_include_prefix = "src/generated/main/native/include", - visibility = ["//wpilibNewCommands:__subpackages__"], -) - -filegroup( - name = "generated_cc_source", - srcs = glob(["src/generated/main/native/cpp/**"]), - visibility = ["//wpilibNewCommands:__subpackages__"], +third_party_cc_lib_helper( + name = "generated_cc", + include_root = "src/generated/main/native/include", + src_root = "src/generated/main/native/cpp", ) filegroup( name = "generated_java", srcs = glob(["src/generated/main/java/**/*.java"]), - visibility = ["//wpilibNewCommands:__subpackages__"], ) -cc_library( +wpilib_cc_library( name = "wpilibNewCommands.static", - srcs = glob(["src/main/native/cpp/**"]) + [":generated_cc_source"], + srcs = glob(["src/main/native/cpp/**"]), hdrs = glob(["src/main/native/include/**"]), includes = ["src/main/native/include"], strip_include_prefix = "src/main/native/include", + third_party_libraries = [ + ":generated_cc", + ], visibility = ["//visibility:public"], deps = [ - ":generated_cc_headers", "//wpilibc:wpilibc.static", ], ) diff --git a/wpilibc/BUILD.bazel b/wpilibc/BUILD.bazel index e7c8fe9538..c6c56db567 100644 --- a/wpilibc/BUILD.bazel +++ b/wpilibc/BUILD.bazel @@ -2,22 +2,27 @@ load("@allwpilib_pip_deps//:requirements.bzl", "requirement") load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules/gen:gen-version-file.bzl", "generate_version_file") load("//wpilibc:generate.bzl", "generate_wpilibc") py_binary( name = "generate_hids", srcs = ["generate_hids.py"], - tags = ["manual"], - visibility = ["//visibility:public"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [requirement("jinja2")], ) py_binary( name = "generate_pwm_motor_controllers", srcs = ["generate_pwm_motor_controllers.py"], - tags = ["manual"], - visibility = ["//visibility:public"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [requirement("jinja2")], ) @@ -30,7 +35,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [ ":generate_hids", ":generate_pwm_motor_controllers", @@ -43,7 +47,6 @@ filegroup( "//wpilibj:hid_schema", "//wpilibj:pwm_schema", ], - visibility = ["//wpilibc:__subpackages__"], ) generate_wpilibc( @@ -54,7 +57,6 @@ generate_version_file( name = "generate-version", output_file = "WPILibVersion.cpp", template = "src/generate/WPILibVersion.cpp.in", - visibility = ["//wpilibc:__subpackages__"], ) write_source_files( @@ -67,36 +69,27 @@ write_source_files( visibility = ["//visibility:public"], ) -cc_library( - name = "generated_cc_headers", - hdrs = glob(["src/generated/main/native/include/**"]), - includes = ["src/generated/main/native/include"], - strip_include_prefix = "src/generated/main/native/include", - visibility = ["//wpilibc:__subpackages__"], +third_party_cc_lib_helper( + name = "generated_cc", + include_root = "src/generated/main/native/include", + src_root = "src/generated/main/native/cpp", ) -filegroup( - name = "generated_cc_source", - srcs = glob( - ["src/generated/main/native/cpp/**"], - exclude = ["src/generated/main/native/cpp/jni/**"], - ), - visibility = ["//wpilibc:__subpackages__"], -) - -cc_library( +wpilib_cc_library( name = "wpilibc.static", srcs = [ ":generate-version", ] + glob([ "src/main/native/cppcs/**", "src/main/native/cpp/**", - ]) + [":generated_cc_source"], + ]), hdrs = glob(["src/main/native/include/**"]), strip_include_prefix = "src/main/native/include", + third_party_libraries = [ + ":generated_cc", + ], visibility = ["//visibility:public"], deps = [ - ":generated_cc_headers", "//cameraserver:cameraserver.static", "//cscore:cscore.static", "//datalog:datalog.static", diff --git a/wpilibcExamples/build_cpp_examples.bzl b/wpilibcExamples/build_cpp_examples.bzl index 1929d48ac3..c31943aeb0 100644 --- a/wpilibcExamples/build_cpp_examples.bzl +++ b/wpilibcExamples/build_cpp_examples.bzl @@ -5,13 +5,13 @@ def build_examples(halsim_deps = []): for folder in EXAMPLE_FOLDERS: cc_library( name = folder + "-examples-headers", - hdrs = native.glob(["src/main/cpp/examples/" + folder + "/include/**/*.h"]), + hdrs = native.glob(["src/main/cpp/examples/" + folder + "/include/**/*.h"], allow_empty = True), strip_include_prefix = "src/main/cpp/examples/" + folder + "/include", tags = ["wpi-example"], ) cc_binary( name = folder + "-example", - srcs = native.glob(["src/main/cpp/examples/" + folder + "/cpp/**/*.cpp", "src/main/cpp/examples/" + folder + "/c/**/*.c"]), + srcs = native.glob(["src/main/cpp/examples/" + folder + "/cpp/**/*.cpp", "src/main/cpp/examples/" + folder + "/c/**/*.c"], allow_empty = True), deps = [ "//wpilibNewCommands:wpilibNewCommands.static", "//apriltag:apriltag.static", @@ -40,7 +40,6 @@ def build_snippets(): cc_library( name = folder + "-template", srcs = native.glob(["src/main/cpp/snippets/" + folder + "/**/*.cpp"]), - hdrs = native.glob(["src/main/cpp/snippets/" + folder + "/**/*.h"]), deps = [ "//wpilibNewCommands:wpilibNewCommands.static", ], @@ -68,7 +67,7 @@ def build_tests(): cc_test( name = folder + "-test", size = "small", - srcs = native.glob([example_test_folder + "/**/*.cpp", example_src_folder + "/cpp/**/*.cpp", example_src_folder + "/c/**/*.c"]), + srcs = native.glob([example_test_folder + "/**/*.cpp", example_src_folder + "/cpp/**/*.cpp", example_src_folder + "/c/**/*.c"], allow_empty = True), deps = [ "//wpilibNewCommands:wpilibNewCommands.static", ":{}-examples-headers".format(folder), diff --git a/wpilibcExamples/example_projects.bzl b/wpilibcExamples/example_projects.bzl index 1e51762b97..00efb034ce 100644 --- a/wpilibcExamples/example_projects.bzl +++ b/wpilibcExamples/example_projects.bzl @@ -91,5 +91,12 @@ TEMPLATES_FOLDERS = [ ] TESTS_FOLDERS = [ + "ArmSimulation", + "DigitalCommunication", + "ElevatorSimulation", + "I2CCommunication", + "MecanumControllerCommand", + "PotentiometerPID", + "SwerveControllerCommand", "UnitTest", ] diff --git a/wpilibcExamples/src/main/cpp/examples/examples.json b/wpilibcExamples/src/main/cpp/examples/examples.json index db43c3002c..ad4703d8fc 100644 --- a/wpilibcExamples/src/main/cpp/examples/examples.json +++ b/wpilibcExamples/src/main/cpp/examples/examples.json @@ -164,7 +164,8 @@ ], "foldername": "PotentiometerPID", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "Elevator with exponential profiled PID", @@ -257,7 +258,8 @@ ], "foldername": "I2CCommunication", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "Digital Communication Sample", @@ -268,7 +270,8 @@ ], "foldername": "DigitalCommunication", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "HTTP Camera", @@ -474,7 +477,8 @@ ], "foldername": "MecanumControllerCommand", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "SwerveControllerCommand", @@ -491,7 +495,8 @@ ], "foldername": "SwerveControllerCommand", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "DriveDistanceOffboard", @@ -615,7 +620,8 @@ ], "foldername": "ElevatorSimulation", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "Elevator Exponential Profile Simulation", @@ -675,7 +681,8 @@ ], "foldername": "ArmSimulation", "gradlebase": "cpp", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "UnitTesting", diff --git a/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/RamseteCommandTest.cpp b/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/RamseteCommandTest.cpp deleted file mode 100644 index 74d84f167f..0000000000 --- a/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/RamseteCommandTest.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -#include - -#include -#include -#include -#include - -#include "Robot.h" - -class MecanumControllerCommandTest : public testing::Test { - Robot m_robot; - std::optional m_thread; - bool joystickWarning; - - public: - void SetUp() override { - frc::sim::PauseTiming(); - joystickWarning = frc::DriverStation::IsJoystickConnectionWarningSilenced(); - frc::DriverStation::SilenceJoystickConnectionWarning(true); - - m_thread = std::thread([&] { m_robot.StartCompetition(); }); - frc::sim::StepTiming(0.0_ms); // Wait for Notifiers - } - - void TearDown() override { - m_robot.EndCompetition(); - m_thread->join(); - - frc::sim::DriverStationSim::ResetData(); - frc::DriverStation::SilenceJoystickConnectionWarning(joystickWarning); - } -}; - -TEST_F(MecanumControllerCommandTest, Match) { - // auto - frc::sim::DriverStationSim::SetAutonomous(true); - frc::sim::DriverStationSim::SetEnabled(true); - frc::sim::DriverStationSim::NotifyNewData(); - - frc::sim::StepTiming(15_s); - - // brief disabled period- exact duration shouldn't matter - frc::sim::DriverStationSim::SetAutonomous(false); - frc::sim::DriverStationSim::SetEnabled(false); - frc::sim::DriverStationSim::NotifyNewData(); - - frc::sim::StepTiming(3_s); - - // teleop - frc::sim::DriverStationSim::SetAutonomous(false); - frc::sim::DriverStationSim::SetEnabled(true); - frc::sim::DriverStationSim::NotifyNewData(); - - frc::sim::StepTiming(135_s); - - // end of match - frc::sim::DriverStationSim::SetAutonomous(false); - frc::sim::DriverStationSim::SetEnabled(false); - frc::sim::DriverStationSim::NotifyNewData(); -} diff --git a/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/main.cpp b/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/main.cpp deleted file mode 100644 index 38d5cfa2fe..0000000000 --- a/wpilibcExamples/src/test/cpp/examples/RamseteCommand/cpp/main.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) FIRST and other WPILib contributors. -// Open Source Software; you can modify and/or share it under the terms of -// the WPILib BSD license file in the root directory of this project. - -#include -#include - -/** - * Runs all unit tests. - */ -int main(int argc, char** argv) { - HAL_Initialize(500, 0); - ::testing::InitGoogleTest(&argc, argv); - int ret = RUN_ALL_TESTS(); - return ret; -} diff --git a/wpilibj/BUILD.bazel b/wpilibj/BUILD.bazel index 9af93f7454..478828e341 100644 --- a/wpilibj/BUILD.bazel +++ b/wpilibj/BUILD.bazel @@ -15,7 +15,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [requirement("jinja2")], ) @@ -27,7 +26,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [requirement("jinja2")], ) @@ -40,7 +38,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [ ":generate_hids", ":generate_pwm_motor_controllers", @@ -65,13 +62,11 @@ generate_version_file( name = "generate-version", output_file = "WPILibVersion.java", template = "src/generate/WPILibVersion.java.in", - visibility = ["//visibility:public"], ) filegroup( name = "generated_java", srcs = glob(["src/generated/main/java/**/*.java"]), - visibility = ["//wpilibj:__subpackages__"], ) java_library( diff --git a/wpilibjExamples/BUILD.bazel b/wpilibjExamples/BUILD.bazel index 4161746bab..e368963e55 100644 --- a/wpilibjExamples/BUILD.bazel +++ b/wpilibjExamples/BUILD.bazel @@ -1,6 +1,6 @@ load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_file") load("@rules_python//python:defs.bzl", "py_binary") -load("//wpilibjExamples:build_java_examples.bzl", "build_commands", "build_examples", "build_snippets", "build_templates") +load("//wpilibjExamples:build_java_examples.bzl", "build_commands", "build_examples", "build_snippets", "build_templates", "build_tests") py_binary( name = "generate_bazel_files", @@ -44,3 +44,5 @@ build_examples(halsim_deps = halsim_deps) build_snippets() build_templates() + +build_tests() diff --git a/wpilibjExamples/build_java_examples.bzl b/wpilibjExamples/build_java_examples.bzl index bc2712c510..45aae0cbd7 100644 --- a/wpilibjExamples/build_java_examples.bzl +++ b/wpilibjExamples/build_java_examples.bzl @@ -1,5 +1,6 @@ load("@rules_java//java:defs.bzl", "java_binary", "java_library") -load("//wpilibjExamples:example_projects.bzl", "COMMANDS_V2_FOLDERS", "EXAMPLES_FOLDERS", "SNIPPETS_FOLDERS", "TEMPLATES_FOLDERS") +load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") +load("//wpilibjExamples:example_projects.bzl", "COMMANDS_V2_FOLDERS", "EXAMPLES_FOLDERS", "SNIPPETS_FOLDERS", "TEMPLATES_FOLDERS", "TEST_FOLDERS") def build_examples(halsim_deps): for folder in EXAMPLES_FOLDERS: @@ -69,3 +70,20 @@ def build_templates(): ], tags = ["wpi-example"], ) + +def build_tests(): + for folder in TEST_FOLDERS: + wpilib_java_junit5_test( + name = folder + "-test", + srcs = native.glob(["src/test/java/edu/wpi/first/wpilibj/examples/" + folder + "/**/*.java"]), + deps = [ + ":" + folder + "-example", + "//hal:hal-java", + "//ntcore:networktables-java", + "//wpilibj:wpilibj", + "//wpilibNewCommands:wpilibNewCommands-java", + "//wpimath:wpimath-java", + "//wpiutil:wpiutil-java", + ], + tags = ["wpi-example"], + ) diff --git a/wpilibjExamples/example_projects.bzl b/wpilibjExamples/example_projects.bzl index cf494de4a1..b94450df38 100644 --- a/wpilibjExamples/example_projects.bzl +++ b/wpilibjExamples/example_projects.bzl @@ -97,5 +97,10 @@ TEMPLATES_FOLDERS = [ ] TEST_FOLDERS = [ + "armsimulation", + "digitalcommunication", + "elevatorsimulation", + "i2ccommunication", + "potentiometerpid", "unittest", ] diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/examples.json b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/examples.json index 57dc5fff60..b125ddb503 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/examples.json +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/examples.json @@ -114,7 +114,8 @@ "foldername": "potentiometerpid", "gradlebase": "java", "mainclass": "Main", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "Elevator with trapezoid profiled PID", @@ -607,7 +608,8 @@ "foldername": "elevatorsimulation", "gradlebase": "java", "mainclass": "Main", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "Elevator Exponential Profile Simulation", @@ -640,7 +642,8 @@ "foldername": "armsimulation", "gradlebase": "java", "mainclass": "Main", - "commandversion": 2 + "commandversion": 2, + "hasunittests": true }, { "name": "UnitTesting", @@ -749,7 +752,8 @@ "foldername": "digitalcommunication", "gradlebase": "java", "commandversion": 2, - "mainclass": "Main" + "mainclass": "Main", + "hasunittests": true }, { "name": "I2C Communication Sample", @@ -761,7 +765,8 @@ "foldername": "i2ccommunication", "gradlebase": "java", "commandversion": 2, - "mainclass": "Main" + "mainclass": "Main", + "hasunittests": true }, { "name": "Flywheel BangBangController", diff --git a/wpimath/BUILD.bazel b/wpimath/BUILD.bazel index 85e143ff9d..2076a10d1f 100644 --- a/wpimath/BUILD.bazel +++ b/wpimath/BUILD.bazel @@ -3,6 +3,7 @@ load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") load("//wpimath:generate.bzl", "generate_wpimath") @@ -25,7 +26,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], ) py_binary( @@ -37,7 +37,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [requirement("jinja2")], ) @@ -49,7 +48,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], ) py_binary( @@ -61,7 +59,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], deps = [ ":generate_nanopb", ":generate_numbers", @@ -87,43 +84,22 @@ write_source_files( filegroup( name = "generated_java", srcs = glob(["src/generated/main/java/**/*.java"]), - visibility = ["//wpimath:__subpackages__"], ) -cc_library( - name = "eigen-headers", - hdrs = glob([ - "src/main/native/thirdparty/eigen/include/**", - ]), - includes = ["src/main/native/thirdparty/eigen/include"], - strip_include_prefix = "src/main/native/thirdparty/eigen/include", - visibility = ["//wpimath:__subpackages__"], +third_party_cc_lib_helper( + name = "eigen", + include_root = "src/main/native/thirdparty/eigen/include", ) -cc_library( +third_party_cc_lib_helper( name = "gcem", - hdrs = glob([ - "src/main/native/thirdparty/gcem/include/**", - ]), - includes = ["src/main/native/thirdparty/gcem/include"], - strip_include_prefix = "src/main/native/thirdparty/gcem/include", - visibility = ["//wpimath:__subpackages__"], + include_root = "src/main/native/thirdparty/gcem/include", ) -cc_library( - name = "sleipnir-headers", - hdrs = glob([ - "src/main/native/thirdparty/sleipnir/include/**/*.hpp", - ]), - includes = ["src/main/native/thirdparty/sleipnir/include"], - strip_include_prefix = "src/main/native/thirdparty/sleipnir/include", - visibility = ["//wpimath:__subpackages__"], -) - -filegroup( - name = "sleipnir-srcs", - srcs = glob(["src/main/native/thirdparty/sleipnir/src/**"]), - visibility = ["//wpimath:__subpackages__"], +third_party_cc_lib_helper( + name = "sleipnir", + include_root = "src/main/native/thirdparty/sleipnir/include", + src_root = "src/main/native/thirdparty/sleipnir/src", ) cc_library( @@ -131,10 +107,9 @@ cc_library( hdrs = glob(["src/generated/main/native/cpp/**/*.h"]), includes = ["src/generated/main/native/cpp"], strip_include_prefix = "src/generated/main/native/cpp", - visibility = ["//wpiutil:__subpackages__"], ) -cc_library( +wpilib_cc_library( name = "wpimath.static", srcs = glob( [ @@ -142,7 +117,7 @@ cc_library( "src/generated/main/native/cpp/**/*.cpp", ], exclude = ["src/main/native/cpp/jni/**"], - ) + [":sleipnir-srcs"], + ), hdrs = glob(["src/main/native/include/**"]), defines = ["WPILIB_EXPORTS"], includes = [ @@ -150,12 +125,16 @@ cc_library( "src/main/native/thirdparty/sleipnir/src", ], strip_include_prefix = "src/main/native/include", + third_party_header_only_libraries = [ + ":eigen", + ":gcem", + ], + third_party_libraries = [ + ":sleipnir", + ], visibility = ["//visibility:public"], deps = [ - ":eigen-headers", - ":gcem", ":nanopb-generated-headers", - ":sleipnir-headers", "//wpiutil:wpiutil.static", ], ) @@ -203,10 +182,6 @@ cc_test( "src/test/native/cpp/**/*.cpp", "src/test/native/cpp/**/*.h", ]), - tags = [ - "no-bullseye", - "no-raspi", - ], deps = [ ":test_headers", ":wpimath.static", @@ -247,5 +222,8 @@ java_binary( py_binary( name = "ExponentialProfileModel", srcs = ["algorithms/ExponentialProfileModel.py"], - tags = ["manual"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), ) diff --git a/wpinet/BUILD.bazel b/wpinet/BUILD.bazel index e9974c404a..bf27a8b3c2 100644 --- a/wpinet/BUILD.bazel +++ b/wpinet/BUILD.bazel @@ -1,5 +1,6 @@ load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") @@ -55,7 +56,6 @@ cc_library( ]), includes = ["src/main/native/thirdparty/libuv/src"], strip_include_prefix = "src/main/native/thirdparty/libuv/include", - visibility = ["//wpinet:__subpackages__"], ) filegroup( @@ -69,23 +69,12 @@ filegroup( "@bazel_tools//src/conditions:windows": WIN_UV_SRCS, "@rules_bzlmodrio_toolchains//constraints/combined:is_linux": LINUX_UV_SRCS, }) + glob(["src/main/native/thirdparty/libuv/src/*"]), - visibility = ["//wpinet:__subpackages__"], ) -cc_library( - name = "tcpsockets-headers", - hdrs = glob([ - "src/main/native/thirdparty/tcpsockets/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/tcpsockets/include"], - strip_include_prefix = "src/main/native/thirdparty/tcpsockets/include", - visibility = ["//wpinet:__subpackages__"], -) - -filegroup( - name = "tcpsockets-srcs", - srcs = glob(["src/main/native/thirdparty/tcpsockets/cpp/**"]), - visibility = ["//wpinet:__subpackages__"], +third_party_cc_lib_helper( + name = "tcpsockets", + include_root = "src/main/native/thirdparty/tcpsockets/include", + src_root = "src/main/native/thirdparty/tcpsockets/cpp", ) generate_resources( @@ -112,14 +101,13 @@ cc_library( strip_include_prefix = "src/main/native/cpp", ) -cc_library( +wpilib_cc_library( name = "wpinet.static", srcs = glob( ["src/main/native/cpp/**"], exclude = ["src/main/native/cpp/jni/**"], ) + [ ":libuv-srcs", - ":tcpsockets-srcs", ] + ["native-srcs"], hdrs = glob(["src/main/native/include/**/*"]), implementation_deps = [ @@ -131,10 +119,12 @@ cc_library( "//conditions:default": [], }), strip_include_prefix = "src/main/native/include", + third_party_libraries = [ + ":tcpsockets", + ], visibility = ["//visibility:public"], deps = [ ":libuv-headers", - ":tcpsockets-headers", "//wpiutil:wpiutil.static", ], ) diff --git a/wpiunits/BUILD.bazel b/wpiunits/BUILD.bazel index d6c360fc83..3264e92327 100644 --- a/wpiunits/BUILD.bazel +++ b/wpiunits/BUILD.bazel @@ -9,8 +9,10 @@ py_binary( name = "generate_units", srcs = ["generate_units.py"], data = glob(["src/generate/main/java/**"]), - tags = ["manual"], - visibility = ["//visibility:public"], + target_compatible_with = select({ + "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [requirement("jinja2")], ) diff --git a/wpiutil/BUILD.bazel b/wpiutil/BUILD.bazel index 190d69cb12..b544caa1cd 100644 --- a/wpiutil/BUILD.bazel +++ b/wpiutil/BUILD.bazel @@ -3,6 +3,7 @@ load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_python//python:defs.bzl", "py_binary") +load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library") load("//shared/bazel/rules:java_rules.bzl", "wpilib_java_junit5_test") load("//shared/bazel/rules:jni_rules.bzl", "wpilib_jni_cc_library", "wpilib_jni_java_library") load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources") @@ -33,7 +34,6 @@ py_binary( "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), - visibility = ["//visibility:public"], ) filegroup( @@ -56,168 +56,66 @@ write_source_files( visibility = ["//visibility:public"], ) -cc_library( - name = "argparse-headers", - hdrs = glob([ - "src/main/native/thirdparty/argparse/include/**/*", - ]), - includes = ["src/main/native/thirdparty/argparse/include"], - strip_include_prefix = "src/main/native/thirdparty/argparse/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "argparse", + include_root = "src/main/native/thirdparty/argparse/include", ) -cc_library( - name = "debugging-headers", - hdrs = glob([ - "src/main/native/thirdparty/debugging/include/**/*", - ]), - includes = ["src/main/native/thirdparty/debugging/include"], - strip_include_prefix = "src/main/native/thirdparty/debugging/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "debugging", + include_root = "src/main/native/thirdparty/debugging/include", + src_root = "src/main/native/thirdparty/debugging/src", ) -filegroup( - name = "debugging-srcs", - srcs = glob(["src/main/native/thirdparty/debugging/src/**"]), - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "expected", + include_root = "src/main/native/thirdparty/expected/include", ) -cc_library( - name = "expected-headers", - hdrs = glob([ - "src/main/native/thirdparty/expected/include/**/*", - ]), - includes = ["src/main/native/thirdparty/expected/include"], - strip_include_prefix = "src/main/native/thirdparty/expected/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "fmtlib", + include_root = "src/main/native/thirdparty/fmtlib/include", + src_root = "src/main/native/thirdparty/fmtlib/src", ) -cc_library( - name = "concurrentqueue-headers", - hdrs = glob([ - "src/main/native/thirdparty/concurrentqueue/include/**/*", - ]), - includes = ["src/main/native/thirdparty/concurrentqueue/include"], - strip_include_prefix = "src/main/native/thirdparty/concurrentqueue/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "json", + include_root = "src/main/native/thirdparty/json/include", ) -cc_library( - name = "fmtlib-headers", - hdrs = glob([ - "src/main/native/thirdparty/fmtlib/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/fmtlib/include"], - strip_include_prefix = "src/main/native/thirdparty/fmtlib/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "llvm", + include_root = "src/main/native/thirdparty/llvm/include", + src_root = "src/main/native/thirdparty/llvm/cpp", ) -filegroup( - name = "fmtlib-srcs", - srcs = glob(["src/main/native/thirdparty/fmtlib/src/**"]), - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "memory", + include_root = "src/main/native/thirdparty/memory/include", + src_root = "src/main/native/thirdparty/memory/src", ) -cc_library( - name = "json-headers", - hdrs = glob([ - "src/main/native/thirdparty/json/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/json/include"], - strip_include_prefix = "src/main/native/thirdparty/json/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "mpack", + include_root = "src/main/native/thirdparty/mpack/include", + src_root = "src/main/native/thirdparty/mpack/src", ) -cc_library( - name = "llvm-headers", - hdrs = glob([ - "src/main/native/thirdparty/llvm/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/llvm/include"], - strip_include_prefix = "src/main/native/thirdparty/llvm/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "protobuf", + include_root = "src/main/native/thirdparty/protobuf/include", + src_root = "src/main/native/thirdparty/protobuf/src", ) -filegroup( - name = "llvm-srcs", - srcs = glob(["src/main/native/thirdparty/llvm/cpp/**"]), - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "nanopb", + include_root = "src/main/native/thirdparty/nanopb/include", + src_root = "src/main/native/thirdparty/nanopb/src", ) -cc_library( - name = "memory-headers", - hdrs = glob([ - "src/main/native/thirdparty/memory/include/**/*.hpp", - ]), - includes = ["src/main/native/thirdparty/memory/include"], - strip_include_prefix = "src/main/native/thirdparty/memory/include", - visibility = ["//wpiutil:__subpackages__"], -) - -filegroup( - name = "memory-srcs", - srcs = glob(["src/main/native/thirdparty/memory/src/**"]), - visibility = ["//wpiutil:__subpackages__"], -) - -cc_library( - name = "mpack-headers", - hdrs = glob([ - "src/main/native/thirdparty/mpack/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/mpack/include"], - strip_include_prefix = "src/main/native/thirdparty/mpack/include", - visibility = ["//wpiutil:__subpackages__"], -) - -filegroup( - name = "mpack-srcs", - srcs = glob(["src/main/native/thirdparty/mpack/src/**"]), - visibility = ["//wpiutil:__subpackages__"], -) - -cc_library( - name = "protobuf-headers", - hdrs = glob([ - "src/main/native/thirdparty/protobuf/include/**/*.h", - "src/main/native/thirdparty/protobuf/include/**/*.inc", - ]), - includes = ["src/main/native/thirdparty/protobuf/include"], - strip_include_prefix = "src/main/native/thirdparty/protobuf/include", - visibility = ["//wpiutil:__subpackages__"], -) - -filegroup( - name = "protobuf-srcs", - srcs = glob(["src/main/native/thirdparty/protobuf/src/**"]), - visibility = ["//wpiutil:__subpackages__"], -) - -cc_library( - name = "nanopb-headers", - hdrs = glob([ - "src/main/native/thirdparty/nanopb/include/**/*.h", - "src/main/native/thirdparty/nanopb/include/**/*.inc", - ]), - includes = ["src/main/native/thirdparty/nanopb/include"], - strip_include_prefix = "src/main/native/thirdparty/nanopb/include", - visibility = ["//wpiutil:__subpackages__"], -) - -filegroup( - name = "nanopb-srcs", - srcs = glob(["src/main/native/thirdparty/nanopb/src/**"]), - visibility = ["//wpiutil:__subpackages__"], -) - -cc_library( - name = "sigslot-headers", - hdrs = glob([ - "src/main/native/thirdparty/sigslot/include/**/*.h", - ]), - includes = ["src/main/native/thirdparty/sigslot/include"], - strip_include_prefix = "src/main/native/thirdparty/sigslot/include", - visibility = ["//wpiutil:__subpackages__"], +third_party_cc_lib_helper( + name = "sigslot", + include_root = "src/main/native/thirdparty/sigslot/include", ) generate_resources( @@ -230,48 +128,40 @@ generate_resources( filegroup( name = "native-srcs", srcs = select({ - "@bazel_tools//src/conditions:windows": glob([ - "src/main/native/windows/*.cpp", - "src/main/native/windows/*.h", - ]), + "@bazel_tools//src/conditions:windows": glob(["src/main/native/windows/*.cpp"]), "@rules_bzlmodrio_toolchains//constraints/combined:is_unix": glob(["src/main/native/unix/*.cpp"]), }), ) -cc_library( +wpilib_cc_library( name = "wpiutil.static", srcs = glob( ["src/main/native/cpp/**"], exclude = ["src/main/native/cpp/jni/**"], ) + [ - ":debugging-srcs", - ":fmtlib-srcs", ":generate-resources", - ":llvm-srcs", - ":memory-srcs", - ":mpack-srcs", - ":nanopb-srcs", ":native-srcs", - ":protobuf-srcs", ], hdrs = glob(["src/main/native/include/**/*"]), includes = ["src/main/native/include"], strip_include_prefix = "src/main/native/include", + third_party_header_only_libraries = [ + ":argparse", + ":expected", + ":json", + ":sigslot", + ], + third_party_libraries = [ + ":debugging", + ":fmtlib", + ":llvm", + ":memory", + ":mpack", + ":nanopb", + ":protobuf", + ], visibility = ["//visibility:public"], - deps = [ - ":argparse-headers", - ":concurrentqueue-headers", - ":debugging-headers", - ":expected-headers", - ":fmtlib-headers", - ":json-headers", - ":llvm-headers", - ":memory-headers", - ":mpack-headers", - ":nanopb-headers", - ":protobuf-headers", - ":sigslot-headers", - ] + select({ + deps = select({ "@rules_bzlmodrio_toolchains//constraints/is_roborio:roborio": ["@bzlmodrio-ni//libraries/cpp/ni:shared"], "//conditions:default": [], }), @@ -312,7 +202,6 @@ cc_library( hdrs = glob(["src/generated/test/native/cpp/*.h"]), includes = ["src/generated/test/native/cpp"], strip_include_prefix = "src/generated/test/native/cpp", - visibility = ["//wpiutil:__subpackages__"], ) cc_test( diff --git a/xrpVendordep/BUILD.bazel b/xrpVendordep/BUILD.bazel index 964ea19d70..c29de113bb 100644 --- a/xrpVendordep/BUILD.bazel +++ b/xrpVendordep/BUILD.bazel @@ -1,7 +1,8 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_test") load("@rules_java//java:defs.bzl", "java_binary", "java_library") +load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library") -cc_library( +wpilib_cc_library( name = "xrp-cpp", srcs = glob([ "src/main/native/cpp/**",