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", ":generate-version", ], 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", "//glass", "//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 = "org.wpilib.tools", )