miércoles, 22 de enero de 2014

Compilar Blender en Ubuntu 13.10




Veo que cambiaron muchisimas cosas, asi que decidí hacer una guia para compilar Blender en Ubuntu 13.10 desde cero.

Entiendo que para este tutorial contamos con una instalación de Ubuntu.

- Primero instalamos el compilador y los programas para descargar el código fuente.
sudo apt-get update; sudo apt-get install git build-essential subversion

- Con cd navegamos una carpeta donde querramos instalar... por ejemplo...
cd /home/usuario/BlenderCompilacion

- Luego con estas lineas vamos a crear una carpeta, luego baja el source y lo mete dentro (puede tardar bastante). Al final baja los addons y los archivos extras.
mkdir ~/blender-git
cd ~/blender-git
git clone http://git.blender.org/blender.git
cd blender
git submodule update --init --recursive
git submodule foreach git checkout master
git submodule foreach git pull --rebase origin master

- Para actualizar cada vez podemos hacer
git pull --rebase
git submodule foreach git pull --rebase origin master

- Con esto listo vamos a buscar y vamos a modificar el script para compilar. El mismo se encuentra en blender/build_environment/install_deps.sh
Lo copiamos y lo pegamos en la carpeta que creamos al principio de todo (/home/usuario/BlenderCompilacion).
Entramos a editarlo y modificamos la linea de SRC por lo siguiente:
SRC="/home/usuario/BlenderCompilacion/src/blender-deps"

- Si queremos con todos los complementos, que es mas peligroso de entrada, modificamos las lineas WITH_ALL  y WITH_OPENCOLLADA a true:
WITH_ALL=true
WITH_OPENCOLLADA=true

- Con esto listo abrimos una Konsola, arrastramos el .sh dentro y lo corremos... le ponemos la "Y" y la contraseña. Va a tardar un largo rato, ya que baja todas las librerias las compila y las instala.

- Termiando esto nos dará unas lineas para pegar en la terminal, usamos las de cmake, para mi fue asi:
make -j8 BUILD_CMAKE_ARGS=" -D OPENEXR_ROOT_DIR=/opt/lib/openexr -D OPENIMAGEIO_ROOT_DIR=/opt/lib/oiio -D WITH_CYCLES_OSL=ON -D WITH_LLVM=ON -D LLVM_VERSION=3.3 -D CYCLES_OSL=/opt/lib/osl -D WITH_OPENCOLLADA=ON -D WITH_CODEC_FFMPEG=ON -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;theoradec;theoraenc;theora;vorbisenc;vorbisfile;vorbis;ogg;xvidcore;vpx;mp3lame;x264;openjpeg' -D FFMPEG=/opt/lib/ffmpeg"

- Con esto listo copiamos esta linea de código y hacemos un .sh.

- Modificamos el contenido agregando al final ../blender , por lo que quedaría asi:
make -j8 BUILD_CMAKE_ARGS=" -D OPENEXR_ROOT_DIR=/opt/lib/openexr -D OPENIMAGEIO_ROOT_DIR=/opt/lib/oiio -D WITH_CYCLES_OSL=ON -D WITH_LLVM=ON -D LLVM_VERSION=3.3 -D CYCLES_OSL=/opt/lib/osl -D WITH_OPENCOLLADA=ON -D WITH_CODEC_FFMPEG=ON -D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;rt;theoradec;theoraenc;theora;vorbisenc;vorbisfile;vorbis;ogg;xvidcore;vpx;mp3lame;x264;openjpeg' -D FFMPEG=/opt/lib/ffmpeg  ../blender  && make -j8 install"

- Crear dentro de la carpeta principal una carpeta llamada "Cmake", pegar el .sh este dentro.

- Abrir una terminal y navegar este folder "cd /home/usuario/BlenderCompilacion/Cmake"

- Correr este .sh y se compilará.

-------------------------------------------------------------------------------------------------
Compilar con CUDA (el gran desafio)!!!

Lo primero a saber es que CUDA no compila con gcc 4.8, para lo que debemos usar el gcc 4.4.
Bajamos el CUDA 5.0 TOOLKIT del sitio de Nvidia.

sudo apt-get install gcc-4.4 g++-4.4

El gran problema es que CUDA va a buscar el compilador 4.4, sino no anda! Entonces vamos a buscar una forma de decirle que ya lo tenemos, y para esto usamos update-alternatives

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++ 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 10

Para comprobar si está bien la versión hagan
gcc --version
g++ --version
y deberia darles 4.4

Después de esperar esos 700 megas corremos el archivo vamos a instalarlo.

sudo sh archivo_bajado.sh

Vamos a hacer pasar las cataratas de legales... vamos a aceptar  el EULA, vamos a decir que no al Driver, y Yes al toolkit.
Le damos enter al path para el toolkit, y finalmente NO a las librerias de CUDA.
Con esto CUDA deberia instalarse correctamente, tarda unos segundos y dice que fue instalado.

Finalmente vamos a compilar blender con la version 4.8 del compilador, ya que la 4.4 es un tanto vieja.
Con estas lineas vamos a instalar mas versiones del compilador, y vamos a setear las alternativas. Por default quedará la 4.8
sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++
sudo apt-get install gcc-4.4 gcc-4.6 gcc-4.7 g++-4.4 g++-4.6 g++-4.7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 30
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 30
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Ahora debería poderse compilar Blender bien...  solo hace falta indicarle a Blender que incluya CUDA en la compilación, y eso es agregando un argumento al archivo de compilacion...

-D WITH_CYCLES_CUDA_BINARIES=ON

Los errores frecuentes es que no encuentre el cc1plus o que la version del compilador sea mayor a la indicada... pero con esto debería corregirse.

Es realmente complejo, pero funciona!