blob: c8c046866e5215a5a847cece1c97f9471465374d [file] [log] [blame]
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("//:opencv.bzl", "CONFIG", "opencv_module")
write_file(
name = "_private/version_string.inc",
out = "private/version_string.inc",
content = ["\"4.11.0\""],
)
write_file(
name = "_opencv2/opencv_modules.hpp",
out = "opencv2/opencv_modules.hpp",
content = ["".join([
"#define HAVE_OPENCV_{}\n".format(x.upper())
for x in CONFIG["modules"]
])],
)
write_file(
name = "_custom_hal.hpp",
out = "custom_hal.hpp",
content = [
"#ifndef _CUSTOM_HAL_INCLUDED_",
"#define _CUSTOM_HAL_INCLUDED_",
"#endif",
],
)
write_file(
name = "_opencv_data_config.hpp",
out = "opencv_data_config.hpp",
content = [
"#define OPENCV_INSTALL_PREFIX \"\"",
"#define OPENCV_DATA_INSTALL_PATH \"\"",
"#define OPENCV_BUILD_DIR \"\"",
"#define OPENCV_DATA_BUILD_DIR_SEARCH_PATHS \"\"",
"#define OPENCV_INSTALL_DATA_DIR_RELATIVE \"\"",
],
)
# https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options
# OpenCV has a lot of options to enable certain features
# one of those is perf optimizations via certain simd instructions
# However, not all of these features are available on all platforms
write_file(
name = "_cv_cpu_config.h",
out = "cv_cpu_config.h",
content = [
"#define CV_CPU_DISPATCH_FEATURES 0",
] + select({
"@platforms//cpu:aarch64": [
"#define CV_CPU_BASELINE_FEATURES 0",
],
"@platforms//cpu:x86_64": [
"#define CV_CPU_COMPILE_SSE 1",
"#define CV_CPU_BASELINE_COMPILE_SSE 1",
"#define CV_CPU_COMPILE_SSE2 1",
"#define CV_CPU_BASELINE_COMPILE_SSE2 1",
"#define CV_CPU_COMPILE_SSE3 1",
"#define CV_CPU_BASELINE_COMPILE_SSE3 1",
"#define CV_CPU_COMPILE_SSSE3 1",
"#define CV_CPU_BASELINE_COMPILE_SSSE3 1",
"#define CV_CPU_COMPILE_SSE4_1 1",
"#define CV_CPU_BASELINE_COMPILE_SSE4_1 1",
"#define CV_CPU_COMPILE_POPCNT 1",
"#define CV_CPU_BASELINE_COMPILE_POPCNT 1",
"#define CV_CPU_COMPILE_SSE4_2 1",
"#define CV_CPU_BASELINE_COMPILE_SSE4_2 1",
"#define CV_CPU_COMPILE_FP16 1",
"#define CV_CPU_BASELINE_COMPILE_FP16 1",
"#define CV_CPU_COMPILE_FMA3 1",
"#define CV_CPU_BASELINE_COMPILE_FMA3 1",
"#define CV_CPU_COMPILE_AVX 1",
"#define CV_CPU_BASELINE_COMPILE_AVX 1",
"#define CV_CPU_COMPILE_AVX2 1",
"#define CV_CPU_BASELINE_COMPILE_AVX2 1",
"#define CV_CPU_BASELINE_FEATURES 0,CV_CPU_SSE,CV_CPU_SSE2,CV_CPU_SSE3,CV_CPU_SSSE3,CV_CPU_SSE4_1,CV_CPU_POPCNT,CV_CPU_SSE4_2,CV_CPU_FP16,CV_CPU_FMA3,CV_CPU_AVX,CV_CPU_AVX2",
],
}),
)
# Opencv has a lot of options to enable certain features
# Leverage this, cv_cpu_config.h, and cpu opts to enable these features
expand_template(
name = "expand_cvconfig.h.in",
out = "cvconfig.h",
substitutions = {
"#cmakedefine BUILD_SHARED_LIBS": "/* BUILD_SHARED_LIBS */",
"#cmakedefine CV_ENABLE_INTRINSICS": "#define CV_ENABLE_INTRINSICS",
"#cmakedefine CV_DISABLE_OPTIMIZATION": "/* CV_DISABLE_OPTIMIZATION */",
"${OPENCV_CUDA_ARCH_BIN}": "",
"#cmakedefine CUDA_ARCH_BIN_OR_PTX_10": "/* CUDA_ARCH_BIN_OR_PTX_10 */",
"${OPENCV_CUDA_ARCH_FEATURES}": "",
"${OPENCV_CUDA_ARCH_PTX}": "",
"#cmakedefine HAVE_AVFOUNDATION": "/* HAVE_AVFOUNDATION */",
"#cmakedefine HAVE_AVIF": "/* HAVE_AVIF */",
"#cmakedefine HAVE_CAMV4L\n": "/* HAVE_CAMV4L */\n",
"#cmakedefine HAVE_CAMV4L2": "#define HAVE_CAMV4L2",
"#cmakedefine HAVE_CARBON": "/* HAVE_CARBON */",
"#cmakedefine HAVE_CLAMDBLAS": "/* HAVE_CLAMDBLAS */",
"#cmakedefine HAVE_CLAMDFFT": "/* HAVE_CLAMDFFT */",
"#cmakedefine HAVE_CLP": "/* HAVE_CLP */",
"#cmakedefine HAVE_COCOA": "/* HAVE_COCOA */",
"#cmakedefine HAVE_CSTRIPES": "/* HAVE_CSTRIPES */",
"#cmakedefine HAVE_CUBLAS": "/* HAVE_CUBLAS */",
"#cmakedefine HAVE_CUDA": "/* HAVE_CUDA */",
"#cmakedefine HAVE_CUFFT": "/* HAVE_CUFFT */",
"#cmakedefine HAVE_DC1394\n": "/* HAVE_DC1394 */\n",
"#cmakedefine HAVE_DC1394_2": "/* HAVE_DC1394_2 */",
"#cmakedefine HAVE_DIRECTX\n": "/* HAVE_DIRECTX */\n",
"#cmakedefine HAVE_DIRECTX_NV12": "/* HAVE_DIRECTX_NV12 */",
"#cmakedefine HAVE_D3D11": "/* HAVE_D3D11 */",
"#cmakedefine HAVE_D3D10": "/* HAVE_D3D10 */",
"#cmakedefine HAVE_D3D9": "/* HAVE_D3D9 */",
"#cmakedefine HAVE_DSHOW": "/* HAVE_DSHOW */",
"#cmakedefine HAVE_EIGEN": "#define HAVE_EIGEN",
"#cmakedefine HAVE_FFMPEG": "#define HAVE_FFMPEG",
"#cmakedefine HAVE_GDAL": "/* HAVE_GDAL */",
"#cmakedefine HAVE_GSTREAMER": "/* HAVE_GSTREAMER */",
"#cmakedefine HAVE_GTHREAD": "#define HAVE_GTHREAD",
"#cmakedefine HAVE_GTK": "/* HAVE_GTK */",
"#cmakedefine HAVE_HALIDE": "/* HAVE_HALIDE */",
"#cmakedefine HAVE_INTTYPES_H 1": "/* HAVE_INTTYPES_H */",
"#cmakedefine HAVE_INTELPERC": "/* HAVE_INTELPERC */",
"#cmakedefine HAVE_IPP\n": "/* HAVE_IPP */\n",
"#cmakedefine HAVE_IPP_IW_LL": "/* HAVE_IPP_IW_LL */",
"#cmakedefine HAVE_IPP_ICV": "/* HAVE_IPP_ICV */",
"#cmakedefine HAVE_IPP_IW": "/* HAVE_IPP_IW */",
"#cmakedefine HAVE_IPP_A": "/* HAVE_IPP_A */",
"#cmakedefine HAVE_JASPER": "/* HAVE_JASPER */",
"#cmakedefine HAVE_JPEG": "#define HAVE_JPEG 1",
"#cmakedefine HAVE_LIBPNG_PNG_H": "#define HAVE_LIBPNG_PNG_H 1",
"#cmakedefine HAVE_GDCM": "/* HAVE_GDCM */",
"#cmakedefine HAVE_LIBV4L": "/* HAVE_LIBV4L */",
"#cmakedefine HAVE_MSMF": "/* HAVE_MSMF */",
"#cmakedefine HAVE_NVCUVID_HEADER": "/* HAVE_NVCUVID_HEADER */",
"#cmakedefine HAVE_NVCUVID": "/* HAVE_NVCUVID */",
"#cmakedefine HAVE_NVCUVENC": "/* HAVE_NVCUVENC */",
"#cmakedefine HAVE_OPENCL\n": "/* HAVE_OPENCL */\n",
"#cmakedefine HAVE_OPENCL_STATIC": "/* HAVE_OPENCL_STATIC */",
"#cmakedefine HAVE_OPENCL_SVM": "/* HAVE_OPENCL_SVM */",
"#cmakedefine HAVE_OPENEXR": "/* HAVE_OPENEXR */",
"#cmakedefine HAVE_OPENGL": "/* HAVE_OPENGL */",
"#cmakedefine HAVE_OPENNI\n": "/* HAVE_OPENNI */\n",
"#cmakedefine HAVE_OPENNI2": "/* HAVE_OPENNI2 */",
"#cmakedefine HAVE_PNG": "#define HAVE_PNG 1",
"#cmakedefine HAVE_PTHREAD": "#define HAVE_PTHREAD",
"#cmakedefine HAVE_PTHREADS_PF": "#define HAVE_PTHREADS_PF",
"#cmakedefine HAVE_QT\n": "/* HAVE_QT */\n",
"#cmakedefine HAVE_QT_OPENGL": "/* HAVE_QT_OPENGL */",
"#cmakedefine HAVE_QUICKTIME": "/* HAVE_QUICKTIME */",
"#cmakedefine HAVE_QTKIT": "/* HAVE_QTKIT */",
"#cmakedefine HAVE_TBB": "/* HAVE_TBB */",
"#cmakedefine HAVE_TIFF": "/* HAVE_TIFF */",
"#cmakedefine HAVE_UNICAP": "/* HAVE_UNICAP */",
"#cmakedefine HAVE_VFW": "/* HAVE_VFW */",
"#cmakedefine HAVE_VIDEOIO": "/* HAVE_VIDEOIO */",
"#cmakedefine HAVE_WIN32UI": "/* HAVE_WIN32UI */",
"#cmakedefine HAVE_XIMEA": "/* HAVE_XIMEA */",
"#cmakedefine HAVE_XINE": "/* HAVE_XINE */",
"#cmakedefine WORDS_BIGENDIAN": "/* WORDS_BIGENDIAN */",
"#cmakedefine HAVE_GPHOTO2": "/* HAVE_GPHOTO2 */",
"#cmakedefine HAVE_VA\n": "/* HAVE_VA */\n",
"#cmakedefine HAVE_VA_INTEL": "/* HAVE_VA_INTEL */",
"#cmakedefine HAVE_MFX": "/* HAVE_MFX */",
"#cmakedefine HAVE_LAPACK": "/* HAVE_LAPACK */",
"#cmakedefine ENABLE_INSTRUMENTATION": "/* ENABLE_INSTRUMENTATION */",
"#cmakedefine HAVE_OPENVX": "/* HAVE_OPENVX */",
"#cmakedefine OPENCV_TRACE": "#define OPENCV_TRACE",
"#cmakedefine HAVE_QUIRC": "/* HAVE_QUIRC */",
"#cmakedefine HAVE_CUDNN": "/* HAVE_CUDNN */",
"#cmakedefine HAVE_VULKAN": "/* HAVE_VULKAN */",
"#cmakedefine HAVE_OPENJPEG": "/* HAVE_OPENJPEG */",
"#cmakedefine HAVE_DYNLINK_NVCUVID_HEADER": "/* HAVE_DYNLINK_NVCUVID_HEADER */",
"#cmakedefine HAVE_OPENCL_D3D11_NV": "/* HAVE_OPENCL_D3D11_NV */",
"#cmakedefine HAVE_SPNG": "/* HAVE_SPNG */",
"#cmakedefine HAVE_HPX": "/* HAVE_HPX */",
},
template = "@opencv//:cmake/templates/cvconfig.h.in",
)
cc_library(
name = "_base_headers",
hdrs = [
"custom_hal.hpp",
"cv_cpu_config.h",
"cvconfig.h",
"include/opencv2/opencv.hpp",
"opencv2/opencv_modules.hpp",
"opencv_data_config.hpp",
],
includes = [
".",
"include",
"opencv2",
"private",
],
textual_hdrs = [
"private/version_string.inc",
],
)
cc_library(
name = "opencv",
visibility = ["//visibility:public"],
deps = [
":calib3d",
":core",
":features2d",
":flann",
":imgcodecs",
":imgproc",
],
)
opencv_module(
name = "flann",
visibility = ["//visibility:public"],
deps = [":core"],
)
opencv_module(
name = "core",
dispatched_files = {
"stat": [
"avx2",
"sse4_2",
],
"mathfuncs_core": [
"avx2",
"avx",
],
"convert": ["avx2"],
"count_non_zero": ["avx2"],
"convert_scale": ["avx2"],
"arithm": [
"avx2",
"sse4_1",
],
"matmul": [
"avx2",
"sse4_1",
],
"mean": ["avx2"],
"merge": ["avx2"],
"split": ["avx2"],
"sum": ["avx2"],
"has_non_zero": ["avx2"],
},
linkopts = select({
"@platforms//os:linux": [
"-ldl",
"-lpthread",
],
"//conditions:default": [],
}),
visibility = ["//visibility:public"],
deps = [
"@eigen",
"@zlib",
],
)
opencv_module(
name = "imgproc",
copts = [
"-Wno-deprecated-enum-float-conversion",
"-Wno-deprecated-volatile",
],
dispatched_files = {
"accum": [
"avx2",
"avx",
"sse4_1",
],
"sumpixels": [
"avx2",
"sse2",
],
"smooth": [
"avx2",
"sse2",
"sse4_1",
],
"morph": [
"avx2",
"sse2",
"sse4_1",
],
"median_blur": [
"avx2",
"sse2",
"sse4_1",
],
"color_yuv": [
"avx2",
"sse2",
"sse4_1",
],
"color_rgb": [
"avx2",
"sse2",
"sse4_1",
],
"color_hsv": [
"avx2",
"sse2",
"sse4_1",
],
"filter": [
"avx2",
"sse2",
"sse4_1",
],
"box_filter": [
"avx2",
"sse2",
"sse4_1",
],
"bilateral_filter": [
"avx2",
"sse2",
],
},
visibility = ["//visibility:public"],
deps = [":core"],
)
opencv_module(
name = "features2d",
copts = [
"-Wno-deprecated-enum-float-conversion",
"-Wno-deprecated-volatile",
],
dispatched_files = {
"sift": [
"avx2",
"sse4_1",
],
},
visibility = ["//visibility:public"],
deps = [
":flann",
":imgproc",
],
)
opencv_module(
name = "calib3d",
copts = [
"-Wno-deprecated-enum-float-conversion",
],
dispatched_files = {
"undistort": [
"avx2",
"sse2",
],
},
visibility = ["//visibility:public"],
deps = [
":features2d",
":imgproc",
],
)
opencv_module(
name = "imgcodecs",
visibility = ["//visibility:public"],
deps = [
":core",
":imgproc",
"@libjpeg_turbo//:jpeg",
"@libpng",
],
)