mirror of https://github.com/opencv/opencv.git
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.
103 lines
3.5 KiB
103 lines
3.5 KiB
12 years ago
|
#!/usr/bin/python
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
ANDROID_SDK_PATH="/opt/android-sdk-linux"
|
||
|
ANDROID_NDK_PATH="/opt/android-ndk-r8"
|
||
|
INSTALL_DIRECTORY="OpenCV-2.4.2-branch"
|
||
|
CLASS_PATH=os.path.join(INSTALL_DIRECTORY, "sdk/java/bin/classes");
|
||
|
TMP_HEADER_PATH="tmp_include"
|
||
|
HEADER_EXTS = set(['h', 'hpp'])
|
||
|
SYS_INCLUDES = ["platforms/android-8/arch-arm/usr/include", "sources/cxx-stl/gnu-libstdc++/include", "sources/cxx-stl/gnu-libstdc++/libs/armeabi/include"]
|
||
|
|
||
|
PROJECT_NAME = "OpenCV-branch"
|
||
|
TARGET_LIBS = ["libopencv_java.so"]
|
||
|
ARCH = "armeabi"
|
||
|
GCC_OPTIONS = "-fpermissive"
|
||
|
EXCLUDE_HEADERS = set(["hdf5.h", "eigen.hpp", "cxeigen.hpp"]);
|
||
|
|
||
|
def FindClasses(root, prefix):
|
||
|
classes = []
|
||
|
if ("" != prefix):
|
||
|
prefix = prefix + "."
|
||
|
for path in os.listdir(root):
|
||
|
currentPath = os.path.join(root, path)
|
||
|
if (os.path.isdir(currentPath)):
|
||
|
classes += FindClasses(currentPath, prefix + path)
|
||
|
else:
|
||
|
name = str.split(path, ".")[0]
|
||
|
ext = str.split(path, ".")[1]
|
||
|
if (ext == "class"):
|
||
|
#print("class: %s" % (prefix + name))
|
||
|
classes.append(prefix+name)
|
||
|
return classes
|
||
|
|
||
|
def FindHeaders(root):
|
||
|
headers = []
|
||
|
for path in os.listdir(root):
|
||
|
currentPath = os.path.join(root, path)
|
||
|
if (os.path.isdir(currentPath)):
|
||
|
headers += FindHeaders(currentPath)
|
||
|
else:
|
||
|
ext = str.split(path, ".")[-1]
|
||
|
#print("%s: \"%s\"" % (currentPath, ext))
|
||
|
if (ext in HEADER_EXTS):
|
||
|
#print("Added as header file")
|
||
|
if (path not in EXCLUDE_HEADERS):
|
||
|
headers.append(currentPath)
|
||
|
return headers
|
||
|
|
||
|
outputFileName = PROJECT_NAME + ".xml"
|
||
|
try:
|
||
|
outputFile = open(outputFileName, "w")
|
||
|
except:
|
||
|
print("Error: Cannot open output file \"%s\" for writing" % outputFileName)
|
||
|
|
||
|
allJavaClasses = FindClasses(CLASS_PATH, "")
|
||
|
if (not allJavaClasses):
|
||
|
print("Error: No Java classes found :(")
|
||
|
exit(-1)
|
||
|
|
||
|
if (not os.path.exists(TMP_HEADER_PATH)):
|
||
|
os.makedirs(os.path.join(os.getcwd(), TMP_HEADER_PATH))
|
||
|
|
||
|
print("Generating JNI headers for Java API ...")
|
||
|
AndroidJavaDeps = os.path.join(ANDROID_SDK_PATH, "platforms/android-11/android.jar")
|
||
|
for currentClass in allJavaClasses:
|
||
|
os.system("javah -d %s -classpath %s:%s %s" % (TMP_HEADER_PATH, CLASS_PATH, AndroidJavaDeps, currentClass))
|
||
|
|
||
|
print("Building JNI headers list ...")
|
||
|
jniHeaders = FindHeaders(TMP_HEADER_PATH)
|
||
|
#print(jniHeaders)
|
||
|
|
||
|
print("Building Native OpenCV header list ...")
|
||
|
cHeaders = FindHeaders(os.path.join(INSTALL_DIRECTORY, "sdk/native/jni/include/opencv"))
|
||
|
cppHeaders = FindHeaders(os.path.join(INSTALL_DIRECTORY, "sdk/native/jni/include/opencv2"))
|
||
|
#print(cHeaders)
|
||
|
#print(cppHeaders)
|
||
|
|
||
|
print("Writing config file ...")
|
||
|
outputFile.write("<descriptor>\n\n<version>\n\t%s\n</version>\n\n<headers>\n" % PROJECT_NAME)
|
||
|
outputFile.write("\t" + "\n\t".join(cHeaders))
|
||
|
outputFile.write("\n\t" + "\n\t".join(cppHeaders))
|
||
|
outputFile.write("\n\t" + "\n\t".join(jniHeaders))
|
||
|
outputFile.write("\n</headers>\n\n")
|
||
|
|
||
|
includes = []
|
||
|
for inc in SYS_INCLUDES:
|
||
|
includes.append(os.path.join(ANDROID_NDK_PATH, inc))
|
||
|
|
||
|
outputFile.write("<include_paths>\n\tOpenCV-2.4.2-branch/sdk/native/jni/include\n\tOpenCV-2.4.2-branch/sdk/native/jni/include/opencv\n\tOpenCV-2.4.2-branch/sdk/native/jni/include/opencv2\n")
|
||
|
|
||
|
outputFile.write("\t%s\n</include_paths>\n\n" % "\n\t".join(includes))
|
||
|
|
||
|
libraries = []
|
||
|
for lib in TARGET_LIBS:
|
||
|
libraries.append(os.path.join(INSTALL_DIRECTORY, "sdk/native/libs", ARCH, lib))
|
||
|
|
||
|
outputFile.write("<libs>\n\t%s\n</libs>\n\n" % "\n\t".join(libraries))
|
||
|
outputFile.write("<gcc_options>\n\t%s\n</gcc_options>\n\n</descriptor>" % GCC_OPTIONS)
|
||
|
|
||
|
print("done!")
|