Como fazer o Makefile do OpenWrt compilar mais rápido?

2

Eu registrei que levou 50 minutos para uma compilação inicial da imagem do firmware OpenWrt, assumindo que todos os pacotes necessários foram instalados via sudo apt-get install . Minha Dir de Raiz do BuildRoot é openwrt .

Posteriormente, descobri que, se eu renomear o diretório acima da pasta openwrt , com uma pequena alteração em um arquivo, digamos que wifi.lua o próximo make (na pasta openwrt ) leva 21 minutos para compilar com sucesso.

No entanto, se eu não renomear o diretório acima da pasta openwrt , com uma pequena alteração similar no mesmo arquivo, o próximo faz V = 99 levar apenas 3 minutos para compilar com sucesso .

Quando eu renomeio o diretório acima e faço o mesmo acima, o make leva 21 minutos para compilar com sucesso. Com o make V = 99 , posso ver que houve muito mais etapas de compilação em comparação com o caso em que não renomei o diretório principal.

Eu posso ver que a compilação Makefile é muito mais rápida se eu não renomear o diretório principal.

Isso me leva à questão relacionada: No Linux, a renomeação ou movimentação de um diretório altera os horários dos arquivos em subdiretórios?

Eu sei que o Makefile não constrói um alvo novamente se a hora da modificação do alvo for mais recente que todas as suas dependências.

Eu também estava lendo sobre alguns problemas com o GNU Makefile: link

O Makefile OpenWrt, supostamente muito mais avançado que o Makefile original do Linux, resolve alguns ou todos esses problemas?

(Para fazer o Makefile compilar mais rápido, eu também tenho o openwrt/dl como um link simbólico para uma pasta no meu diretório home, para que os pacotes do pacote user-space não precisem ser baixados novamente.)

    
por tech 02.09.2013 / 10:17

2 respostas

1

Não, isso não altera os registros de data e hora de arquivos e diretórios contidos, apenas no próprio diretório. No entanto, se o Makefile contiver destinos ou dependências que usem caminhos absolutos ou mesmo apenas $(src_dir) , eles serão refazidos, b / c é um destino diferente / novo. Veja o GNU fazer documentação para convenções e conselhos sobre metas e variáveis "padrão".

No entanto, Makefiles não compilam e não existe o Makefile original do Linux. Criar / manter um ambiente como o BuildRoot é muito complexo e os mantenedores provavelmente se concentram em fazê-lo para construir corretamente antes de eficientemente. Se um simples patch, como adicionar um symlink, ajuda a acelerar o processo, talvez você deva enviá-lo como uma sugestão para melhoria no upstream.

    
por 02.09.2013 / 11:07
0

Você pode executar o make com a opção jobs, do man make:

-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously. If there is more than one -j option, the last one is effective. If the -j option is given without an argument, make will not limit the number of jobs that can run simultaneously.

    
por 02.09.2013 / 17:47