2012-09-10 19 views
17

Quiero usar el Framework de generación de código LLVM de Java.Generando código LLVM desde Java

Es decir, hago no quiero compilar el código de Java en LLVM. Simplemente quiero una biblioteca LLVM para generación de código a la que pueda llamar desde Java. La biblioteca habitual de LLVM es C, así que no puedo usarla.

¿Hay algún puerto de Java? Si no, ¿cuál sería la forma más fácil de hacerlo de todos modos? Ajustar la API en JNI?

+0

Un puerto como en una reimplementación de toda la base de código de LLVM (o al menos un gran subconjunto de él) sería una tremenda pérdida de esfuerzo.Simplemente llame a la API C como todos los demás. – delnan

+0

Pero el programa en el que estoy trabajando es Java y no es mi permiso cambiar eso. Nunca escribí sobre volver a implementar todo. Esta no es mi intención, pedí formas más fáciles aquí. – gexicide

+0

Eso no es lo que quise decir. La gente llama a LLVM de O'Caml y Python, por ejemplo. ¿Qué tan difícil puede ser llamar código C desde Java? – delnan

Respuesta

15

Una búsqueda rápida de llvm java api bindings resultó varios proyectos que parecen como un buen ajuste:

Todas esas bibliotecas utilizan JNI para acceder a la C-API, por lo que tiene un archivo DLL o SO de la LLVM yo en cualquier caso.

5

La forma más fácil de acceder a las bibliotecas C desde Java es JNA. Usted crea una interfaz Java que es isomorfa con las partes de la API C que desea utilizar, y luego JNA hace el resto. Esto significa que solo tiene que actualizar los métodos directamente pertinentes cuando la API cambie.

https://github.com/twall/jna/blob/master/README.md

TRAGO es más difícil de usar, pero JNA puede ser un callejón sin salida si ves que necesitas para mejorar el rendimiento. JLLVM es una herramienta basada en SWIG, por lo que puede considerar hacer referencia a ella o bifurcarla para sus propios fines.

No utilice JNI básico: elija entre SWIG o JNA.

Confiar ciegamente en contenedores de terceros con un historial mínimo es una propuesta arriesgada, pero si deliberadamente se trata ese proyecto como punto de partida, no se puede equivocar.

Con ambas tecnologías, de vez en cuando tendrás que buscar las constantes enum. Si no son fáciles de leer desde los archivos de encabezado, querrá escribir un sencillo programa en C que imprima las constantes que le interesen, para que pueda copiarlas manualmente en sus interfaces Java.

7

Para responder a la pregunta con información más actualizada basada en el LLVM v3.6 actual. Las opciones son:

  • RoboVM LLVM Java fijaciones parte del proyecto de apoyo a la RoboVM LLVM actual v3.6 (licencia GPL).
  • LLVM-J que se movió a Github y es compatible con LLVM v3.0 (licencia MIT).
  • JLLVM que admite LLVM v3.2 (Licencia LGBL).

Si la licencia de GPL está bien con usted, entonces definitivamente debe optar por RoboVM. Es un proyecto activo con soporte robusto para la última versión de LLVM. JLLVM y LLVM-J ya no están activos, por lo que tendrás que hacer un trabajo extra al usarlos.

+1

Maldición ... incluso RoboVM se ha ido ... – Silverclaw

Cuestiones relacionadas