yaourt paquetes instalar existe aur arch haskell raspberry-pi cross-compiling ghc cabal-install

paquetes - ¿Cómo instalo las dependencias al compilar código Haskell?



yaourt (1)

Para comprender este error, debe saber cómo funciona la cabal install internamente. En esencia, realizará los siguientes pasos:

  1. Descargue y descomprima el código fuente
  2. Compile Setup.hs (este archivo se usa para la personalización del sistema de compilación, por ejemplo, puede implementar algunos enganches para ejecutar código haskell adicional en la fase de configure ).
  3. Ejecute la setup configure <configure flags> && setup build && setup install

El problema ahora es que la cabal install usa el GHC dado por --with-ghc también para el paso 2, ¡pero el ejecutable producido por ese paso debe ejecutarse en el sistema host!

Una solución es hacer los pasos manualmente, lo que significa que tiene control total. Primero, obtenga la fuente:

$ cabal get random Downloading random-1.0.1.3... Unpacking to random-1.0.1.3/ $ cd random-1.0.1.3

A continuación, compile Setup.hs , utilizando el host ghc:

$ ghc ./Setup.hs -o setup

Y finalmente, configure, construya e instale. Como lo sugiere @Yuras en un comentario, también agregamos la opción -x para ejecutar hsc2hs :

$ ./setup configure ----with-ghc=arm-unknown-linux-gnueabi-ghc --with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg --with-ld=arm-unknown-linux-gnueabi-ld --hsc2hs-options=-x $ ./setup build && ./setup install

Ya hay un problema cabal sobre esto: https://github.com/haskell/cabal/issues/2085

He creado con éxito un compilador ghc cross, que me permite compilar el código haskell para armv6h (raspberry pi en mi caso) de mi máquina x64 linux. He ejecutado con éxito un programa hello world en la frambuesa.

No, quiero construir mi aplicación real, que tiene muchas dependencias con otros módulos de Haskell. Cuando compilo para x64 simplemente lo hago

cabal install dependenciy1 depenency2 ...

Sé que podría convertir mi propio programa en un proyecto cabal y automatizar este paso. Pero ese no es el punto aquí.

Cuando intento usar el compilador cruzado

arm-unknown-linux-gnueabi-ghc --make myapp.hs

Me dice acerca de los módulos que no pudo encontrar. Por supuesto, ¡no están instalados!

Leí https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling y de acuerdo con eso probé

cabal --with-ghc=arm-unknown-linux-gnueabi-ghc --with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg --with-ld=arm-unknown-linux-gnueabi-ld install random

al azar es la depenency que estoy tratando de instalar aquí. Obtuve el siguiente error:

Resolving dependencies... Configuring random-1.0.1.3... Failed to install random-1.0.1.3 Last 10 lines of the build log ( /home/daniel/.cabal/logs/random-1.0.1.3.log ): /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: cannot execute binary file cabal: Error: some packages failed to install: random-1.0.1.3 failed during the configure step. The exception was: ExitFailure 126

Cuando lo hago

file /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804

yo obtengo

/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.10.2, not stripped

No es de extrañar que no pueda ejecutarlo. Está compilado para el brazo.

¿Me estoy perdiendo de algo? Mi objetivo es incorporar todas las dependencias y luego crear una aplicación enlazada estáticamente que pueda implementar en mi frambuesa.