C code für java-VM compilen?



  • Hallo Coders, ich hab ein kleines C-Prg im Quelltext, das ich gern in ein größeres Java-Proggy integrieren will.

    Ich dachte mir ich mache das mit Clang/LLVM, also über den zwischencode, den LLVM ausspuckt. C nach IR (LLVM-zwischencode) geht schonmal. visual studio hat ein plugin dafür. bloß wie transformiere ich das IR into .class-files für die java-VM? mit welchem tool geht das?

    danke im voraus für jeden tip,



  • Das geht so ohne Weiteres gar nicht. LLVM und die Java VM sind viel zu unterschiedlich.

    Du hast zwei Optionen:

    • Schreib das Zeug neu in Java
    • Verwende JNI um den fertig übersetzen C Teil aus Java aufzurufen


  • @hustbaer sagte in C code für java-VM compilen?:

    Das geht so ohne Weiteres gar nicht. LLVM und die Java VM sind viel zu unterschiedlich.

    Du hast zwei Optionen:

    • Schreib das Zeug neu in Java
    • Verwende JNI um den fertig übersetzen C Teil aus Java aufzurufen
    1. ist so gut wie unmöglich. der c-code ist umfangreich und enthält z.b. gotos aus schleifen heraus, wofür java kein äquivalent hat,
    2. wird bereits gemacht, ist aber suboptimal da os-abhängig.

    btw, ich kenne fälle bei denen c-codes mittels LLVM nach javascript transformiert wurden, was noch c-fremder ist als java. deshalb sollte ir nach java schon möglich sein.



  • Dann probiere mal Clank, s.a. Clank: Java-port of C/C++ Frontend.



  • @A-Grau
    Ad 1: Gotos sollten kein Problem sein - man muss den Code in Java halt anders schreiben. Das heisst nur dass du den Code nicht 1:1 Zeile für Zeile "transformieren" kannst sondern etwas anders schreiben musst. "Umfangreich" kann natürlich ein Problem sein.

    btw, ich kenne fälle bei denen c-codes mittels LLVM nach javascript transformiert wurden, was noch c-fremder ist als java. deshalb sollte ir nach java schon möglich sein.

    Emscripten und ähnliche Systeme funktionieren so dass sie in JavaScript eine VM implementieren in der dann native Code interpretiert wird. Im Prinzip wie wenn du auf einem PC einen C64/Amiga/... Emulator laufen lässt. Das kann man natürlich theoretisch auch mit Java machen. Praktisch weiss ich nicht ob es so ein System gibt. Und wenn ja bleibt dann noch die Frage ob es schnell genug ist. Ohne sehr aufwendige Optimierungen ist sowas nämlich extrem langsam.



  • @Th69 Weiss nicht ob ihm ein Frontend was bringt. Er bräuchte doch eher ein Backend das Java-Code aus LLVM Intermediate-Code erzeugt.



  • Wenn du beim Java Anteil nicht auf die Hotspot JVM angewiesen bist, könntest du dir GraalVM anschauen. Das unterstützt direkt die Ausführung von Java und LLVM Bytecode.



  • danke für die vorschläge. aber ich habs inzwischen damit gelöst: https://hub.docker.com/r/bcg1/nestedvm

    Der C-Code wird für einen modifizierten MIPS-Prozessor compiliert und dann in ein .class oder wahlweise in Java-Quelltext verwandelt.


Log in to reply