Page 1 of 4

Nouveaux travaux sur un compilateur C pour (e)Z80 via LLVM…

Unread postPosted: 03 Mar 2016, 10:27
by Lionel Debroux
Sur les Z80, la façon habituelle de programmer en code natif est de programmer directement en assembleur ("langage d'assemblage", pour les extrémistes français). En effet, le processeur Z80 est ancien et n'est pas très bien adapté à la programmation en langage de plus haut niveau - même le C. Sur l'eZ80, version modernisée du Z80, que TI a récemment montée dans les 83PCE et 84+CE après plus de 20 ans de vieux Z80, quelques nouvelles instructions facilitent l'exécution du code compilé depuis le C, par exemple Load Effective Address, proposé par les 68k depuis la fin des années 1970, le 8086 et ses descendants, etc.

Il existe depuis longtemps des compilateurs C ciblant le Z80 et/ou l'eZ80, citons:
  • Small Device C Compiler (SDCC), sur lequel un environnement nommé "tisdcc" avait été créé;
  • le compilateur C officiel de Zilog.
Mais ces compilateurs-là ne gèrent que des dialectes lourdement obsolètes du C, donnent souvent du code peu optimisé, fonctionnent mal (les erreurs du compilateur Zilog sur du code valide ne sont hélas pas si rares que ça). Les compilateurs C/C++ ouverts modernes que sont GCC et Clang ne ciblent pas le Z80 et l'eZ80, ce qui interdit quantité de facilités de programmation.

Par le passé, il y a eu, dans la communauté TI et ailleurs, des tentatives de créer des backends Z80 pour LLVM et GCC (par AHelper, notamment), ce qui est la partie importante pour cibler un Z80 avec Clang ou GCC. Pour être compatible avec les extensions du compilateur Zilog, des extensions à Clang et GCC seraient nécessaires, mais sont moins importantes. LLVM/Clang est techniquement beaucoup plus moderne que GCC, et la création de backends LLVM est en principe plus facile, même si le nombre brut de lignes de code est plus élevé - les lignes individuelles sont plus faciles à produire.

Avec l'arrivée des TI-eZ80, l'intérêt de créer un backend (e)Z80 pour LLVM a beaucoup augmenté dans la communauté. La toolchain de Mateo, basée sur le compilateur Zilog, popularisée par la capacité "programmes C TI-eZ80" de notre IDE en ligne Project Builder (capacité copiée des semaines plus tard par l'autre IDE en ligne...), et CEmu, donnent aux gens le goût de programmer en C pour les TI-eZ80. Cependant, les limitations du compliateur de Zilog sont pénibles.

Il y a quelques semaines, jacobly, un contributeur majeur de CEmu, s'est mis à refaire un backend Z80 + eZ80 à LLVM, from scratch. Maintenant que ça commence à générer du code dans des cas simples, il a publié ses travaux, pour que les autres puissent contribuer et améliorer, dans l'esprit de partage de notre communauté :)

Pour l'instant, il reste pas mal de travail, mais c'est une étape importante, et il nous incombe collectivement d'y contribuer, pour ceux qui en ont les compétences et le temps, et d'en tirer parti quand elle fonctionnera bien ;)


Repository du projet: https://github.com/jacobly0/llvm-z80
Source de l'info: IRC (sur EFNet, channel #ez80-dev)

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 06 Mar 2016, 19:32
by Adriweb
L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

tl;dr: Eventually, on pourra compiler, pour nos CE, du C récent (pas le vieux ANSI C de Zilog), voire du C++, et en théorie d'autres langages proposés en front-end de LLVM :)

Bon, il y a encore du boulot, bien sûr, d'autant plus que l'aspect 16/24bit du CPU donne du fil à retordre, mais... ça avance...

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 06 Mar 2016, 19:59
by critor
Adriweb wrote:L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

Au contraire, mais effectivement j'ai omis de prendre le temps de répondre (pour faire d'autres choses), c'est pas bien.

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 16 Mar 2016, 16:34
by Ti64CLi++
Adriweb wrote:L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

Je saisis l'importance de ce sujet, mais ne voyais pas l'utilité de ma réponse. ;)
En tout cas, bravo à Jacobly.

Concernant son émulateur de z80 pour Nspire, l'as-t-il modifié?

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 16 Mar 2016, 18:51
by Adriweb
neuronix wrote:Concernant son émulateur de z80 pour Nspire, l'as-t-il modifié?

Pour autant que je sache, pas récemment.

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 01 Apr 2017, 14:14
by Adriweb
Et environ un an après, après de très nombreuses heures de travail par Jacobly, llvm-ez80 a fort bien avancé ;)

Oiram, par exemple, a pu être compilé avec succès.
Image

C'est cela dit pas terminé, il y a encore des bugs, des choses non supportées, etc.

Une version expérimentale devrait être intégrée au Project Builder, aux côtés de ZDS, prochainement...
Edit: c'est fait !




Pour tester... (une fois les dépendances de build installées)
Code: Select all
git clone https://github.com/jacobly0/llvm-z80.git llvm && svn co http://llvm.org/svn/llvm-project/llvm/trunk -r 318998 --force llvm && svn co http://llvm.org/svn/llvm-project/cfe/trunk -r 318998 --force llvm/tools/clang

puis
Code: Select all
mkdir -p llvm/build/Debug && cd llvm/build/Debug && cmake ../.. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_PEDANTIC=Off -DLLVM_ENABLE_WARNINGS=Off -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=Z80 -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=1 -DBUILD_SHARED_LIBS=ON && cmake --build .

Et enfin par exemple
Code: Select all
./bin/clang -target ez80 -xc - -S -o- <<<'void test(void){}'

Ce qui donnera le code ASM ez80.

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 01 Apr 2017, 15:43
by Lionel Debroux
Parvenir à compiler des programmes non triviaux comme Oiram d'une part, et ensuite faire en sorte que ce qui est compilé ne fasse pas totalement n'importe quoi, sont des étapes très importantes :)
Bravo jacobly.

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 18 Apr 2018, 06:03
by Egocar
Je suis content du succès.

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 15 Jul 2018, 13:02
by parisse
Adriweb wrote:puis
Code: Select all
mkdir -p llvm/build/Debug && cd llvm/build/Debug && cmake ../.. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_PEDANTIC=Off -DLLVM_ENABLE_WARNINGS=Off -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=Z80 -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=1 -DBUILD_SHARED_LIBS=ON && cmake --build .


Cette commande echoue chez moi, avec l'erreur suivante:
Code: Select all
CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

Il doit surement manquer quelque chose d'evident...

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postPosted: 15 Jul 2018, 13:11
by IAMISSAM
Il te manque "ninja", pour l'installer : https://github.com/ninja-build/ninja/wi ... a-packages