Open Source Computer Vision Library https://opencv.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.8 KiB

#Re-usable Makefile template for
#android-ndk + swig projects
#author: Ethan Rublee
#date: summer 2010
# The path to the NDK, requires crystax version r-4 for now, due to support
#for the standard library
ifndef ANDROID_NDK_BASE
ANDROID_NDK_BASE = $(HOME)/android-ndk-r4-crystax
$(info default ndk location set ANDROID_NDK_BASE = $(ANDROID_NDK_BASE))
endif
#define OPENCV_ROOT when calling this makefile
#OPENCV_ROOT = $(ANDROID_NDK_BASE)/apps/opencv
ifndef OPENCV_ROOT
$(error Please define OPENCV_ROOT with something like the command \
make OPENCV_ROOT=<opencv>)
endif
ifndef PROJECT_PATH
$(info PROJECT_PATH defaulting to this directory)
PROJECT_PATH=.
endif
$(info OPENCV_ROOT = $(OPENCV_ROOT))
# The name of the native library
LIBNAME = libfoobar.so
#define the main jni swig interface file
#the desired java package name
#and the desired java directory
#notice that the package and the java dir
#are related...
SWIG_MAIN = jni/foobar.i
SWIG_JAVA_PACKAGE = com.foo.bar.jni
SWIG_JAVA_DIR = src/com/foo/bar/jni
SWIG_BASE = foobar
#swig definitions - auto as long as all the
#swig interface files are in jni/*.i
SWIG_JAVA_OUT = $(wildcard $(SWIG_JAVA_DIR)/*.java)
SWIG_IS = $(wildcard jni/*.i)
#the directory where the jni sources are
C_DIR = jni
#directory where to put generated files
#relative to the C_DIR
GEN_DIR = gen
#the c swig is generated and put into the jni/gen folder
SWIG_C_DIR = $(C_DIR)/$(GEN_DIR)
#this file - jin/gen/foobar_swig.cpp must be included in the Android.mk
#for it to be built!
SWIG_C_OUT = $(SWIG_C_DIR)/$(SWIG_BASE)_swig.cpp
# The real native library stripped of symbols
LIB = libs/armeabi-v7a/$(LIBNAME) libs/armeabi/$(LIBNAME)
# Find all the C++ sources in the native folder
SOURCES = $(wildcard jni/*.cpp)
HEADERS = $(wildcard jni/*.h)
ANDROID_MKS = $(wildcard jni/*.mk)
#this gets called by the make command
all: $(LIB)
#calls the ndk-build script, passing it OPENCV_ROOT and OPENCV_LIBS_DIR
$(LIB): $(SWIG_C_OUT) $(SOURCES) $(HEADERS) $(ANDROID_MKS)
$(ANDROID_NDK_BASE)/ndk-build OPENCV_ROOT=$(OPENCV_ROOT) \
OPENCV_LIBS_DIR=$(OPENCV_LIBS_DIR) PROJECT_PATH=$(PROJECT_PATH) SWIG_C_OUT=$(GEN_DIR)/$(SWIG_BASE)_swig.cpp V=$(V) $(NDK_FLAGS)
#this creates the swig wrappers
#-I$(OPENCV_ROOT)/android/jni is an additional swig include path
$(SWIG_C_OUT): $(SWIG_IS)
make clean-swig &&\
mkdir -p $(SWIG_C_DIR) &&\
mkdir -p $(SWIG_JAVA_DIR) &&\
swig -java -c++ -I$(OPENCV_ROOT)/android/jni -package "$(SWIG_JAVA_PACKAGE)" \
-outdir $(SWIG_JAVA_DIR) \
-o $(SWIG_C_OUT) $(SWIG_MAIN)
#clean targets
.PHONY: clean clean-swig cleanall
#this deletes the generated swig java and the generated c wrapper
clean-swig:
rm -f $(SWIG_JAVA_OUT) $(SWIG_C_OUT)
#does clean-swig and then uses the ndk-build clean
clean: clean-swig
$(ANDROID_NDK_BASE)/ndk-build clean V=$(V) $(NDK_FLAGS)