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_pkg//:mappings.bzl", "pkg_files") load("@rules_python//python:defs.bzl", "py_binary") load("//shared/bazel/rules:cc_rules.bzl", "third_party_cc_lib_helper", "wpilib_cc_library", "wpilib_cc_shared_library", "wpilib_cc_static_library") load("//shared/bazel/rules:packaging.bzl", "package_default_cc_project") load("//shared/bazel/rules/gen:gen-version-file.bzl", "generate_version_file") load("//shared/bazel/rules/robotpy:build_info_gen.bzl", "generate_robotpy_native_wrapper_build_info", "generate_robotpy_pybind_build_info") load("//shared/bazel/rules/robotpy:pytest_util.bzl", "robotpy_py_test") load("//wpilibc:generate.bzl", "generate_wpilibc") load("//wpilibc:robotpy_native_build_info.bzl", "define_native_wrapper") load("//wpilibc:robotpy_pybind_build_info.bzl", "define_pybind_library", "wpilib_extension", "wpilib_simulation_extension") filegroup( name = "doxygen-files", srcs = glob([ "src/generated/main/native/include/**/*", "src/main/native/include/**/*", ]), visibility = ["//visibility:public"], ) py_binary( name = "generate_hids", srcs = ["generate_hids.py"], 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"], target_compatible_with = select({ "@rules_bzlmodrio_toolchains//constraints/is_systemcore:systemcore": ["@platforms//:incompatible"], "//conditions:default": [], }), deps = [requirement("jinja2")], ) py_binary( name = "generate_wpilibc_py", srcs = ["generate_wpilibc.py"], main = "generate_wpilibc.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": [], }), deps = [ ":generate_hids", ":generate_pwm_motor_controllers", ], ) filegroup( name = "templates", srcs = glob(["src/generate/main/native/**"]) + [ "//wpilibj:hid_schema", "//wpilibj:pwm_schema", ], ) generate_wpilibc( name = "generate_wpilibc", ) generate_version_file( name = "generate-version", output_file = "WPILibVersion.cpp", template = "src/generate/WPILibVersion.cpp.in", ) write_source_files( name = "write_wpilibc", diff_args = ["-u"], files = { "src/generated": ":generate_wpilibc", }, suggested_update_target = "//:write_all", tags = ["pregeneration"], visibility = ["//visibility:public"], ) third_party_cc_lib_helper( name = "generated_cc", include_root = "src/generated/main/native/include", src_root = "src/generated/main/native/cpp", ) pkg_files( name = "generated_version_files_pkg", srcs = [ ":generate-version", ], ) wpilib_cc_library( name = "wpilibc", srcs = [ ":generate-version", ] + glob([ "src/main/native/cppcs/**", "src/main/native/cpp/**", ]), hdrs = glob(["src/main/native/include/**"]), copts = [ # TODO(austin): this needs to be different for shared vs dynamic. "-DDYNAMIC_CAMERA_SERVER", ] + select({ "//shared/bazel/rules:compilation_mode_dbg": ["-DDYNAMIC_CAMERA_SERVER_DEBUG"], "//conditions:default": [], }), extra_src_pkg_files = [ ":generated_version_files_pkg", ], include_license_files = True, strip_include_prefix = "src/main/native/include", third_party_libraries = [ ":generated_cc", ], visibility = ["//visibility:public"], deps = [ "//cameraserver:cameraserver-headers", "//cscore:cscore-headers", "//datalog", "//hal:wpiHal", "//ntcore", "//ntcore:ntcore-headers", "//wpimath", "//wpinet", "//wpiutil", ], ) wpilib_cc_shared_library( name = "shared/wpilibc", dynamic_deps = [ "//datalog:shared/datalog", "//hal:shared/wpiHal", "//ntcore:shared/ntcore", "//wpimath:shared/wpimath", "//wpinet:shared/wpinet", "//wpiutil:shared/wpiutil", ], visibility = ["//visibility:public"], deps = [ ":wpilibc", ], ) wpilib_cc_static_library( name = "static/wpilibc", static_deps = [ "//datalog:static/datalog", "//hal:static/wpiHal", "//ntcore:static/ntcore", "//wpimath:static/wpimath", "//wpinet:static/wpinet", "//wpiutil:static/wpiutil", ], visibility = ["//visibility:public"], deps = [ ":wpilibc", ], ) cc_library( name = "test-headers", testonly = True, hdrs = glob(["src/test/native/include/**"]), includes = ["src/test/native/include"], ) cc_test( name = "wpilibc-test", size = "small", srcs = glob(["src/test/native/cpp/**"]), tags = [ "no-tsan", "no-ubsan", ], deps = [ ":test-headers", ":wpilibc", "//thirdparty/googletest", ], ) cc_binary( name = "DevMain-Cpp", srcs = ["src/dev/native/cpp/main.cpp"], deps = [ ":wpilibc", ], ) package_default_cc_project( name = "wpilibc", maven_artifact_name = "wpilibc-cpp", maven_group_id = "org.wpilib.wpilibc", ) generate_robotpy_native_wrapper_build_info( name = "robotpy-native-wpilib-generator", pyproject_toml = "src/main/python/native-pyproject.toml", ) define_native_wrapper( name = "robotpy-native-wpilib", pyproject_toml = "src/main/python/native-pyproject.toml", ) PKG_CONFIG_DEPS = [ "//datalog:native/datalog/robotpy-native-datalog.pc", "//datalog:robotpy-wpilog.generated_pkgcfg_files", "//hal:native/wpihal/robotpy-native-mrclib.pc", "//hal:native/wpihal/robotpy-native-wpihal.pc", "//hal:robotpy-hal.generated_pkgcfg_files", "//ntcore:native/ntcore/robotpy-native-ntcore.pc", "//ntcore:pyntcore.generated_pkgcfg_files", "//wpilibc:native/wpilib/robotpy-native-wpilib.pc", "//wpimath:native/wpimath/robotpy-native-wpimath.pc", "//wpimath:robotpy-wpimath.generated_pkgcfg_files", "//wpinet:native/wpinet/robotpy-native-wpinet.pc", "//wpinet:robotpy-wpinet.generated_pkgcfg_files", "//wpiutil:native/wpiutil/robotpy-native-wpiutil.pc", "//wpiutil:robotpy-wpiutil.generated_pkgcfg_files", ] generate_robotpy_pybind_build_info( name = "robotpy-wpilib-generator", additional_srcs = [ "src/main/python/wpilib/src/rpy/Filesystem.h", "src/main/python/wpilib/src/rpy/Notifier.h", "src/main/python/wpilib/src/rpy/MotorControllerGroup.h", ] + [":robotpy-native-wpilib.copy_headers"], package_root_file = "src/main/python/wpilib/__init__.py", pkgcfgs = PKG_CONFIG_DEPS, yaml_files = glob(["src/main/python/semiwrap/**/*.yml"]), ) wpilib_extension( srcs = glob(["src/main/python/wpilib/src/**/*.cpp"]), extra_hdrs = glob([ "src/main/python/wpilib/src/rpy/*.h", "src/main/python/wpilib/src/rpy/*.inc", ]), header_to_dat_deps = glob(["src/main/python/wpilib/src/**"]), includes = [ "src/main/python/wpilib", "src/main/python/wpilib/src", ], ) wpilib_simulation_extension( srcs = ["src/main/python/wpilib/simulation/simulation.cpp"], header_to_dat_deps = glob([ "src/main/python/wpilib/src/rpy/*.h", "src/main/python/wpilib/src/rpy/*.inc", ]), ) define_pybind_library( name = "robotpy-wpilib", pkgcfgs = PKG_CONFIG_DEPS, ) robotpy_py_test( "python_tests", srcs = glob(["src/test/python/**/*.py"]), tags = ["exclusive"], deps = [ ":robotpy-wpilib", requirement("pytest"), ], )