Commit 7c8a3da0 authored by Alexander Alekhin's avatar Alexander Alekhin

Merge pull request #10709 from alalek:cleanup_2018

parents 9d25bd58 36d4c29b
[tgit]
icon = doc/opencv.ico
This folder contains toolchains and additional files that are needed for cross compilation. This folder contains toolchains and additional files that are needed for cross compilation.
For more information see introduction tutorials for target platform in documentation: For more information see introduction tutorials for target platform in documentation:
http://docs.opencv.org/doc/tutorials/introduction/table_of_content_introduction/table_of_content_introduction.html#table-of-content-introduction https://docs.opencv.org/master/df/d65/tutorial_table_of_content_introduction.html
#!/usr/bin/python
from optparse import OptionParser
from shutil import rmtree
import os
architecture = 'armeabi'
excludedHeaders = set(['hdf5.h', 'cap_ios.h', '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('Generating 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('Building 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(includeJni):
headers = []
print('Building 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
if (includeJni):
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 [options] <OpenCV_Manager install directory> <OpenCV_Manager version>'
parser = OptionParser(usage = usage)
parser.add_option('--exclude-jni', dest='excludeJni', action="store_true", default=False, metavar="EXCLUDE_JNI", help='Exclude headers for all JNI functions')
parser.add_option('--sdk', dest='sdk', default='~/NVPACK/android-sdk-linux', metavar="PATH", help='Android SDK path')
parser.add_option('--ndk', dest='ndk', default='/opt/android-ndk-r8c', metavar="PATH", help='Android NDK path')
parser.add_option('--java-api-level', dest='java_api_level', default='14', metavar="JAVA_API_LEVEL", help='Java API level for generating JNI headers')
(options, args) = parser.parse_args()
if 2 != len(args):
parser.print_help()
quit()
managerDir = args[0]
version = args[1]
include_jni = not options.excludeJni
print 'Include Jni headers: %s' % (include_jni)
NDK_path = options.ndk
print 'Using Android NDK from "%s"' % NDK_path
SDK_path = options.sdk
print 'Using Android SDK from "%s"' % SDK_path
headers = FindHeaders(include_jni)
includes = FindIncludes()
libraries = FindLibraries()
gcc_options = FilterGCCOptions()
WriteXml(version, headers, includes, libraries)
# 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
native_camera_r4.3.0; armeabi; 14; $ANDROID_STUB_ROOT/4.3.0
native_camera_r4.3.0; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.3.0
native_camera_r4.3.0; x86; 14; $ANDROID_STUB_ROOT/4.3.0
native_camera_r4.3.0; mips; 14; $ANDROID_STUB_ROOT/4.3.0
native_camera_r4.4.0; armeabi; 14; $ANDROID_STUB_ROOT/4.4.0
native_camera_r4.4.0; armeabi-v7a; 14; $ANDROID_STUB_ROOT/4.4.0
native_camera_r4.4.0; x86; 14; $ANDROID_STUB_ROOT/4.4.0
native_camera_r4.4.0; mips; 14; $ANDROID_STUB_ROOT/4.4.0
#!/usr/bin/python
import os
import sys
import shutil
ScriptHome = os.path.split(sys.argv[0])[0]
ConfFile = open(os.path.join(ScriptHome, "camera_build.conf"), "rt")
HomeDir = os.getcwd()
stub = os.environ.get("ANDROID_STUB_ROOT", "")
if (stub == ""):
print("Warning: ANDROID_STUB_ROOT environment variable is not set or is empty")
for s in ConfFile.readlines():
s = s[0:s.find("#")]
if (not s):
continue
keys = s.split(";")
if (len(keys) < 4):
print("Error: invalid config line: \"%s\"" % s)
continue
MakeTarget = str.strip(keys[0])
Arch = str.strip(keys[1])
NativeApiLevel = str.strip(keys[2])
AndroidTreeRoot = str.strip(keys[3])
AndroidTreeRoot = str.strip(AndroidTreeRoot, "\n")
AndroidTreeRoot = os.path.expandvars(AndroidTreeRoot)
print("Building %s for %s" % (MakeTarget, Arch))
BuildDir = os.path.join(HomeDir, MakeTarget + "_" + Arch)
if (os.path.exists(BuildDir)):
shutil.rmtree(BuildDir)
try:
os.mkdir(BuildDir)
except:
print("Error: cannot create direcotry \"%s\"" % BuildDir)
continue
shutil.rmtree(os.path.join(AndroidTreeRoot, "out", "target", "product", "generic", "system"), ignore_errors=True)
LinkerLibs = os.path.join(AndroidTreeRoot, "bin_arm", "system")
if (Arch == "x86"):
LinkerLibs = os.path.join(AndroidTreeRoot, "bin_x86", "system")
elif (Arch == "mips"):
LinkerLibs = os.path.join(AndroidTreeRoot, "bin_mips", "system")
if (not os.path.exists(LinkerLibs)):
print("Error: Paltform libs for linker in path \"%s\" not found" % LinkerLibs)
print("Building %s for %s\t[\033[91mFAILED\033[0m]" % (MakeTarget, Arch))
continue
shutil.copytree(LinkerLibs, os.path.join(AndroidTreeRoot, "out", "target", "product", "generic", "system"))
os.chdir(BuildDir)
BuildLog = os.path.join(BuildDir, "build.log")
CmakeCmdLine = "cmake -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake -DANDROID_SOURCE_TREE=\"%s\" -DANDROID_NATIVE_API_LEVEL=\"%s\" -DANDROID_ABI=\"%s\" -DANDROID_STL=stlport_static ../.. > \"%s\" 2>&1" % (AndroidTreeRoot, NativeApiLevel, Arch, BuildLog)
MakeCmdLine = "make %s >> \"%s\" 2>&1" % (MakeTarget, BuildLog);
#print(CmakeCmdLine)
os.system(CmakeCmdLine)
#print(MakeCmdLine)
os.system(MakeCmdLine)
os.chdir(HomeDir)
CameraLib = os.path.join(BuildDir, "lib", Arch, "lib" + MakeTarget + ".so")
if (os.path.exists(CameraLib)):
try:
shutil.copyfile(CameraLib, os.path.join("..", "3rdparty", "lib", Arch, "lib" + MakeTarget + ".so"))
print("Building %s for %s\t[\033[92mOK\033[0m]" % (MakeTarget, Arch));
except:
print("Building %s for %s\t[\033[91mFAILED\033[0m]" % (MakeTarget, Arch));
else:
print("Building %s for %s\t[\033[91mFAILED\033[0m]" % (MakeTarget, Arch));
ConfFile.close()
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_android_arm
cd build_android_arm
cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake $@ ../..
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_android_mips
cd build_android_mips
cmake -DANDROID_ABI=mips -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake $@ ../..
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_android_service
cd build_android_service
cmake -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.4.3" -DANDROID_STL=stlport_static -DANDROID_STL_FORCE_FEATURES=OFF -DBUILD_ANDROID_SERVICE=ON -DANDROID_SOURCE_TREE=~/Projects/AndroidSource/ServiceStub/ $@ ../..
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_android_x86
cd build_android_x86
cmake -DANDROID_ABI=x86 -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake $@ ../..
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_linux_arm_hardfp
cd build_linux_arm_hardfp
cmake -DCMAKE_TOOLCHAIN_FILE=../linux/arm-gnueabi.toolchain.cmake $@ ../..
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_linux_arm_softfp
cd build_linux_arm_softfp
cmake -DSOFTFP=ON -DCMAKE_TOOLCHAIN_FILE=../linux/arm-gnueabi.toolchain.cmake $@ ../..
#!/bin/sh
mkdir -p build_carma
cd build_carma
cmake \
-DGCC_COMPILER_VERSION="4.5" -DSOFTFP=ON -DUSE_NEON=ON -DCMAKE_SKIP_RPATH=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/arm-linux-gnueabi/cuda/ -DCUDA_ARCH_BIN="2.1(2.0)" -DCUDA_ARCH_PTX="" \
-DWITH_TBB=ON -DWITH_CUBLAS=ON \
-DBUILD_ZLIB=ON -DBUILD_TIFF=ON -DBUILD_JASPER=ON -DBUILD_JPEG=ON -DBUILD_PNG=ON -DBUILD_OPENEXR=ON -DBUILD_TBB=ON \
-DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake $@ ../../..
mkdir build_winrt_arm
cd build_winrt_arm
set msvc_path=C:\Program Files\Microsoft Visual Studio 11.0
call "%msvc_path%\Common7\Tools\VsDevCmd.bat"
call "%msvc_path%\VC\bin\x86_arm\vcvarsx86_arm.bat"
cmake.exe -GNinja -DCMAKE_BUILD_TYPE=Release -DENABLE_WINRT_MODE=ON -DWITH_FFMPEG=OFF -DWITH_MSMF=OFF -DWITH_DSHOW=OFF -DWITH_VFW=OFF -DWITH_OPENEXR=OFF -DWITH_CUDA=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_python=OFF -DBUILD_opencv_java=OFF -DCMAKE_TOOLCHAIN_FILE=..\winrt\arm.winrt.toolchain.cmake %* ..\..
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR "arm-v7a")
set(CMAKE_FIND_ROOT_PATH "${CMAKE_SOURCE_DIR}/platforms/winrt")
set(CMAKE_REQUIRED_DEFINITIONS -D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE)
add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE)
@echo off
set FOUND_VC=0
if defined VS120COMNTOOLS (
set VSTOOLS="%VS120COMNTOOLS%"
set VC_VER=120
set FOUND_VC=1
)
set VSTOOLS=%VSTOOLS:"=%
set "VSTOOLS=%VSTOOLS:\=/%"
set VSVARS="%VSTOOLS%vsvars32.bat"
if not defined VSVARS (
echo Can't find VC2013 installed!
goto ERROR
)
echo./*
echo. * Building OpenCV
echo. */
echo.
call %VSVARS%
if %FOUND_VC%==1 (
call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Release
call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Debug
call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Debug
call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Release
call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Release
)
echo.&goto:EOF
::--------------------------------------------------------
::-- DoMSBuild
::--------------------------------------------------------
:DoMSBuild
msbuild %~1 /p:Configuration="%~2" /m
@if errorlevel 1 goto :ERROR
goto:EOF
:ERROR
pause
:EOF
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment