package third_party.lib.opencv

module videoio_backend {
	option boolean with_ffmpeg=false
}

@BuildDepends(third_party.lib.ffmpeg.all)
module videoio_backend_ffmpeg extends videoio_backend {
	option boolean with_ffmpeg=true

	@NoRuntime depends third_party.lib.ffmpeg.all
}

@Build(stage=2, script="$(EXTERNAL_MAKE)")
@BuildArtifactPath(cppflags="-I$(EXTERNAL_BUILD_DIR)/third_party/lib/opencv/build/install/include/opencv4")
@BuildDepends(videoio_backend)
@BuildDepends(embox.lib.libstdcxx)
static module build {
	option string opencv_version="4.5.2"

	/**
	 * Disables fonts for OpenCV version 4.5.2. It's used
	 * to minimize .rodata size by ~70 Kb.
	 */
	option boolean hack_4_5_2_disable_fonts=true

	/**
	 * SILENT  0
	 * FATAL   1
	 * ERROR   2
	 * WARN    3
	 * INFO    4
	 * DEBUG   5
	 * VERBOSE 6
	 */
	option number cv_log_level=3

	@NoRuntime depends videoio_backend

	@NoRuntime depends embox.compat.posix.proc.atexit_api
	@NoRuntime depends embox.compat.posix.util.gettimeofday
	@NoRuntime depends embox.compat.atomic.pseudo_atomic
	@NoRuntime depends embox.compat.posix.sys.mman.mmap_api // include sys/mman.h
	@NoRuntime depends embox.compat.libc.all
	@NoRuntime depends embox.compat.posix.pthread_key
	@NoRuntime depends embox.lib.libstdcxx
}

@LinkerSection(text="cv_core_text",rodata="cv_core_rodata",data="cv_core_data",bss="cv_core_bss",arm_exidx="cv_core_arm_exidx",arm_extab="cv_core_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_core {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_core.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_imgcodecs_text",rodata="cv_imgcodecs_rodata",data="cv_imgcodecs_data",bss="cv_imgcodecs_bss",arm_exidx="cv_imgcodecs_arm_exidx",arm_extab="cv_imgcodecs_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_imgcodecs {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_imgcodecs.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_imgproc_text",rodata="cv_imgproc_rodata",data="cv_imgproc_data",bss="cv_imgproc_bss",arm_exidx="cv_imgproc_arm_exidx",arm_extab="cv_imgproc_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_imgproc {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_imgproc.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_objdetect_text",rodata="cv_objdetect_rodata",data="cv_objdetect_data",bss="cv_objdetect_bss",arm_exidx="cv_objdetect_arm_exidx",arm_extab="cv_objdetect_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_objdetect {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_objdetect.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_videoio_text",rodata="cv_videoio_rodata",data="cv_videoio_data",bss="cv_videoio_bss",arm_exidx="cv_videoio_arm_exidx",arm_extab="cv_videoio_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_videoio {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_videoio.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_calib3d_text",rodata="cv_calib3d_rodata",data="cv_calib3d_data",bss="cv_calib3d_bss",arm_exidx="cv_calib3d_arm_exidx",arm_extab="cv_calib3d_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_calib3d {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_calib3d.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_flann_text",rodata="cv_flann_rodata",data="cv_flann_data",bss="cv_flann_bss",arm_exidx="cv_flann_arm_exidx",arm_extab="cv_flann_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_flann {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_flann.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_features2d_text",rodata="cv_features2d_rodata",data="cv_features2d_data",bss="cv_features2d_bss",arm_exidx="cv_features2d_arm_exidx",arm_extab="cv_features2d_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libopencv_features2d {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/libopencv_features2d.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_png_text",rodata="cv_png_rodata",data="cv_png_data",bss="cv_png_bss",arm_exidx="cv_png_arm_exidx",arm_extab="cv_png_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module liblibpng {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/opencv4/3rdparty/liblibpng.a"

	@NoRuntime depends build
}

@LinkerSection(text="cv_zlib_text",rodata="cv_zlib_rodata",data="cv_zlib_data",bss="cv_zlib_bss",arm_exidx="cv_zlib_arm_exidx",arm_extab="cv_zlib_arm_extab")
@BuildDepends(third_party.lib.opencv.build)
@Build(script="true")
static module libzlib {
	source "^BUILD/extbld/third_party/lib/opencv/build/install/lib/opencv4/3rdparty/libzlib.a"

	@NoRuntime depends build
}

@BuildDepends(libopencv_core)
@BuildDepends(libopencv_imgcodecs)
@BuildDepends(libopencv_imgproc)
@BuildDepends(libopencv_objdetect)
@BuildDepends(libopencv_videoio)
@BuildDepends(libopencv_calib3d)
@BuildDepends(libopencv_flann)
@BuildDepends(libopencv_features2d)
@BuildDepends(liblibpng)
@BuildDepends(libzlib)
static module all {
	@NoRuntime depends libopencv_core
	@NoRuntime depends libopencv_imgcodecs
	@NoRuntime depends libopencv_imgproc
	@NoRuntime depends libopencv_objdetect
	@NoRuntime depends libopencv_videoio
	@NoRuntime depends libopencv_calib3d
	@NoRuntime depends libopencv_flann
	@NoRuntime depends libopencv_features2d
	@NoRuntime depends liblibpng
	@NoRuntime depends libzlib
}
