====== Cross compilation ====== Ces informations viennent de Glorf et demandent à être reproduites (il est dispo pour aider). Il est possible que ça ne suffise pas, tel quel. ===== Installation environnement Mac ===== ==== Install OSXcross ==== git clone https://github.com/tpoechtrager/osxcross cd osxcross Note : normalement on télécharge depuis le site d'Apple (en étant enregistré et tout, c'est un peu embêtant), j'ai mis un miroir (mais je ne garantis pas la disponibilité à moyen terme) wget http://pakuh.glorf.fr:8000/Xcode_7.3.1.dmg La suite se fait en root, y compris le build (sinon ça ne marche pas) Note : clang 3.5 marche pas, je conseille 3.8 apt-get install clang llvm-dev libxml2-dev uuid-dev libssl-dev bash patch make tar xz-utils bzip2 gzip sed cpio libbz2-dev libfuse-dev fuse libicu-dev ./tools/gen_sdk_package_darling_dmg.sh Xcode_7.3.1.dmg mv MacOSX10.11.sdk.tar.xz tarballs/ ./build.sh ./build.sh Le nom du .tar.xz sera peut-être différent sur votre système. Oui, on le lance deux fois, mais c'est normal, ça marche pas la première fois normalement. Pour pouvoir compiler en tant que non-root par la suite chown -R jenkins:jenkins target/ ==== Installer dépendances ryzomcore ==== export MACOSX_DEPLOYMENT_TARGET=10.7 export OSXCROSS_GCC_NO_STATIC_RUNTIME=1 export PATH=$PATH:/opt/osx/osxcross/target/bin osxcross-macports install libxml2 jpeg curl libogg libvorbis freetype boost openssl zlib lua-5.3 giflib ==== Compiler luabind (qui n'est pas dans macport) ==== export $RYHOME=/opt/ryzom/ryzomcore/code #Ou wherever you want cd ~ hg clone http://hg.kervala.net/luabind hg clone http://hg.kervala.net/cmake export CMAKE_MODULE_PATH=$(pwd)/cmake/modules export LUABIND_MAC_PATH=$(pwd)/luabind cd luabind mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=/opt/ryzom/ryzomcore/code/CMakeModules/OSXToolChain.cmake -DWITH_SHARED=OFF -DWITH_STATIC=ON -DWITH_LUA51=OFF -DWITH_LUA53=ON -DCMAKE_INSTALL_PREFIX=/opt/osxcross/target/external make Pour outils, mysql + squish à compiler Note : toujours CMAKE_MODULE_PATH bien défini, et les bonnes variables d'environnement pour compiler cd ~ hg clone http://hg.kervala.net/squish cd squish mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=/opt/ryzom/ryzomcore/code/CMakeModules/OSXToolChain.cmake -DWITH_SHARED=OFF -DWITH_STATIC=ON -DCMAKE_INSTALL_PREFIX=/opt/osxcross/target/external make install ===== Installation environnement Windows ===== Un simple script sh (qui va de "début script windows" à "fin script windows") à installer avant : dpkg --add-architecture i386 apt install p7zip-full binfmt-support libc6-i386 libncurses5:i386 libfreetype6:i386 bzip2 Et changer le export BASEDIR vers le répertoire où est installé le script et l'environnement de cross-compilation. ## Début script windows ## #!/bin/sh # variables à changer : export BASEDIR=/opt/wincross # à changer COMPILER=vc12 ARCH=amd64 WINEVERSION=1.9.1 URL="http://kervala.net/download/" URLPREFIX="win32_cross_" URLSUFFIX=".7z" download() { PACK=$1 if [ ! -e $URLPREFIX$PACK$URLSUFFIX ] then echo "Downloading $PACK..." wget -q $URL$URLPREFIX$PACK$URLSUFFIX fi echo "Extracting $PACK..." 7z x $URLPREFIX$PACK$URLSUFFIX 1> /dev/null RET=$? if [ -d $PACK/bin ] then chmod +x $PACK/bin/*.exe fi return $RET } if [ "$COMPILER" = "vc8" ] then echo "Using VC++ 2005 compilers" elif [ "$COMPILER" = "vc9" ] then echo "Using VC++ 2008 compilers" elif [ "$COMPILER" = "vc10" ] then echo "Using VC++ 2010 compilers" elif [ "$COMPILER" = "vc11" ] then echo "Using VC++ 2012 compilers" elif [ "$COMPILER" = "vc12" ] then echo "Using VC++ 2013 compilers" elif [ "$COMPILER" = "vc14" ] then echo "Using VC++ 2015 compilers" else echo "Bad compiler $COMPILER" return 1 fi if [ ! -d "tools" ] then download tools fi if [ ! -d $COMPILER ] then download $COMPILER ARCHS="amd64 ia64 x86 x86_amd64 x86_ia64" for TARCH in $ARCHS do CDIR=$COMPILER/bin/$TARCH if [ -d "$CDIR" ] then chmod +x $CDIR/*.exe fi done fi if [ ! -d "winsdk" ] then download winsdk fi if [ ! -d "dxsdk" ] then download dxsdk fi if [ ! -d "$COMPILER/external" ] then download $COMPILER"_external" fi export BASEDIRDOS=Z:$(echo "$BASEDIR" | sed 's/\//\\/g') export TOOLSDIR=$BASEDIR/tools export TOOLSBINDIR=$TOOLSDIR/bin export VCDIR=$BASEDIR/$COMPILER export VCBINDIR=$VCDIR/bin export WINSDKDIR=$BASEDIR/winsdk export WINSDKBINDIR=$WINSDKDIR/bin # wine if [ ! -z $WINEVERSION ] then export BASEWINEDIR=$BASEDIR/wineversion export WINEDIR=$BASEWINEDIR/$WINEVERSION/bin if [ ! -d $WINEDIR ] then echo "Downloading WINE $WINEVERSION..." wget -q http://www.playonlinux.com/wine/binaries/linux-amd64/PlayOnLinux-wine-$WINEVERSION-linux-amd64.pol echo "Extracting WINE $WINEVERSION..." tar xjf PlayOnLinux-wine-$WINEVERSION-linux-amd64.pol fi fi # remove previous win32 pathes af any export PATH=$(echo $PATH | sed 's|:'$BASEDIR'/[a-z0-9./_-]*||g') export PATH=$PATH:$WINEDIR # add wine to path export CURRENT_CPU=x86 export Configuration=Release export TARGET_PLATFORM=WIN7 export APPVER=6.1 export DEBUGMSG=Release export INCLUDE=$BASEDIRDOS"\\"$COMPILER"\\include;"$BASEDIRDOS"\\winsdk\\include" export LIB= export LIBPATH=$BASEDIRDOS"\\"$COMPILER"\\lib" export PATH=$PATH:$TOOLSBINDIR:$WINSDKBINDIR if [ $ARCH = "x86" ] then export PATH=$PATH:$VCBINDIR/x86 export WINEPATH=$BASEDIRDOS"\\"$COMPILER"\\bin\\x86;" export TARGET_CPU=x86 export LIB=$BASEDIRDOS"\\"$COMPILER"\\lib;"$BASEDIRDOS"\\winsdk\\lib;"$BASEDIRDOS"\\dxsdk\\lib" elif [ $ARCH = "amd64" ] then export PATH=$PATH:$VCBINDIR/x86_amd64 export WINEPATH=$BASEDIRDOS"\\"$COMPILER"\\bin\\x86_amd64;" export TARGET_CPU=x64 export LIB=$BASEDIRDOS"\\"$COMPILER"\\lib\\amd64;"$BASEDIRDOS"\\winsdk\\lib\\amd64;"$BASEDIRDOS"\\dxsdk\\lib\\amd64" elif [ $ARCH = "ia64" ] then export PATH=$PATH:$VCBINDIR/x86_ia64 export WINEPATH=$BASEDIRDOS"\\"$COMPILER"\\bin\\x86_ia64;" export TARGET_CPU=IA64 export LIB=$BASEDIRDOS"\\"$COMPILER"\\lib\\ia64;"$BASEDIRDOS"\\winsdk\\lib\\ia64" else echo "Bad arch $ARCH" return 1 fi export LIBPATH=$LIB export PATH=$PATH:$VCBINDIR # PATH environment variable for Wine export WINEPATH=".;"$WINEPATH$BASEDIRDOS"\\"$COMPILER"\\bin;"$BASEDIRDOS"\\winsdk\\bin;"$BASEDIRDOS"\\bin;"$BASEDIRDOS"\\tools\\bin;"$BASEDIRDOS"\\perl\\perl\\bin" export WINEPREFIX=$BASEDIR/wine/$WINEVERSION mkdir -p $WINEPREFIX # launch WINE fot the first time wine ping # Copy winemenubuilder.exe to wine to avoid missing X11 warnings #if [ -f $TOOLSBINDIR/winemenubuilder.exe ] && [ -d $WINEPREFIX/drive_c/windows/system32 ] #then # rm -f $WINEPREFIX/drive_c/windows/system32/winemenubuilder.exe # rm -f $WINEPREFIX/drive_c/windows/syswow64/winemenubuilder.exe # export WINEDLLOVERRIDES=winemenubuilder.exe=n #fi # delete fake manifests for VC++ 2008 runtimes #rm -rf $WINEPREFIX/drive_c/windows/winsxs/x86_microsoft.vc80* #rm -rf $WINEPREFIX/drive_c/windows/winsxs/manifests/x86_microsoft.vc80* #rm -f $WINEPREFIX/drive_c/windows/system32/msvcr80.dll #rm -rf $WINEPREFIX/drive_c/windows/winsxs/x86_microsoft.vc90* #rm -rf $WINEPREFIX/drive_c/windows/winsxs/manifests/x86_microsoft.vc90* #rm -f $WINEPREFIX/drive_c/windows/system32/msvcr90.dll #rm -f $WINEPREFIX/drive_c/windows/system32/msvcr100.dll #rm -f $WINEPREFIX/drive_c/windows/system32/msvcp100.dll # Remove all WINE warnings export WINEDEBUG=-all # Setting misc environment variables export QTDIR=Z:$BASEDIR/$COMPILER/qt export DXSDK_DIR=Z:$BASEDIR/dxsdk export VC_DIR=Z:$BASEDIR/$COMPILER #export MT_OPTIONS="-log /tmp/mt/log -verbose" echo "TARGET_CPU=$TARGET_CPU" echo "PATH=$PATH" echo "WINEPATH=$WINEPATH" echo "LIB=$LIB" echo "INCLUDE=$INCLUDE" export EXTERNAL_MSVC80_PATH=Z:$BASEDIR/vc8/external export EXTERNAL_MSVC90_PATH=Z:$BASEDIR/vc9/external export EXTERNAL_MSVC10_PATH=Z:$BASEDIR/vc10/external export EXTERNAL_MSVC11_PATH=Z:$BASEDIR/vc11/external export EXTERNAL_MSVC12_PATH=Z:$BASEDIR/vc12/external export EXTERNAL_MSVC14_PATH=Z:$BASEDIR/vc14/external if [ "$COMPILER" = "vc8" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC80_PATH elif [ "$COMPILER" = "vc9" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC90_PATH elif [ "$COMPILER" = "vc10" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC10_PATH elif [ "$COMPILER" = "vc11" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC11_PATH elif [ "$COMPILER" = "vc12" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC12_PATH export WINEDLLOVERRIDES="msvcr120.dll=n" elif [ "$COMPILER" = "vc14" ] then export EXTERNAL_PATH=$EXTERNAL_MSVC14_PATH fi ## Fin script windows ## ===== Compilation ===== ==== Windows ==== source /path/to/cross_win32.sh (celui d'avant) wine cmake.exe -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_PATCH=ON -DWITH_RYZOM_CUSTOM_PATCH_SERVER=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_TOOLS=OFF -DWITH_TOOLS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_LUA53=ON -DWITH_LUA51=OFF -DWITH_STLPORT=OFF -DWITH_DRIVER_DSOUND=ON -G "NMake Makefiles JOM" -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_DRIVER_OPENAL=OFF -DWITH_DRIVER_DSOUND=ON -DWITH_DRIVER_XAUDIO2=ON -DWITH_DRIVER_FMOD=ON -DWITH_DRIVER_DIRECT3D=ON .. wine jom.exe [se comporte comme make, tu peux restreindre le nombre de process avec -j1/-j2] ==== Mac ==== export MACOSX_DEPLOYMENT_TARGET=10.7 export OSXCROSS_GCC_NO_STATIC_RUNTIME=1 export PATH=$PATH:/path/to/osxcross/target/bin cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../code/CMakeModules/OSXToolChain.cmake -DWITH_RYZOM_CLIENT=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_DRIVER_OPENGL=ON -DWITH_QT=OFF -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_SNOWBALLS=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_PATCH=ON -DWITH_UNIX_STRUCTURE=OFF -DWITH_INSTALL_LIBRARIES=OFF -DWITH_RYZOM_SANDBOX=OFF -DOSX_SDK=10.11 -DWITH_LUA53=ON -DWITH_LUA51=OFF ../code make ==== Linux ==== cmake -DWITH_RYZOM_CLIENT=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_DRIVER_OPENGL=ON -DFINAL_VERSION=ON -DWITH_QT=OFF -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_SERVER=ON -DWITH_NEL_SAMPLES=ON -DWITH_SNOWBALLS=OFF -DWITH_NEL_TOOLS=ON -DWITH_RYZOM_TOOLS=ON -DWITH_RYZOM_PATCH=ON -DWITH_RYZOM_CUSTOM_PATCH_SERVER=ON -DWITH_STATIC_EXTERNAL=ON -DWITH_LUA51=OFF -DWITH_LUA53=ON .. make {{tag>tutoriel crosscompilation client windows linux osx client_rc_obsolete}}