Acabei pesquisando muito e achei umas repostas aí.
Eu também baixei e compilei o fonte do PyPy só para ver.
Pelo que eu vi a instalação normal é compilada em C mesmo.
Utilizando um próprio tradutor deles.
Tipo, você baixa o fonte do PyPy em Python. Daí a primeira coisa
que faz é chamar o translate do PyPy pelo próprio CPython
$ python ./pypy/pypy/translator/goal/translate.py --opt=jit targetpypystandalone.py
Neste arquivo targetpypystandalone.py (acho, ou então foi no modulo goal) eu encontrei umas referências para o Make.
Então o tradutor provavelmente traduz o pypy para C e então compila.
Foda é que esse processo demora uns 45 minutos. No meu notebook antiguinho demorou 1h37min ;p
(é um notebook fudido).
Depois vai ter o PyPy e com ele pode chamar o prompt interativo.
O projeto mantem alguns Geradores. O GenC, GenCLI e o GenJVM, mas o mais ativo é o GenC.
Quando o PyPy roda, ele tenta transformar o código python em RPython e depois gera algumas
estruturas para o tradutor transformar o código para o de máquina (isso se a opção JIT foi utilizada)
o tradutor nunca vê o código em python. Botei que ele tenta porque pra conseguir transformar ele
tem algumas restrições, como não poder usar geradores, entre outras.
Com essa estrutura é possível então gerar o código em C, para a JVM ou para a CLI (Common Language
Interface), daí é possível gerar para qualquer plataforma.
Bom isso foi o que eu entendi de uns 50 minutos de leitura pela internet.
Depois tento ter certeza pra depois não falar besteira.
Provavelmente já falei, mas depois me corrijo.
Não é crime errar agora ;p
Até mais
--
Antonio Ribeiro