Cuando dependes de un programa antiguo (II): Phrap

Phrap es uno de esos programas bioinformáticos muuuuy usado a la hora de ensamblar todos los contigs (¡que no hay que confundir con los EST contigs!) obtenidos de secuenciadores que usan técnicas similares a la de shotgun. Este programa es gratuito para uso académico (previa solicitud a los autores), y está disponible tanto en código fuente como en módulos precompilados. El problema al instalar Phrap viene de que fue diseñado y escrito en entornos de 32 bits, con compiladores de 32 bits, en lenguaje C de Kerningan & Ritchie, y no compila muy bien que digamos en entornos de 64 bits con los compiladores actuales. El otro inconveniente es que no incluye un conjunto de datos de prueba, para ver si realmente funciona o falla.



Tras estar José Manuel Rodríguez, Andrés Cañada y yo toda una mañanaprobando combinaciones de arquitecturas y compiladores, llegamos a lassiguientes conclusiones:

  • Phrap se puede compilar y funciona en un Linux de 32 bits con el GCC, con la limitación de la cantidad de memoria que puede usar un proceso en este entorno (a lo sumo, 2GB~3GB).
  • El software no funciona muy bien en entornos Linux x86-64 (32 y 64 bits) cuando es compilado con el GCC. Aquí tuvimos que forzar una compilación de 32 bits para que los programas del paquete Phrap no dieran el temido Segmentation Fault al empezar a ensamblar, imponíendoles así una restricción artifical (estos ejecutables no pueden usar más de 2GB~3GB por ser de 32 bits). Como no teníamos otros compiladores a mano, tuvimos que dejarlo así.
  • En entornos Linux IA64 (64 bits) la cosa salió mejor de lo que esperábamos. En la máquina que tenemos con esta arquitectura (32 procesadores, 64GB de memoria), además del GCC, tenemos instalado el compilador de pago de Intel de C y C++. Con el GCC volvimos a tener problemas, pero con el ICC los ejecutables obtenidos funcionaron sin problemas. Creo que es debido a cómo empaqueta las estructuras de C y los tamaños de los tipos básicos.

Todavía nos queda hacer pruebas en Mac OS X, que tuvimos que postergar por temas de mantenimiento de nuestro CPD, pero sospechamos que se repetirá la misma historia: en 32 bits el programa funcionará, y en 64 bits el programa «petará», salvo que encontremos cómo compilarlo para que funcione.

Actualización 3 de Juio de 2008, 22:19:52: En un post de hoy mismo he publicado una solución mejor a la publicada en el segundo comentario para las arquitecturas de 64 bits.

Compartir:

3 comentarios

  1. Hola,

    ¿Por favor podrías ayudarme a instalar el Phrap en una AMD64?, por más que he intentado no he podido forzar la compilación a 32 bits… como mencionas, podrías ser más explicito como lograste hacerlo funcionar, yo solo sigo obteniendo el segmentation fault al final.

    Saludos,

  2. Para poder compilarlo y usarlo en 32 bits en AMD64 tienes que tener instalados los paquetes de ejecución y de desarrollo de 32 bits. En el caso de Ubuntu creo que es ia32-libs-dev, mientras que en Gentoo creo que es emul-linux-x86-baselibs. Además, tienes que editar el fichero makefile, de la siguiente manera:

    * Añade a CFLAGS el flag -m32, de forma que la línea queda como:

    CFLAGS= -O2 -m32

    * En el target de compilación manyreads tienes que cambiar la línea

    make CFLAGS="-O2 -DMANYREADS" phrap cross_match;

    por

    make CFLAGS="$(CFLAGS) -DMANYREADS" phrap cross_match;

    y la línea

    make CFLAGS="-O2 -DLONGREADS" phrap;

    por

    make CFLAGS="$(CFLAGS) -DLONGREADS" phrap;

    Y por último, para asegurarte que la compilación se hace de cero, borra todos los ficheros objeto (rm -f *.o).

    El ejecutable generado será de 32 bits, con lo que la memoria máxima que podrá usar es de 2GB (aproximadamente).

  3. ¡Muchas gracias Jose María!,

    Mi problema eran los flags y que no tenía todas las librerías en Ubuntu… si se quiere instalar en ubuntu hacen falta instalar ia32-libs, lib32gcc1, lib32stdc++6, gcc-multilib y ya funciona de maravilla, felicidades por el Blog, te vincularé desde el mio (http://ldalcaraz.blogspot.com).

    Saludos desde México,

    Luis D.

    pd. Intente postear esto en el blog pero marco un error, intento de nuevo más tarde.

Responder a José María FernánCancelar respuesta