Files
allwpilib/tools/wpical/BUILD.bazel
2025-11-07 23:09:21 -08:00

248 lines
5.8 KiB
Python

load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")
load("@rules_pkg//:mappings.bzl", "pkg_files")
load("//shared/bazel/rules:cc_rules.bzl", "wpilib_cc_library")
load("//shared/bazel/rules:packaging.bzl", "package_binary_cc_project")
load("//shared/bazel/rules/gen:gen-resources.bzl", "generate_resources")
load("//shared/bazel/rules/gen:gen-version-file.bzl", "generate_version_file")
pkg_files(
name = "licenses",
srcs = [
"WPICalThirdPartyNotices.txt",
],
)
generate_resources(
name = "generate-resources",
namespace = "wpical",
prefix = "WPI",
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_library(
name = "headers",
hdrs = glob([
"src/main/native/include/**/*",
]),
strip_include_prefix = "src/main/native/include",
deps = [
":headers-libdogleg",
":headers-mrcal",
":headers-mrcal-generated",
":headers-mrcal-java",
],
)
cc_library(
name = "headers-libdogleg",
hdrs = glob([
"src/main/native/thirdparty/libdogleg/include/**/*",
]),
strip_include_prefix = "src/main/native/thirdparty/libdogleg/include",
)
cc_library(
name = "headers-mrcal-generated",
hdrs = glob([
"src/main/native/thirdparty/mrcal/generated/**/*",
]),
strip_include_prefix = "src/main/native/thirdparty/mrcal/generated/",
)
cc_library(
name = "headers-mrcal",
hdrs = glob([
"src/main/native/thirdparty/mrcal/include/**/*",
]),
strip_include_prefix = "src/main/native/thirdparty/mrcal/include/",
)
cc_library(
name = "headers-mrcal-java",
hdrs = glob([
"src/main/native/thirdparty/mrcal_java/include/**/*",
]),
strip_include_prefix = "src/main/native/thirdparty/mrcal_java/include/",
)
unix_copts = [
"-Wno-pedantic",
"-Wno-format-nonliteral",
"-Wno-unused-variable",
"-Wno-unused-function",
"-Wno-sign-compare",
]
osx_copts = unix_copts
copts = select({
"@platforms//os:linux": unix_copts + [
"-Wno-maybe-uninitialized",
],
"@platforms//os:osx": osx_copts,
"@platforms//os:windows": [
"/wd4047",
"/wd4098",
"/wd4267",
],
})
unix_cxxopts = [
"-Wno-missing-field-initializers",
"-Wno-pedantic",
"-fpermissive",
"-Wno-deprecated-declarations",
"-Wno-return-type",
"-Wno-missing-braces",
"-Wno-null-conversion",
"-Wno-unused-but-set-variable",
]
osx_cxxopts = unix_cxxopts + [
"-Wno-unused-variable",
"-Wno-unused-function",
"-Wno-sign-compare",
"-Wno-sometimes-uninitialized",
]
cxxopts = select({
"@platforms//os:linux": unix_cxxopts + [
"-Wno-deprecated-enum-enum-conversion",
],
"@platforms//os:osx": osx_cxxopts,
"@platforms//os:windows": [
"/wd4068",
"/wd4101",
"/wd4200",
"/wd4576",
"/wd4715",
],
})
mac_linkopts = [
"-framework",
"Metal",
"-framework",
"MetalKit",
"-framework",
"Cocoa",
"-framework",
"IOKit",
"-framework",
"CoreFoundation",
"-framework",
"CoreVideo",
"-framework",
"QuartzCore",
"-framework",
"Accelerate",
"-framework",
"AVFoundation",
"-framework",
"CoreMedia",
]
linkopts = select({
"@platforms//os:linux": [],
"@platforms//os:osx": mac_linkopts,
"@platforms//os:windows": [
"-DEFAULTLIB:Gdi32.lib",
"-DEFAULTLIB:Shell32.lib",
"-DEFAULTLIB:d3d11.lib",
"-DEFAULTLIB:d3dcompiler.lib",
"-DEFAULTLIB:Comdlg32.lib",
"-DEFAULTLIB:dbghelp.lib",
"-DEFAULTLIB:Advapi32.lib",
],
})
wpilib_cc_library(
name = "wpical_lib",
srcs = glob(
[
"src/main/native/cpp/**/*.cpp",
"src/main/native/thirdparty/libdogleg/src/**/*.cpp",
"src/main/native/thirdparty/mrcal/src/**/*.cpp",
"src/main/native/thirdparty/mrcal/src/**/*.c",
"src/main/native/thirdparty/mrcal_java/src/**/*.cpp",
],
exclude = ["src/main/native/cpp/WPIcal.cpp"],
) + [
":generate-resources",
],
copts = copts,
cxxopts = cxxopts,
defines = ["OPENCV_DISABLE_EIGEN_TENSOR_SUPPORT"],
include_license_files = True,
linkopts = linkopts,
linkstatic = True,
strip_include_prefix = "include",
visibility = ["//visibility:public"],
deps = [
":headers",
"//apriltag",
"//thirdparty/ceres",
"//wpigui",
"//wpiutil",
"@bzlmodrio-opencv//libraries/cpp/opencv",
],
)
cc_binary(
name = "wpical",
srcs = [
"src/main/native/cpp/WPIcal.cpp",
],
copts = copts,
cxxopts = cxxopts,
linkopts = select({
"@platforms//os:linux": [],
"@platforms//os:osx": [],
"@platforms//os:windows": [
"-SUBSYSTEM:WINDOWS",
],
}),
deps = [
":wpical_lib",
"//thirdparty/imgui_suite",
],
)
cc_test(
name = "wpical_test",
size = "medium",
srcs = glob(["src/test/native/**"]),
copts = copts,
cxxopts = cxxopts,
data = glob(["src/main/native/assets/**"]) + [
"src/main/native/assets",
"src/main/native/assets/altfieldvideo",
"src/main/native/assets/fieldvideo",
],
defines = [
'PROJECT_ROOT_PATH=\\"tools/wpical/src/main/native/assets\\"',
"__BAZEL__=1",
],
deps = [
":wpical_lib",
"//thirdparty/ceres",
"//thirdparty/googletest",
"@bazel_tools//tools/cpp/runfiles",
],
)
package_binary_cc_project(
name = "wpical",
extra_files = [":licenses"],
maven_artifact_name = "wpical",
maven_group_id = "edu.wpi.first.tools",
)