Occa: cmake apoyo

Creado en 8 oct. 2018  ·  11Comentarios  ·  Fuente: libocca/occa

Hola usuarios de OCCA,

¿Algún plan para tener cmake para generar el sistema de compilación?
Todo nuestro software de computación científica lo utiliza. Esto requiere un buen esfuerzo pero paga una vez hecho.

Mejor,

Amik

question help wanted

Todos 11 comentarios

Mis 2 centavos...

Muchos paquetes de software que empleo (p. ej., VTK) están configurados y construidos usando cmake, pero por mi parte no me gusta. No tanto por el lenguaje cmake y el código que uno tiene que escribir, sino por los "componentes" muy oscuros del archivo make que genera en una estructura de directorios profunda y ofuscada. Por lo tanto, descubrir por qué está fallando cmake, o por qué algo no se compila correctamente, o cómo modificar una compilación, puede ser un esfuerzo no trivial (al menos para mí).

Generar un archivo MAKE para el entorno de compilación actual según las especificaciones de configuración generalmente es algo bueno, pero cualquiera que sea el generador, en mi humilde opinión, ¿debería generar solo un archivo MAKE único, plano y directo que sea legible y potencialmente modificable (como el venerable 'configure ' lo hace). ¡Eso seguro que no es cmake!

Hola Pablo,

No estoy enamorado de él, pero una vez instalado en un proyecto, es bastante sólido. La principal ventaja de esto es la integración y las pruebas. Por ejemplo, supongamos, comenzaría a integrar OCCA en un código bastante grande, colocaría la fuente en un directorio llamado 3rdparty y, si estuviera usando cmake, simplemente le diría a cmake del nuevo directorio add_directory (...) . Luego compilaría OCCA automáticamente, utilizando los compiladores y otras especificaciones del CMakeLists.txt "superior". Si agregara dependencias a OCCA en un controlador de prueba (inicialmente) y luego a más directorios fuente/otros, sería pan comido.

Mi experiencia con cmake es que si tiene problemas en el nivel "make", generalmente el problema es que se ha especializado demasiado (por ejemplo, forzar banderas explícitas del compilador...) cmake en el nivel superior. Para la mayoría de los problemas, make VERBOSE=1 revelará la línea de compilación completa (que puede cortar y pegar) para descubrir qué está mal (y luego cambiar el cmake (no el make)).

También usamos ctest todo el tiempo...

De todos modos, solo quería probar las aguas con respecto a esto.

Mejor,

Amik

Soy fanático de él ( quizás demasiado ), de hecho, el soporte de CMake es lo primero que busqué. Administro todas las dependencias (por ejemplo, en GooFit ) como submódulos de git en el exterior, y luego CMake los verificará para el usuario si no conocen los submódulos, luego CMake combina todas las dependencias. Lo mejor de CMake es que admite cualquier forma de trabajo: si quiero usar un IDE, por ejemplo, como Xcode, es fácil solo si se usa CMake. Puedo agregar CCache, compilaciones de depuración, limpieza automática, etc. con bastante facilidad.

@henryiii Si tiene integración IDE, ¡eso suena como una buena idea!

Dudo en eliminar la compilación de Makefile ya que make se puede encontrar listo para usar en la mayoría de los lugares, pero podemos agregar compatibilidad con CMake junto con él. Podemos actualizar la configuración de CI para ejecutar pruebas con las compilaciones make y cmake .

Si tiene tiempo, ¿puede hacer un PR con los archivos principales de CMake? Si ayuda, puedo agregar todas las variables de entorno/efectos secundarios que se esperan durante el tiempo de compilación

En este momento, los usuarios nuevos/posibles de OCCA (programadores de HPC) solo necesitan descargar la fuente de OCCA y escribir make . Muy simple. Para mí, la propuesta de valor de OCCA se basa 100 % en las características sobresalientes que proporciona en el dominio de la programación paralela, no en su sistema de compilación. Sin embargo, tal vez habría un pequeño valor agregado para que OCCA pasara a compilaciones basadas en cmake, no lo sé.

¿Quizás alguien con conocimientos en la codificación de cmake podría escribir los archivos de cmake necesarios y contribuir con ellos a OCCA a través de una solicitud de extracción? Eso podría ayudar a satisfacer las preocupaciones que algunas personas parecen tener y ayudarlos a pasar a usar OCCA.

Volviendo al tema de cmake, para algunos de nosotros de todos modos, "el kilometraje puede variar". En serio, estoy seguro de que mi entusiasmo por cmake aumentaría enormemente si realmente aprendiera a escribir/depurar/modificar el código de lenguaje de cmake a un nivel más allá de mi etapa actual de pre-novato. Mientras tanto, cuando encuentro problemas frustrantes con los archivos CMakeLists.txt mal escritos/desactualizados de alguien y/o con errores o mal escritos Find*.cmake que funcionan correctamente para algún paquete que acabo de descargar github para evaluación, ¡puedo tener sensaciones desagradables de apreciación negativa!

@pdhahn Para que quede claro, no creo que alguna vez me deshaga de la compilación "solo escriba make para compilar". Definitivamente necesita limpieza (#149), pero hacer que la instalación y el uso sean simples para los usuarios es la prioridad número uno aquí

Agregar CMake ayudaría a usar OCCA en proyectos que ya usan CMake y parece facilitar la vida de los desarrolladores con esta integración de IDE.

@dmed256 ¡Tiene razón, el IDE parece que podría ser un valor agregado no trivial para OCCA!

Pero debe acomodar una variedad de IDE populares como mínimo, como Eclipse y Qt Creator.

CMake admite todo tipo de herramientas (y todo tipo de herramientas lo admiten), no solo IDE. Todos los IDE principales son compatibles con CMake o CMake los admite. CLion, Qt Creator, Eclipe, Xcode y más. También es compatible con link-what-you-use, include-what-you-use, clang-tidy, ccache, varias integraciones de prueba, empaquetado y más.

Si la compilación de CMake funcionó bien, eventualmente puede hacer que Makefile simplemente llame a CMake por usted, lo he hecho antes en GooFit. Incluso puede hacer que el archivo MAKE descargue CMake y luego lo llame (no lo he intentado antes, pero creo que he hablado con alguien que lo ha hecho); esto le permitiría funcionar en cualquier lugar y con la última versión (solo necesitaría tener un interruptor simple que descargue el binario de linux o macos dependiendo de dónde se esté ejecutando).

Espero evaluar occa en las próximas dos semanas, y luego podría ayudar con el soporte de CMake.

@henryiii Eso tiene sentido, solo tenemos un tiempo limitado :) De todos modos, ¡aprecio el consejo de CMake!

Cierre gracias a todo el trabajo de @hknibbe2 , @SFrijters , @amikstcyr y @JamesEggleton 🎉

¿Fue útil esta página
0 / 5 - 0 calificaciones