From: Alexander Smorkalov Date: Mon, 10 Sep 2012 07:35:22 +0000 (+0400) Subject: abi-compatibility-check tool configuration script for adnroid added. X-Git-Tag: accepted/2.0/20130307.220821~364^2~210^2~54 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1de829c359384d9dd8a655854f5697c1b4077e7a;p=profile%2Fivi%2Fopencv.git abi-compatibility-check tool configuration script for adnroid added. --- diff --git a/android/scripts/ABI_compat_generator.py b/android/scripts/ABI_compat_generator.py new file mode 100755 index 0000000..c3f77a8 --- /dev/null +++ b/android/scripts/ABI_compat_generator.py @@ -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("\n\n\n\t%s\n\n\n\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\n\n") + +includes = [] +for inc in SYS_INCLUDES: + includes.append(os.path.join(ANDROID_NDK_PATH, inc)) + +outputFile.write("\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\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("\n\t%s\n\n\n" % "\n\t".join(libraries)) +outputFile.write("\n\t%s\n\n\n" % GCC_OPTIONS) + +print("done!")