Architekturübergreifende Luac-Ausgabe

9

Ich arbeite an einer so genannten Cartridge für das geo-location basierte WheriGo ( Ссылка ) Spiel. Die Architektur, die für diese Kassetten verwendet wird, ist 32-Bit und Big-Endian. Aber mein Luac erzeugt Chunks, die 64-Bit und Little-Endian sind.

Obwohl es einen Online-Kompilierungsservice für WheriGo gibt, wäre ich lieber in der Lage, das richtige Binärformat für mich selbst zu produzieren. Vor allem, weil es Dinge gibt, die ich lieber in einem abgemantelten Chunk, der von loadstring() geladen wurde, ein wenig verdunkelt habe, anstatt die vollen Debug-Informationen verfügbar zu haben.

Meine Frage lautet also: Wie schwer wäre es, eine Lua-Werkzeugkette zu generieren, die Byte-Code für eine andere Architektur als die, unter der sie läuft, erzeugt?

    
Wegge 20.09.2013, 21:17
quelle

2 Antworten

1

Wenn die Gleitkommadarstellung beider Maschinen kompatibel ist, sollten dies nur Änderungen an ldump.c und lundump.c sein

Sorgfalt genommen, um Typen sicherzustellen, z. lang sind gleich groß. Ich habe dies für Integer-Lua auf x86, x64

getan     
mksteve 03.09.2015 19:45
quelle
1

Sie könnten immer einen 32-Bit-Big-Endian-Computer als VM ausführen, z. Auréliens vorgefertigte Bilder für Debian / Mips ( Hinweise ). Es wird langsam aber arbeiten und kann leicht automatisiert werden. (Führen Sie ein dist-upgrade durch, um zumindest keuchend zu werden, um sich zu quetschen, dann holen Sie sich das neueste Lua.)

Ich habe VMs oft genug laufen lassen ... es ist langsam, aber ich denke daran als Stapelverarbeitung: Ich beginne einen Job (apt oder compile), schaue dann gelegentlich (oder: am nächsten Tag) nach, ob es ist fertig. Meistens klappt das ziemlich gut; Einige Dinge funktionieren natürlich nicht direkt in der Emulation (z. B. aufgrund von Emulator-Bugs oder -Unterschieden), aber um einen Big-Endian-32-Bit-Lua zu erhalten, könnte dies funktionieren.)

Vorgeschlagener Wert: lua bytecode portability und Mittelendian verdoppelt sich auf ARM (beide auf der Lua-Mailingliste) - da PocketPC-Maschinen meist ARM sind, Sie könnten darauf stoßen. Am besten überprüfen Sie die tatsächlichen Wherigo-Patronen, um zu sehen, welche Einstellungen sie verwenden ...

Das Wesentliche dieser Postings ist: endianness, sizeof(int) , sizeof(size_t) , sizeof(Instruction) , sizeof(lua_Number) und% c_de% müssen identisch sein, damit der Bytecode über Architekturen hinweg kompatibel ist (sagt Luiz Henrique) de Figueiredo), und mittelschwere Schwimmer (sowohl einfache als auch doppelte) existieren in freier Wildbahn (Steve Donovan und Dimiter 'Malkia' Stanev).

Sag, ob du es tust - ich bin interessiert, weil ich selbst ein Geocacher bin (obwohl ich herausfinden muss, wie man Kassetten spielt, keinen Spieler für meine Plattformen).

    
mirabilos 06.12.2013 00:34
quelle

Tags und Links