`
shappy1978
  • 浏览: 680490 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Cross Compile Script of Tesseract

阅读更多

The script on internet is both too old and has issues on compiling. I enhance it and it's suitable for XCode 7.3.1

#!/bin/sh
# build.sh

GLOBAL_OUTDIR="`pwd`/dependencies"
LOCAL_OUTDIR="./outdir"
LEPTON_LIB="`pwd`/leptonica-1.73"
TIFF_LIB="`pwd`/tiff-4.0.6"
TESSERACT_LIB="`pwd`/tesseract-3.04.01"

IOS_BASE_SDK="9.3"
IOS_DEPLOY_TGT="9.3"

setenv_all()
{
	# Add internal libs
	export CFLAGS="-O2 $CFLAGS -I$GLOBAL_OUTDIR/include -L$GLOBAL_OUTDIR/lib"

    export TOOLCHAINROOT=/Applications/Xcode731.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
    export CXX="$TOOLCHAINROOT/usr/bin/clang"
    export CC="$TOOLCHAINROOT/usr/bin/clang"

    export LD=$TOOLCHAINROOT/usr/bin/ld
    export AR=$TOOLCHAINROOT/usr/bin/ar
    export AS=$TOOLCHAINROOT/usr/bin/as
    export NM=$TOOLCHAINROOT/usr/bin/nm
    export RANLIB=$TOOLCHAINROOT/usr/bin/ranlib
    export LDFLAGS="-L$SDKROOT/usr/lib -L/usr/local/lib -lz"
# export LDFLAGS="-L/usr/lib/ -L$GLOBAL_OURDIR/lib -lz"
	
	export CPPFLAGS=$CFLAGS
	export CXXFLAGS=$CFLAGS
}

setenv_arm6()
{
	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
	
	export DEVROOT=/Applications/Xcode731.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
	export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
	
	export CFLAGS="-arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
	
	setenv_all
    echo "compile arm6"
}

setenv_arm7()
{
	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
	
	export DEVROOT=//Applications/Xcode731.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
	export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
	
	export CFLAGS="-arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
	
	setenv_all
    echo "compile arm7"
}

setenv_i386()
{
	unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
	
export DEVROOT=/Applications/Xcode731.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
	export SDKROOT=$DEVROOT/SDKs/iPhoneSimulator$IOS_BASE_SDK.sdk
	
	export CFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT"
	
	setenv_all
    echo "compile i386"
}

create_outdir_lipo()
{
    echo "create_outdir_lipo"
	for lib_i386 in `find $LOCAL_OUTDIR/i386 -name "lib*\.a"`; do
#lib_arm6=`echo $lib_i386 | sed "s/i386/arm6/g"`
		lib_arm7=`echo $lib_i386 | sed "s/i386/arm7/g"`
		lib=`echo $lib_i386 | sed "s/i386\///g"`
#lipo -arch armv6 $lib_arm6 -arch armv7 $lib_arm7 -arch i386 $lib_i386 -create -output $lib
        lipo -arch armv7 $lib_arm7 -arch i386 $lib_i386 -create -output $lib
	done
}

merge_libfiles()
{
	DIR=$1
	LIBNAME=$2
	
	cd $DIR
	for i in `find . -name "lib*.a"`; do
		$AR -x $i
	done
	$AR -r $LIBNAME *.o
	rm -rf *.o __*
	cd -
}

#######################
# LIBTIFF
#######################

#cd $TIFF_LIB
#rm -rf $LOCAL_OUTDIR
#mkdir -p $LOCAL_OUTDIR/arm6 $LOCAL_OUTDIR/arm7 $LOCAL_OUTDIR/i386
#
##make clean 2> /dev/null
##make distclean 2> /dev/null
##setenv_arm6
##./configure --host=arm-apple-darwin6 --enable-shared=no --prefix=`pwd`/$LOCAL_OUTDIR/arm6
##make -j4
##make install
#
#make clean 2> /dev/null
#make distclean 2> /dev/null
#setenv_arm7
#./configure --host=arm-apple-darwin7 --enable-shared=no --prefix=`pwd`/$LOCAL_OUTDIR/arm7
#make -j4
#make install
#
#make clean 2> /dev/null
#make distclean 2> /dev/null
#setenv_i386
#./configure --host=x86_64 --enable-shared=no --prefix=`pwd`/$LOCAL_OUTDIR/i386
#make -j4
#make install
#
## since we're installing the libraries into LOCAL_OUTDIR/<arch>/lib
## create_outdir_lipo will try to put them in LOCAL_OUTDIR/lib
#mkdir -p $LOCAL_OUTDIR/lib
#create_outdir_lipo
#mkdir -p $GLOBAL_OUTDIR/include && cp -rvf $LOCAL_OUTDIR/i386/include/*.h $GLOBAL_OUTDIR/include
#mkdir -p $GLOBAL_OUTDIR/lib && cp -rvf $LOCAL_OUTDIR/lib/lib*.a $GLOBAL_OUTDIR/lib
#cd ..


#######################
# LEPTONLIB
#######################
#cd $LEPTON_LIB
#rm -rf $LOCAL_OUTDIR
#mkdir -p $LOCAL_OUTDIR/arm6 $LOCAL_OUTDIR/arm7 $LOCAL_OUTDIR/i386
##
##make clean 2> /dev/null
##make distclean 2> /dev/null
##setenv_arm6
##./configure --host=arm-apple-darwin6 --enable-shared=no --disable-programs --without-zlib --without-libpng --without-jpeg --without-giflib --with-libtiff
##make -j4
##cp -rvf src/.libs/lib*.a $LOCAL_OUTDIR/arm6
#
#make clean 2> /dev/null
#make distclean 2> /dev/null
#setenv_arm7
#./configure --host=arm-apple-darwin7 --enable-shared=no --disable-programs --without-zlib --without-libpng --without-jpeg --without-giflib --with-libtiff
#make -j4
#cp -rvf src/.libs/lib*.a $LOCAL_OUTDIR/arm7
#
#make clean 2> /dev/null
#make distclean 2> /dev/null
#setenv_i386
#./configure --host=x86_64 --enable-shared=no --disable-programs --without-zlib --without-libpng --without-jpeg --without-giflib --with-libtiff
#make -j4
#cp -rvf src/.libs/lib*.a $LOCAL_OUTDIR/i386
#
#create_outdir_lipo
#mkdir -p $GLOBAL_OUTDIR/include/leptonica && cp -rvf src/*.h $GLOBAL_OUTDIR/include/leptonica
#mkdir -p $GLOBAL_OUTDIR/lib && cp -rvf $LOCAL_OUTDIR/lib*.a $GLOBAL_OUTDIR/lib
#cd ..


#######################
# TESSERACT-OCR (v3)
#######################
cd $TESSERACT_LIB
rm -rf $LOCAL_OUTDIR
mkdir -p $LOCAL_OUTDIR/arm6 $LOCAL_OUTDIR/arm7 $LOCAL_OUTDIR/i386

#make clean 2> /dev/null
#make distclean 2> /dev/null
#setenv_arm6
#export LDFLAGS="$LDFLAGS -ltiff"
#bash autogen.sh
#echo $CC
##export LIBLEPT_HEADERSDIR=/usr/local/include
#./configure --host=arm-apple-darwin6 --enable-shared=no LIBLEPT_HEADERSDIR=$GLOBAL_OUTDIR/include/
##./configure --host=arm-apple-darwin6 --enable-shared=no --prefix=`pwd`/$LOCAL_OUTDIR/arm7/ --with-extra-libraries=/usr/local/lib LIBLEPT_HEADERSDIR=/usr/local/include
#make -j4
#for i in `find . -name "lib*.a"`; do cp -rvf $i $LOCAL_OUTDIR/arm6; done
#merge_libfiles $LOCAL_OUTDIR/arm6 libtesseract_all.a
#echo "Buidl for arm6"

make clean 2> /dev/null
make distclean 2> /dev/null
setenv_arm7
export LDFLAGS="$LDFLAGS -ltiff"
bash autogen.sh
export LIBLEPT_HEADERSDIR=/usr/local/include
./configure --host=arm-apple-darwin7 --enable-shared=no --prefix=/usr/local/ --with-extra-libraries=/usr/local/lib
make -j4
for i in `find . -name "lib*.a" | grep -v arm`; do cp -rvf $i $LOCAL_OUTDIR/arm7; done
merge_libfiles $LOCAL_OUTDIR/arm7 libtesseract_all.a
echo "Buidl for arm7"

make clean 2> /dev/null
make distclean 2> /dev/null
setenv_i386
export LDFLAGS="$LDFLAGS -ltiff"
bash autogen.sh
export LIBLEPT_HEADERSDIR=/usr/local/include
./configure --host=x86_64 --enable-shared=no --host=i386 --prefix=/usr/local/ --with-extra-libraries=/usr/local/lib
make -j4
for i in `find . -name "lib*.a" | grep -v arm`; do cp -rvf $i $LOCAL_OUTDIR/i386; done
merge_libfiles $LOCAL_OUTDIR/i386 libtesseract_all.a
echo "Buidl for i386"

create_outdir_lipo
mkdir -p $GLOBAL_OUTDIR/include/tesseract
tess_inc=( api/apitypes.h api/baseapi.h ccmain/thresholder.h ccstruct/publictypes.h ccutil/errcode.h
           ccutil/genericvector.h ccutil/helpers.h ccutil/host.h ccutil/ndminx.h ccutil/ocrclass.h
           ccutil/platform.h ccutil/tesscallback.h ccutil/unichar.h )
for i in "${tess_inc[@]}"; do
   cp -rvf $i $GLOBAL_OUTDIR/include/tesseract
done
mkdir -p $GLOBAL_OUTDIR/lib && cp -rvf $LOCAL_OUTDIR/lib*.a $GLOBAL_OUTDIR/lib
make clean 2> /dev/null
make distclean 2> /dev/null
rm -rf $LOCAL_OUTDIR
cd ..

echo "Finished!"

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics