parent
7d83db7d4d
commit
1de829c359
1 changed files with 102 additions and 0 deletions
@ -0,0 +1,102 @@ |
||||
#!/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!") |
Loading…
Reference in new issue