Muchos habréis podido comprobar la existencia de varios cientos de commits haciendo referencia a la “palabra” CMake e incluso conocéis la existencia de un branch llamado “cmake-bringup”.
El objetivo de ese branch no es otro que abandonar nuestro actual jefe Rbuild y adoptar CMake como nuevo jefe durante la compilación.
Si quieres saber que es “Rbuild”, “Cmake”,o las ventajas de uno frente al otro…solo tienes que seguir leyendo… ;)
¿Qué es CMAKE?
CMake se utiliza para controlar el proceso de compilación de ReactOS usando ficheros de configuración sencillos e independientes de la plataforma. Al ser independientes de la plataforma se elimina la necesidad de tener varios conjuntos de ficheros para cada plataforma y el mantenimiento es por lo tanto mucho más sencillo.
Pero no solo eso, Cmake genera makefiles nativos y espacios de trabajo que pueden usarse en el entorno de desarrollo deseado. Existen generadores makefile para Unix, Borland make, Watcom make, MinGW, MSYS y Microsoft NMake. Además es posible generar ficheros de proyecto para Code::Blocks, Eclipse CDT, Microsoft Visual Studio de la 6 a la 10 incluyendo versiones de 64 bits y KDevelop.
STOP, que me embalo…
Tenemos que ver a Cmake como un jefe de producción. Cmake se encarga de ir dirigiendo la creación de las piezas que terminarán ensamblandose al final.¿Y quien las crea?¿quien las compila?Alguno de los compiladores antes mencionados.Normalmente solo se elige un compilador para hacer este trabajo, por ejemplo en ReactOS usamos MinGW. Compilar con varios al mismo tiempo es innecesario y además un caos.Solo tiene sentido usar varios compiladores si usamos distintos tipos de lenguajes en el código fuente, pero no es el caso de ReactOS pues todo está escrito en C/C++.
La relación entre el anterior jefe (Rbuild) y el trabajador (Mingw, Msys,MSVC..) era de odio-odio. Si queríamos que rbuild trabajara con Mingw teníamos que crear unos ficheros específicos, si queríamos que trabajara con MSVC teníamos que crear otros distintos, y así sucesivamente. A esto es lo que se le llama ser “dependiente de plataforma”.Hablamos de más de 1000 ficheros específicos.Una pasada.
Pero Cmake es mucho más flexible,y si creamos unos ficheros con sintaxis Cmake pueden funcionar con cualquier compilador del mercado(bueno, realmente con los que se han mencionado antes).
Rbuild—> CMake
Flexibilidad para el usuario a la hora de compilar, y para nosotros un buen testeo de comportamiento frente a diversos compiladores.
Este trabajo titánico se ha realizado en un branch aparte ya que mezclar ambas sintaxis no es nada recomendable.
La buena noticia: El trabajo titánico ha (casi) finalizado. Ya somos capaces de compilar revisiones con Cmake como jefe.
Los nuevos Builders
En las últimas semanas hemos añadido nuevos “Buildbots” ( robots de construcción) que nos permiten construir la misma revisión de ReactOS con distintas herramientas. Esto se debe precisamente a la flexibilidad de CMake.
Antes teníamos los siguientes “Buildbots”:
- Trunk_x86_GCCLin Debug :Crea las versiones Debug de ReactOS usando como jefe “rbuild” y usando “Gcc” en Linux
- Trunk_x86_GCCLin Release:Crea las versiones Release de ReactOS usando como jefe “rbuild” y usando“Gcc” en Linux
- Trunk_AMD64_GCCWin Debug:versiones Debug de la versión 64 bits con jefe “rbuild” y usando”Gcc” en Windows.
- Trunk_ARM_GCCWin Debug: versiones Debug de la arquitectura ARM con “rbuild” y usando “Gcc” en Windows.
NOTA1: Los dos últimos nunca han producido una ISO completa pues el port x64 y ARM aún no han finalizado.
NOTA2: Gcc es el compilador integrado en el entorno de compilación MinGW.
A éstos se le añaden ahora dos más:
Actualmente el primero de ellos ya está produciendo ISOs mientras que el segundo aún tiene fallos al compilar. Esto es debido a las exigencias de los compiladores. MSVC es muy exigente y se “queja absolutamente por todo”.
Como muestra un botón:
Los nuevos testeos
Antes en reactos.org/testman solo aparecían los tests realizados a las ISOS creadas por Trunk_x86_GCCLin Debug , pero ahora también aparecen los tests de las nuevas ISOs compiladas por CMake_x86_GCCWin Debug .
Esto explica porqué en Testman aparecen dos testeos de la misma revisión, uno es el testeo de la revisión creada por Trunk_x86_GCCLin Debug y el otro corresponde al testeo de esa misma revisión pero que ha sido compilada por CMake_x86_GCCWin Debug.
El objetivo es comparar si existe alguna diferencia entre ambas ISOs al utilizar distintos jefes para conseguir la ISO final. Si la compilación es correcta, entonces ambas ISOs deberían mostrar el mismo comportamiento durante el testeo.
En un futuro también compararemos las ISOS de CMake_x86_MSVCWin Debug con las ISOS de los dos buildbots antes mencionados. Y como Cmake no pone límites podemos crear buildbots con otras herramientas de compilación y crear así decenas de “buildbots” con sus correspondientes Tests.
¿No es una gozada? Bye.bye Rbuild. :)
entonces van a desaparecer los archivos rbuild?, no me queda muy claro, saludos.
ResponderEliminar@Manuel
ResponderEliminarSi quieres compilar usando las herramientas CMAKE no necesitas los rbuild para nada(son ignorados), mientras que si quieres compilar usando los RBUILD los ficheros cmake son ignorados.
En principio no tiene sentido mantener los ficheros "rbuild" si vamos a cambiar a CMAKE, pero es posible que los dejemos por si necesitamos hacer alguna comprobación o testeo comparativo de compilación.
buenisimo aun que no entiendo nada
ResponderEliminar