forked from dumganhar/libwebsockets
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
James Chen
committed
May 30, 2013
1 parent
0615f48
commit f77b8b6
Showing
13 changed files
with
2,271 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,228 @@ | ||
#!/usr/bin/python | ||
|
||
from optparse import OptionParser | ||
from shutil import rmtree | ||
import os | ||
|
||
|
||
architecture = 'armeabi' | ||
excludedHeaders = set(['hdf5.h', 'cap_ios.h', | ||
'eigen.hpp', 'cxeigen.hpp' #TOREMOVE | ||
]) | ||
systemIncludes = ['sources/cxx-stl/gnu-libstdc++/4.6/include', \ | ||
'/opt/android-ndk-r8c/platforms/android-8/arch-arm', # TODO: check if this one could be passed as command line arg | ||
'sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include'] | ||
targetLibs = ['libopencv_java.so'] | ||
preamble = ['Eigen/Core'] | ||
# TODO: get gcc_options automatically | ||
gcc_options = ['-fexceptions', '-frtti', '-Wno-psabi', '--sysroot=/opt/android-ndk-r8c/platforms/android-8/arch-arm', '-fpic', '-D__ARM_ARCH_5__', '-D__ARM_ARCH_5T__', '-D__ARM_ARCH_5E__', '-D__ARM_ARCH_5TE__', '-fsigned-char', '-march=armv5te', '-mtune=xscale', '-msoft-float', '-fdata-sections', '-ffunction-sections', '-Wa,--noexecstack ', '-W', '-Wall', '-Werror=return-type', '-Werror=address', '-Werror=sequence-point', '-Wformat', '-Werror=format-security', '-Wmissing-declarations', '-Wundef', '-Winit-self', '-Wpointer-arith', '-Wshadow', '-Wsign-promo', '-Wno-narrowing', '-fdiagnostics-show-option', '-fomit-frame-pointer', '-mthumb', '-fomit-frame-pointer', '-O3', '-DNDEBUG ', '-DNDEBUG'] | ||
excludedOptionsPrefix = '-W' | ||
|
||
|
||
|
||
def GetHeaderFiles(root): | ||
headers = [] | ||
for path in os.listdir(root): | ||
if not os.path.isdir(os.path.join(root, path)) \ | ||
and os.path.splitext(path)[1] in ['.h', '.hpp'] \ | ||
and not path in excludedHeaders: | ||
headers.append(os.path.join(root, path)) | ||
return sorted(headers) | ||
|
||
|
||
|
||
def GetClasses(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 += GetClasses(currentPath, prefix + path) | ||
else: | ||
name = str.split(path, '.')[0] | ||
ext = str.split(path, '.')[1] | ||
if (ext == 'class'): | ||
classes.append(prefix + name) | ||
return classes | ||
|
||
|
||
|
||
def GetJavaHHeaders(): | ||
print('\nGenerating JNI headers for Java API ...') | ||
|
||
javahHeaders = os.path.join(managerDir, 'javah_generated_headers') | ||
if os.path.exists(javahHeaders): | ||
rmtree(javahHeaders) | ||
os.makedirs(os.path.join(os.getcwd(), javahHeaders)) | ||
|
||
AndroidJavaDeps = os.path.join(SDK_path, 'platforms/android-11/android.jar') | ||
|
||
classPath = os.path.join(managerDir, 'sdk/java/bin/classes') | ||
if not os.path.exists(classPath): | ||
print('Error: no Java classes found in \'%s\'' % classPath) | ||
quit() | ||
|
||
allJavaClasses = GetClasses(classPath, '') | ||
if not allJavaClasses: | ||
print('Error: no Java classes found') | ||
quit() | ||
|
||
for currentClass in allJavaClasses: | ||
os.system('javah -d %s -classpath %s:%s %s' % (javahHeaders, classPath, \ | ||
AndroidJavaDeps, currentClass)) | ||
|
||
print('\nBuilding JNI headers list ...') | ||
jniHeaders = GetHeaderFiles(javahHeaders) | ||
|
||
return jniHeaders | ||
|
||
|
||
|
||
def GetImmediateSubdirs(dir): | ||
return [name for name in os.listdir(dir) | ||
if os.path.isdir(os.path.join(dir, name))] | ||
|
||
|
||
|
||
def GetOpenCVModules(): | ||
makefile = open(os.path.join(managerDir, 'sdk/native/jni/OpenCV.mk'), 'r') | ||
makefileStr = makefile.read() | ||
left = makefileStr.find('OPENCV_MODULES:=') + len('OPENCV_MODULES:=') | ||
right = makefileStr[left:].find('\n') | ||
modules = makefileStr[left:left+right].split() | ||
modules = filter(lambda x: x != 'ts' and x != 'androidcamera', modules) | ||
return modules | ||
|
||
|
||
|
||
def FindHeaders(): | ||
headers = [] | ||
|
||
print('\nBuilding Native OpenCV header list ...') | ||
|
||
cppHeadersFolder = os.path.join(managerDir, 'sdk/native/jni/include/opencv2') | ||
|
||
modulesFolders = GetImmediateSubdirs(cppHeadersFolder) | ||
modules = GetOpenCVModules() | ||
|
||
cppHeaders = [] | ||
for m in modules: | ||
for f in modulesFolders: | ||
moduleHeaders = [] | ||
if f == m: | ||
moduleHeaders += GetHeaderFiles(os.path.join(cppHeadersFolder, f)) | ||
if m == 'flann': | ||
flann = os.path.join(cppHeadersFolder, f, 'flann.hpp') | ||
moduleHeaders.remove(flann) | ||
moduleHeaders.insert(0, flann) | ||
cppHeaders += moduleHeaders | ||
|
||
|
||
cppHeaders += GetHeaderFiles(cppHeadersFolder) | ||
headers += cppHeaders | ||
|
||
cHeaders = GetHeaderFiles(os.path.join(managerDir, \ | ||
'sdk/native/jni/include/opencv')) | ||
headers += cHeaders | ||
|
||
headers += GetJavaHHeaders() | ||
|
||
return headers | ||
|
||
|
||
|
||
def FindLibraries(): | ||
libraries = [] | ||
for lib in targetLibs: | ||
libraries.append(os.path.join(managerDir, 'sdk/native/libs', architecture, lib)) | ||
return libraries | ||
|
||
|
||
|
||
def FindIncludes(): | ||
includes = [os.path.join(managerDir, 'sdk', 'native', 'jni', 'include'), | ||
os.path.join(managerDir, 'sdk', 'native', 'jni', 'include', 'opencv'), | ||
os.path.join(managerDir, 'sdk', 'native', 'jni', 'include', 'opencv2')] | ||
|
||
for inc in systemIncludes: | ||
includes.append(os.path.join(NDK_path, inc)) | ||
|
||
return includes | ||
|
||
|
||
|
||
def FilterGCCOptions(): | ||
gcc = filter(lambda x: not x.startswith(excludedOptionsPrefix), gcc_options) | ||
return sorted(gcc) | ||
|
||
|
||
|
||
def WriteXml(version, headers, includes, libraries): | ||
xmlName = version + '.xml' | ||
|
||
print '\noutput file: ' + xmlName | ||
try: | ||
xml = open(xmlName, 'w') | ||
except: | ||
print 'Error: Cannot open output file "%s" for writing' % xmlName | ||
quit() | ||
|
||
xml.write('<descriptor>') | ||
|
||
xml.write('\n\n<version>') | ||
xml.write('\n\t%s' % version) | ||
xml.write('\n</version>') | ||
|
||
xml.write('\n\n<headers>') | ||
xml.write('\n\t%s' % '\n\t'.join(headers)) | ||
xml.write('\n</headers>') | ||
|
||
xml.write('\n\n<include_paths>') | ||
xml.write('\n\t%s' % '\n\t'.join(includes)) | ||
xml.write('\n</include_paths>') | ||
|
||
# TODO: uncomment when Eigen problem is solved | ||
# xml.write('\n\n<include_preamble>') | ||
# xml.write('\n\t%s' % '\n\t'.join(preamble)) | ||
# xml.write('\n</include_preamble>') | ||
|
||
xml.write('\n\n<libs>') | ||
xml.write('\n\t%s' % '\n\t'.join(libraries)) | ||
xml.write('\n</libs>') | ||
|
||
xml.write('\n\n<gcc_options>') | ||
xml.write('\n\t%s' % '\n\t'.join(gcc_options)) | ||
xml.write('\n</gcc_options>') | ||
|
||
xml.write('\n\n</descriptor>') | ||
|
||
|
||
|
||
if __name__ == '__main__': | ||
usage = '%prog <OpenCV_Manager install directory> <OpenCV_Manager version>' | ||
parser = OptionParser(usage = usage) | ||
|
||
args = parser.parse_args() | ||
if 2 != len(args): | ||
parser.print_help() | ||
quit() | ||
|
||
managerDir = args[1][0] | ||
version = args[1][1] | ||
|
||
NDK_path = '/opt/android-ndk-r8c' | ||
print '\nUsing Android NDK from "%s"' % NDK_path | ||
|
||
SDK_path = '~/NVPACK/android-sdk-linux' | ||
print '\nUsing Android SDK from "%s"' % SDK_path | ||
|
||
headers = FindHeaders() | ||
|
||
includes = FindIncludes() | ||
|
||
libraries = FindLibraries() | ||
|
||
gcc_options = FilterGCCOptions() | ||
|
||
WriteXml(version, headers, includes, libraries) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
@ECHO OFF | ||
|
||
:: enable command extensions | ||
VERIFY BADVALUE 2>NUL | ||
SETLOCAL ENABLEEXTENSIONS || (ECHO Unable to enable command extensions. & EXIT \B) | ||
|
||
:: build environment | ||
SET SOURCE_DIR=%cd% | ||
IF EXIST .\android.toolchain.cmake (SET BUILD_OPENCV=1) ELSE (SET BUILD_OPENCV=0) | ||
IF EXIST .\jni\nul (SET BUILD_JAVA_PART=1) ELSE (SET BUILD_JAVA_PART=0) | ||
|
||
:: load configuration | ||
PUSHD %~dp0 | ||
SET SCRIPTS_DIR=%cd% | ||
IF EXIST .\wincfg.cmd CALL .\wincfg.cmd | ||
POPD | ||
|
||
:: inherit old names | ||
IF NOT DEFINED CMAKE SET CMAKE=%CMAKE_EXE% | ||
IF NOT DEFINED MAKE SET MAKE=%MAKE_EXE% | ||
|
||
:: defaults | ||
IF NOT DEFINED BUILD_DIR SET BUILD_DIR=build | ||
IF NOT DEFINED ANDROID_ABI SET ANDROID_ABI=armeabi-v7a | ||
SET OPENCV_BUILD_DIR=%SCRIPTS_DIR%\..\%BUILD_DIR% | ||
|
||
:: check that all required variables defined | ||
PUSHD . | ||
IF NOT DEFINED ANDROID_NDK (ECHO. & ECHO You should set an environment variable ANDROID_NDK to the full path to your copy of Android NDK & GOTO end) | ||
(CD "%ANDROID_NDK%") || (ECHO. & ECHO Directory "%ANDROID_NDK%" specified by ANDROID_NDK variable does not exist & GOTO end) | ||
|
||
IF NOT EXIST "%CMAKE%" (ECHO. & ECHO You should set an environment variable CMAKE to the full path to cmake executable & GOTO end) | ||
IF NOT EXIST "%MAKE%" (ECHO. & ECHO You should set an environment variable MAKE to the full path to native port of make executable & GOTO end) | ||
|
||
IF NOT %BUILD_JAVA_PART%==1 GOTO required_variables_checked | ||
|
||
IF NOT DEFINED ANDROID_SDK (ECHO. & ECHO You should set an environment variable ANDROID_SDK to the full path to your copy of Android SDK & GOTO end) | ||
(CD "%ANDROID_SDK%" 2>NUL) || (ECHO. & ECHO Directory "%ANDROID_SDK%" specified by ANDROID_SDK variable does not exist & GOTO end) | ||
|
||
IF NOT DEFINED ANT_DIR (ECHO. & ECHO You should set an environment variable ANT_DIR to the full path to Apache Ant root & GOTO end) | ||
(CD "%ANT_DIR%" 2>NUL) || (ECHO. & ECHO Directory "%ANT_DIR%" specified by ANT_DIR variable does not exist & GOTO end) | ||
|
||
IF NOT DEFINED JAVA_HOME (ECHO. & ECHO You should set an environment variable JAVA_HOME to the full path to JDK & GOTO end) | ||
(CD "%JAVA_HOME%" 2>NUL) || (ECHO. & ECHO Directory "%JAVA_HOME%" specified by JAVA_HOME variable does not exist & GOTO end) | ||
|
||
:required_variables_checked | ||
POPD | ||
|
||
:: check for ninja | ||
echo "%MAKE%"|findstr /i ninja >nul: | ||
IF %errorlevel%==1 (SET BUILD_WITH_NINJA=0) ELSE (SET BUILD_WITH_NINJA=1) | ||
IF %BUILD_WITH_NINJA%==1 (SET CMAKE_GENERATOR=Ninja) ELSE (SET CMAKE_GENERATOR=MinGW Makefiles) | ||
|
||
:: create build dir | ||
IF DEFINED REBUILD rmdir /S /Q "%BUILD_DIR%" 2>NUL | ||
MKDIR "%BUILD_DIR%" 2>NUL | ||
PUSHD "%BUILD_DIR%" || (ECHO. & ECHO Directory "%BUILD_DIR%" is not found & GOTO end) | ||
|
||
:: run cmake | ||
ECHO. & ECHO Runnning cmake... | ||
ECHO ANDROID_ABI=%ANDROID_ABI% | ||
ECHO. | ||
IF NOT %BUILD_OPENCV%==1 GOTO other-cmake | ||
:opencv-cmake | ||
("%CMAKE%" -G"%CMAKE_GENERATOR%" -DANDROID_ABI="%ANDROID_ABI%" -DCMAKE_TOOLCHAIN_FILE="%SOURCE_DIR%"\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM="%MAKE%" %* "%SOURCE_DIR%\..") && GOTO cmakefin | ||
ECHO. & ECHO cmake failed & GOTO end | ||
:other-cmake | ||
("%CMAKE%" -G"%CMAKE_GENERATOR%" -DANDROID_ABI="%ANDROID_ABI%" -DOpenCV_DIR="%OPENCV_BUILD_DIR%" -DCMAKE_TOOLCHAIN_FILE="%OPENCV_BUILD_DIR%\..\android.toolchain.cmake" -DCMAKE_MAKE_PROGRAM="%MAKE%" %* "%SOURCE_DIR%") && GOTO cmakefin | ||
ECHO. & ECHO cmake failed & GOTO end | ||
:cmakefin | ||
|
||
:: run make | ||
ECHO. & ECHO Building native libs... | ||
IF %BUILD_WITH_NINJA%==0 ("%MAKE%" -j %NUMBER_OF_PROCESSORS% VERBOSE=%VERBOSE%) || (ECHO. & ECHO make failed & GOTO end) | ||
IF %BUILD_WITH_NINJA%==1 ("%MAKE%") || (ECHO. & ECHO ninja failed & GOTO end) | ||
|
||
IF NOT %BUILD_JAVA_PART%==1 GOTO end | ||
POPD && PUSHD %SOURCE_DIR% | ||
|
||
:: configure java part | ||
ECHO. & ECHO Updating Android project... | ||
(CALL "%ANDROID_SDK%\tools\android" update project --name %PROJECT_NAME% --path .) || (ECHO. & ECHO failed to update android project & GOTO end) | ||
|
||
:: compile java part | ||
ECHO. & ECHO Compiling Android project... | ||
(CALL "%ANT_DIR%\bin\ant" debug) || (ECHO. & ECHO failed to compile android project & GOTO end) | ||
|
||
:end | ||
POPD | ||
ENDLOCAL |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# make target; arch; API level; Android Source Code Root | ||
native_camera_r2.2.0; armeabi; 8; $ANDROID_STUB_ROOT/2.2.2 | ||
native_camera_r2.2.0; armeabi-v7a; 8; $ANDROID_STUB_ROOT/2.2.2 | ||
native_camera_r2.3.3; armeabi; 9; $ANDROID_STUB_ROOT/2.3.3 | ||
native_camera_r2.3.3; armeabi-v7a; 9; $ANDROID_STUB_ROOT/2.3.3 | ||
native_camera_r2.3.3; x86; 9; $ANDROID_STUB_ROOT/2.3.3 | ||
native_camera_r3.0.1; armeabi; 9; $ANDROID_STUB_ROOT/3.0.1 | ||
native_camera_r3.0.1; armeabi-v7a; 9; $ANDROID_STUB_ROOT/3.0.1 | ||
native_camera_r3.0.1; x86; 9; $ANDROID_STUB_ROOT/3.0.1 | ||
native_camera_r4.0.3; armeabi; 14; $ANDROID_STUB_ROOT/4.0.3 | ||
native_camera_r4.0.3; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.0.3 | ||
native_camera_r4.0.3; x86; 14; $ANDROID_STUB_ROOT/4.0.3 | ||
native_camera_r4.0.3; mips; 14; $ANDROID_STUB_ROOT/4.0.3_mips | ||
native_camera_r4.0.0; armeabi; 14; $ANDROID_STUB_ROOT/4.0.0 | ||
native_camera_r4.0.0; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.0.0 | ||
native_camera_r4.1.1; armeabi; 14; $ANDROID_STUB_ROOT/4.1.1 | ||
native_camera_r4.1.1; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.1.1 | ||
native_camera_r4.1.1; x86; 14; $ANDROID_STUB_ROOT/4.1.1 | ||
native_camera_r4.1.1; mips; 14; $ANDROID_STUB_ROOT/4.1.1 | ||
native_camera_r4.2.0; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.2.0 | ||
native_camera_r4.2.0; armeabi; 14; $ANDROID_STUB_ROOT/4.2.0 | ||
native_camera_r4.2.0; x86; 14; $ANDROID_STUB_ROOT/4.2.0 | ||
native_camera_r4.2.0; mips; 14; $ANDROID_STUB_ROOT/4.2.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
@ECHO OFF | ||
|
||
PUSHD %~dp0.. | ||
CALL .\scripts\build.cmd %* -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON | ||
POPD |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/bin/sh | ||
cd `dirname $0`/.. | ||
|
||
mkdir -p build | ||
cd build | ||
|
||
cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake $@ ../.. | ||
|
Oops, something went wrong.