Gostaria de criar uma variante muito mínima do tronco do Emacs para testar a unidade do meu pacote Emacs Lisp. A compilação não precisa de GUI, suporte de imagem etc. Deve ser essencialmente apenas um intérprete mínimo do Emacs Lisp com as principais bibliotecas do Emacs Lisp e deve ser rápido , idealmente em menos de cinco minutos.
Atualmente, estou passando --with-x-toolkit=no --without-x --without-all
para ./configure
. Após a conclusão, ele me diz que todos os recursos do Emacs estão desativados, mas infelizmente a compilação ainda leva quase dez minutos .
Entendo que pode ser impossível obter o Emacs compilado mais rapidamente, mas o que me faz pensar é que, com as mesmas bandeiras, o Emacs 24.5 constrói em apenas dois minutos .
Qual é o motivo dessa diferença grosseira e posso obter o tronco do Emacs para construir tão rápido quanto o Emacs 24.5?
E, em uma pergunta relacionada, como faço para que o Emacs construa silenciosamente? Atualmente, quase 80% da minha produção de teste unitário é do edifício Emacs. Idealmente, eu gostaria de ter make install
impressão nenhuma saída.
fonte
./configure --with... && make -j (number of cores * 1.5)
termina em 30 segundos. Se você estiver executando em uma máquina local, use o argumento -j para fazer. Existe uma boa razão para você fazermake install
? Isso adicionará um pouco de tempo que você poderia evitar se você apenas executasse o emacs a partir do diretório src../autogen.sh
para gerarconfigure
, mas isso é uma questão de segundos, não minutos.make install
executar silenciosamente. Portanto, divida-as em três perguntas para que elas possam ser rastreadas separadamente e edite-as de acordo com uma pergunta.Respostas:
A razão pela qual a 24.5 constrói tão rapidamente para você é que os
.elc
arquivos são realmente distribuídos no tarball, consulte make-dist . Ao criar a partir do git, a maior parte do tempo é gasta compilando os.el
arquivos.elc
. Ao otimizar o código C, a compilação Lisp pode ser mais rápida, mas ainda leva muito tempo. Compare os tempos de compilação usando as configurações originais (~ 14 vs ~ 1 minutos) com uma compilação usandoCFLAGS='-O2 -march=native'
(~ 9 vs ~ 1,5 minutos).Além disso, a clonagem do git leva cerca de um minuto, enquanto o download e a descompactação do tarball levam cerca de 5 segundos. Compare o tempo de compilação entre as versões ao baixar o arquivo git do github (~ 5, ~ 6, ~ 8 minutos para v24.5, master e emacs-25, respectivamente. Como você pode ver, quando não estiver usando um tarball de distribuição, todos os os tempos de construção são pelo menos a mesma ordem de magnitude (não sei por que o emacs-25 era mais lento que o mestre, poderia haver variação aleatória ou algum código obsoleto foi removido no mestre?).
Você sempre pode redirecionar a saída para
/dev/null
. Nas minhas experiências, canalizei amake install
saída paragrep -E '^(make|[A-Z])'
reduzir a saída (o javascript do Travis CI que formata o log na Web estava tendo problemas com a saída completa).Não (ou sim, no sentido em que você pode obter o Emacs 24.5 para construir (quase) tão lento quanto o tronco do Emacs: p). Mas o que você pode fazer é salvar a compilação do Emacs e fazer o download desse resultado em cache para teste de unidade. Eu implementei isso no ramo de upload do meu fork do emacs-travis, aqui está um exemplo de uso pelo yasnippet : O tempo de instalação do Emacs é de ~ 2,5 segundos.
fonte
Aqui estão várias sugestões.
Conforme declarado abaixo, a compilação de todos os arquivos lisp é responsável por pelo menos 10% do tempo. Uma maneira de desativar isso é editar o destino loaddefs no arquivo
lisp/Makefile
e alterá-lo para:Consegui reduzir o tempo de compilação C para 1/4 do tempo (de pouco menos de um minuto para 16 segundos) no src apenas alterando os sinalizadores de compilação padrão. O padrão CFLAGS eu fiquei tinha sido:
-g -O3
.Então use em seu lugar
CFLAGS=''
.make install
, apenas execute o emacs construído de dentro do diretório src .Conforme declarado abaixo, outros 10% do tempo estão na criação de documentos. Embora eu não tenha cronometrado, não há dúvida de muito tempo copiando arquivos e compactando arquivos elisp
make install
. Então não. Se você deseja refazer os gráficos de tempo, executeremake --profile
.As observações acima são baseadas abaixo ....
O primeiro passo é entender onde é gasto o tempo para descobrir como reduzi-lo. Felizmente para algo como o Emacs, escrevi recentemente (ou melhor, estendi) uma ferramenta para ajudá-lo a descobrir. Eu adicionei uma
--profile
opção para refazer (um fork do GNU make) que lhe dirá quanto tempo é gasto em alvos específicos.Eu tentei criar um instantâneo recente e sim, leva cerca de 10 minutos. Se você não tiver o remake instalado, eu tenho um resumo das informações de perfil que você pode usar na minha execução. Eu uso o kcachegrind para exibir as informações, mas pode haver outras ferramentas disponíveis para as ferramentas de visualização. Existe um png na essência, que é uma captura de tela da execução.
Agora para os detalhes ...
Na minha execução, cerca de 20% do tempo é gasto na construção de arquivos lisp e info que você realmente não precisa fazer. Na verdade, um pouco mais é gasto nos arquivos lisp do que nos arquivos info. Você provavelmente poderia alterar o Makefile para pular isso.
Pode ser interessante comparar com o emacs 24. Meu palpite é que o tamanho de ambos cresceu proporcionalmente.
Se houver interesse (que você pode mostrar por upvotes), sugerirei hacks específicos para o Makefile. No entanto, isso por si só deve ser suficiente para alguém motivado a trabalhar.
fonte
make lisp
estar levando em torno de 60% para o Emacs 25: travis-ci.org/npostavs/emacs-travis/builds/91107858 . E uma grande partemake src
também está compilando lisp, então eu me pergunto como reconciliar essas medidas. No Emacs 24, parece que ele apenas compilacc-*.el
arquivos durantemake lisp
, é um bug?CFLAGS=''
que torna a compilação C mais rápida e a compactação de cifras mais lenta. Como se vê, o usoCFLAGS='-O2 -march=native'
é mais rápido no Emacs 25, embora mais lento no Emacs 24.5: travis-ci.org/npostavs/emacs-travis/builds/91142923