139 lines
5.1 KiB
Makefile
139 lines
5.1 KiB
Makefile
|
.ONESHELL:
|
||
|
.PHONY: test deps download build clean astyle cmds docker
|
||
|
|
||
|
# OpenCV version to use.
|
||
|
OPENCV_VERSION?=4.2.0
|
||
|
|
||
|
# Go version to use when building Docker image
|
||
|
GOVERSION?=1.13.1
|
||
|
|
||
|
# Temporary directory to put files into.
|
||
|
TMP_DIR?=/tmp/
|
||
|
|
||
|
# Package list for each well-known Linux distribution
|
||
|
RPMS=cmake curl git gtk2-devel libpng-devel libjpeg-devel libtiff-devel tbb tbb-devel libdc1394-devel unzip
|
||
|
DEBS=unzip build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
|
||
|
|
||
|
# Detect Linux distribution
|
||
|
distro_deps=
|
||
|
ifneq ($(shell which dnf 2>/dev/null),)
|
||
|
distro_deps=deps_fedora
|
||
|
else
|
||
|
ifneq ($(shell which apt-get 2>/dev/null),)
|
||
|
distro_deps=deps_debian
|
||
|
else
|
||
|
ifneq ($(shell which yum 2>/dev/null),)
|
||
|
distro_deps=deps_rh_centos
|
||
|
endif
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
# Install all necessary dependencies.
|
||
|
deps: $(distro_deps)
|
||
|
|
||
|
deps_rh_centos:
|
||
|
sudo yum -y install pkgconfig $(RPMS)
|
||
|
|
||
|
deps_fedora:
|
||
|
sudo dnf -y install pkgconf-pkg-config $(RPMS)
|
||
|
|
||
|
deps_debian:
|
||
|
sudo apt-get -y update
|
||
|
sudo apt-get -y install $(DEBS)
|
||
|
|
||
|
|
||
|
# Download OpenCV source tarballs.
|
||
|
download:
|
||
|
rm -rf $(TMP_DIR)opencv
|
||
|
mkdir $(TMP_DIR)opencv
|
||
|
cd $(TMP_DIR)opencv
|
||
|
curl -Lo opencv.zip https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).zip
|
||
|
unzip -q opencv.zip
|
||
|
curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/$(OPENCV_VERSION).zip
|
||
|
unzip -q opencv_contrib.zip
|
||
|
rm opencv.zip opencv_contrib.zip
|
||
|
cd -
|
||
|
|
||
|
# Build OpenCV.
|
||
|
build:
|
||
|
cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON ..
|
||
|
$(MAKE) -j $(shell nproc --all)
|
||
|
$(MAKE) preinstall
|
||
|
cd -
|
||
|
|
||
|
# Build OpenCV on Raspbian with ARM hardware optimizations.
|
||
|
build_raspi:
|
||
|
cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D ENABLE_VFPV3=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..
|
||
|
$(MAKE) -j $(shell nproc --all)
|
||
|
$(MAKE) preinstall
|
||
|
cd -
|
||
|
|
||
|
# Build OpenCV with non-free contrib modules.
|
||
|
build_nonfree:
|
||
|
cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_ENABLE_NONFREE=ON ..
|
||
|
$(MAKE) -j $(shell nproc --all)
|
||
|
$(MAKE) preinstall
|
||
|
cd -
|
||
|
|
||
|
# Build OpenCV with cuda.
|
||
|
build_cuda:
|
||
|
cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
|
||
|
mkdir build
|
||
|
cd build
|
||
|
cmake -j $(shell nproc --all) -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ -DBUILD_opencv_cudacodec=OFF ..
|
||
|
$(MAKE) -j $(shell nproc --all)
|
||
|
$(MAKE) preinstall
|
||
|
cd -
|
||
|
|
||
|
# Cleanup temporary build files.
|
||
|
clean:
|
||
|
go clean --cache
|
||
|
rm -rf $(TMP_DIR)opencv
|
||
|
|
||
|
# Do everything.
|
||
|
install: deps download build sudo_install clean verify
|
||
|
|
||
|
# Do everything on Raspbian.
|
||
|
install_raspi: deps download build_raspi sudo_install clean verify
|
||
|
|
||
|
# Do everything with cuda.
|
||
|
install_cuda: deps download build_cuda sudo_install clean verify
|
||
|
|
||
|
# Install system wide.
|
||
|
sudo_install:
|
||
|
cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)/build
|
||
|
sudo $(MAKE) install
|
||
|
sudo ldconfig
|
||
|
cd -
|
||
|
|
||
|
# Build a minimal Go app to confirm gocv works.
|
||
|
verify:
|
||
|
go run ./cmd/version/main.go
|
||
|
|
||
|
# Runs tests.
|
||
|
# This assumes env.sh was already sourced.
|
||
|
# pvt is not tested here since it requires additional depenedences.
|
||
|
test:
|
||
|
go test . ./contrib
|
||
|
|
||
|
docker:
|
||
|
docker build --build-arg OPENCV_VERSION=$(OPENCV_VERSION) --build-arg GOVERSION=$(GOVERSION) .
|
||
|
|
||
|
astyle:
|
||
|
astyle --project=.astylerc --recursive *.cpp,*.h
|
||
|
|
||
|
CMDS=basic-drawing caffe-classifier captest capwindow counter faceblur facedetect find-circles hand-gestures img-similarity mjpeg-streamer motion-detect pose saveimage savevideo showimage ssd-facedetect tf-classifier tracking version
|
||
|
cmds:
|
||
|
for cmd in $(CMDS) ; do \
|
||
|
go build -o build/$$cmd cmd/$$cmd/main.go ;
|
||
|
done ; \
|