Occa: suporte para cmake

Criado em 8 out. 2018  ·  11Comentários  ·  Fonte: libocca/occa

Olá OCCA-ers,

Algum plano para ter cmake para gerar o sistema de compilação?
Todos os nossos softwares de computação científica o utilizam. Isso requer um bom esforço, mas compensa uma vez feito.

melhor,

Amik

question help wanted

Todos 11 comentários

Meus 2 centavos...

Muitos pacotes de software que emprego (por exemplo, VTK) são configurados e construídos usando cmake, mas eu não gosto disso. Não tanto para a linguagem cmake e o código que se tem que escrever, mas sim para os "componentes" de makefile muito obscuros que ele gera em uma estrutura de diretório profunda e ofuscada. Portanto, descobrir por que o cmake está falhando, ou por que algo não está compilando corretamente, ou como ajustar uma compilação, pode ser um esforço não trivial (pelo menos para mim).

Gerar um makefile para o ambiente de compilação atual de acordo com as especificações de configuração geralmente é uma coisa boa, mas seja qual for o gerador, o IMHO deve gerar apenas um makefile simples, simples e direto que seja legível e potencialmente ajustável (como o venerável 'configure ' faz). Isso com certeza não é cmake!

Oi Paul,

Eu não estou apaixonado por ele, mas uma vez instalado em um projeto, é bastante sólido. A principal vantagem disso é a integração e o teste. Por exemplo - suponha - eu começaria a integrar o OCCA em um código bastante grande, colocaria a fonte em um diretório chamado 3rdparty e, se estivesse usando cmake, apenas informaria ao cmake do novo diretório add_directory(...) . Em seguida, ele compilaria o OCCA automaticamente, usando os compiladores e outras especificações do CMakeLists.txt "principal". Se eu adicionasse dependências ao OCCA em um driver de teste (inicialmente) e a mais diretórios de origem/outros depois, seria muito fácil.

Minha experiência com cmake é que, se você tiver problemas no nível "make", geralmente o problema é que você se especializou demais (por exemplo, forçar sinalizadores de compilador explícitos...) cmake no nível superior. Para a maioria dos problemas, make VERBOSE=1 revelará a linha de compilação completa (que você pode recortar e colar) para descobrir o que está errado (e depois alterar o cmake (não o make)).

Nós também usamos ctest o tempo todo ...

De qualquer forma, só queria testar as águas em relação a isso.

melhor,

Amik

Sou fã dele ( talvez até demais ), aliás, o suporte ao CMake foi a primeira coisa que procurei. Eu gerencio todas as dependências (por exemplo em GooFit ) como git submodules em extern e, em seguida, o CMake verificará essas dependências para o usuário se ele não souber sobre submódulos, então o CMake combina todas as dependências. O melhor do CMake é que ele suporta qualquer forma de trabalho - se eu quiser usar um IDE, por exemplo, como o Xcode, é fácil apenas se o CMake for usado. Eu posso adicionar CCache, compilações de depuração, clang-tidy, etc. com bastante facilidade.

@henryiii Se tiver integração com IDE, parece uma boa ideia!

Estou hesitante em remover a compilação do Makefile, pois make pode ser encontrado pronto para uso na maioria dos lugares, mas podemos adicionar suporte ao CMake junto com ele. Podemos atualizar a configuração do CI para executar testes com compilações make e cmake .

Se você tiver tempo, você pode fazer um PR para ele com os arquivos principais do CMake? Se ajudar, posso adicionar todas as variáveis ​​de ambiente/efeitos colaterais esperados durante o tempo de compilação

No momento, usuários novos / potenciais do OCCA (programadores de HPC) só precisam baixar a fonte do OCCA e digitar make . Muito simples. Para mim, a proposta de valor da OCCA é baseada 100% nos recursos excelentes que ela oferece no domínio da programação paralela, não em seu sistema de compilação. No entanto, talvez houvesse um pequeno valor agregado para o OCCA passar para compilações baseadas em cmake, não sei.

Talvez alguém com conhecimento em codificação cmake possa escrever os arquivos cmake necessários e contribuir com eles para o OCCA por meio de uma solicitação pull? Isso pode ajudar a satisfazer as preocupações que algumas pessoas parecem ter e ajudá-las a realmente usar o OCCA.

Voltando ao assunto do cmake, para alguns de nós, "a milhagem pode variar". Sério, tenho certeza de que meu entusiasmo pelo cmake aumentaria muito se eu realmente aprendesse a escrever / depurar / modificar o código da linguagem cmake em um nível além do meu estágio atual de pré-novato. Enquanto isso, quando encontro problemas frustrantes com arquivos Find*.cmake CMakeLists.txt mal escritos/desatualizados e/ou com erros ou mal escritos de alguém funcionando corretamente para algum pacote que acabei de baixar de github para avaliação, posso ter sensações desagradáveis ​​de apreciação negativa!

@pdhahn Só para ficar claro, acho que nunca me livraria da compilação "único tipo make para compilar". Definitivamente precisa de limpeza (#149), mas simplificar a instalação e o uso para os usuários é a prioridade número um aqui

Adicionar o CMake ajudaria a usar o OCCA em projetos que já usam o CMake e parece facilitar a vida do desenvolvedor com essa integração de IDE.

@ dmed256 Você está certo, a coisa do IDE parece que poderia ser um valor agregado não trivial para o OCCA!

Mas você precisa acomodar uma variedade de IDEs populares no mínimo, como eclipse e Qt Creator.

O CMake suporta todos os tipos de ferramentas (e todos os tipos de ferramentas suportam), não apenas IDEs. Todos os principais IDEs são suportados pelo CMake ou o CMake os suporta. CLion, Qt Creator, Eclipse, Xcode e muito mais. Ele também suporta link-what-you-use, include-what-you-use, clang-tidy, ccache, várias integrações de teste, empacotamento e muito mais.

Se a compilação do CMake funcionou bem, você pode eventualmente fazer com que o Makefile simplesmente chame o CMake para você, já fiz isso antes no GooFit. Você pode até fazer o download do makefile para CMake e depois chamá-lo (não tentei isso antes, mas acho que já conversei com alguém que tentou); isso permitiria que ele funcionasse em qualquer lugar e com a versão mais recente (você só precisaria ter uma alternância simples que baixasse o binário linux ou macos, dependendo de onde você estivesse executando).

Espero avaliar o occa nas próximas semanas e, em seguida , poderei ajudar com o suporte do CMake.

@henryiii Isso faz sentido, temos pouco tempo :) Independentemente disso, aprecie o conselho do CMake!

Agradecimentos finais a todo o trabalho de @hknibbe2 , @SFrijters , @amikstcyr e @JamesEggleton 🎉

Esta página foi útil?
0 / 5 - 0 avaliações