You are here

Agregador de canales

Hackeo y colaboración para Servo en Windows

Noticias de Mozilla Hispano - Mar, 08/08/2017 - 05:52

Esta es una traducción del artículo original publicado en el blog de Mozilla Hacks.

Al igual que muchos proyectos de código abierto de múltiples plataformas, Servo, el proyecto del motor de navegación de alto rendimiento escrito en Rust, siempre ha sido una pesadilla para construir y ejecutar en Windows. Por suerte, gracias al equipo de Rust y a la comunidad Servo, la mayoría de los problemas se han solucionado y ahora podemos lanzarlo con nada más que PowerShell, además de una pila completa de bibliotecas nativas de Windows y el uso de herramientas.

¿Por qué tardó tanto tiempo en pasar?

Un poco de historia..

En 2013, cuando el desarrollo de Servo comenzó, sólo funcionaba en sistemas Linux y OS X. Esto se debió en gran medida a que los desarrolladores de Servo estaban en esos sistemas operativos.

Como un subproducto, Servo terminó con muchas dependencias basadas en Linux (make, gcc, etc.), el sistema de compilación haría llamadas fijas a /bin/:/usr/bin/[etc]. La migración de esto a multiplataforma llevó tiempo. El ingeniero de Servo Lars Bergstrom explica:

“Ciertamente el soporte de fuentes y el sistema de construcción han tomado el mayor esfuerzo. En general, asegurarse de que todos los cientos de crates en las dependencias de Servo no sólo se construyen, sino que funcionan correctamente en Windows ha tomado un gran esfuerzo.

Muchas cosas (incluyendo Servo) también fueron fáciles de superar en MinGW con una experiencia “unixy” de Windows, pero conseguir una experiencia verdadera, nativa de Windows usando MSVC llevó mucho más tiempo”.

Un año más tarde, la solución rápida y fácil para ejecutar Servo en Windows era emular un entorno Linux, por lo que esto llevó a las instrucciones de instalación utilizando msys y mingw en Windows. Aunque Servo construyera, parecía más una solución temporal.

Se creó una rama Windows de Servo, con muchos pasos de compilación arreglados en el tiempo; y los módulos, que utilizan sólo componentes de Linux, apagados. Una por una, pudimos eliminar las incompatibilidades.

Ha habido un empuje de algunos de nosotros, con mucha ayuda de Vlad, para que Servo construya correctamente en Windows y utilice el compilador de Microsoft Visual C ++ (MSVC) durante algún tiempo. ¡Y finalmente estamos allí!

Entonces, ¿cómo empezar a desarrollar? Para estos ejemplos usaré Windows 10 x64.

Comencemos

No tienes que realizar la edición ahí, pero Visual Studio (VS) nos permite depurar el binario. Podemos pausar en cualquier momento y editar puntos de ruptura (como veremos más adelante).

Ve a https://www.visualstudio.com/downloads/ y descarga “Visual Studio 2017 Community”.

Una vez descargado, y cuando aparecen las opciones, navega a la pestaña de componentes individuales y selecciona:

  • Soporte C++/CLI
  • Herramientas de Perfilado
  • Herramientas Visual C++ para Cmake
  • Herramientas VC++ 2017 v141

Necesitaremos añadir las herramientas de construcción que VS a la ruta de nuestro sistema.

Navega a variables de entorno, y añade esto a la variable Path:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64

Ya que estás ahí, deberías configurar una nueva variable de entorno, VisualStudioVersion con el valor 15.0 (sí, 15.0 aunque en realidad sea VS 2017). Esto habilita poder contruir los crates que usan cmake (libssh2-sys, etc.).

Por el momento hemos terminado por aquí.

rustup

rustup gestionará nuestra instalación Rust y nos permitirá cambiar entre versiones, además de nightly y ramas estables. Lo hace muy fácil de actualizar. Nosotros necesitaremos nightly mas tarde, así que rustup es la mejor manera de empezar.

Ve a rustup.rs  y descarga el instalador. Mencionará instalar las herramientas de construcción para Visual C++, pero VS debería ya habernos dado esto anteriormente, así que continúa.

Selecciona 1 y sigue con la instalación por defecto.

Instalar rust-src

Abre PowerShell: Deberías tener Rust instalado, puedes probar con:

$ rustc --version

Nuestra siguiente tarea es instalar rust-src, esto ayuda a VS encontrar el código que está buscando. (Esto es también un paso útil para soporte).

Antes de seguir adelante, deberíamos cambiar a nightly. Nightly nos proporciona Natvis.

$ rustup default nightly $ rustup component add rust-src

Ahora tendrás algunos ficheros ubicados en:

C:\Users\[User]\.multirust\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src

A pesar que no es útil por ahora, necesitarás este path para la sección Opcional: entrar en la librería estándar mas abajo.

Añadir Natvis para Rust

Los ficheros Natvis proporcionan visualizaciones de objetos nativos en Rust en Visual Studio. El equipo de Rust ha añadido Vec, LinkedList, VecDeque, String, Option además de muchas más visualizaciones Natvis.

Aquí están como usarlas:

C:\Users\[User]\.multirust\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\etc\natvis

Copia los ficheros .natvis de ahí y añádelos en

C:\Users\[User]\Documents\Visual Studio 2017\Visualizers

No te preocupes si la carpeta Visualizers no existe, puedes crear este directorio.

Construir Servo

No entraré muy detalle en la configuración de Servo aquí, ya que está cubierto en:

https://github.com/servo/servo/#on-windows-msvc–mingw

Construye la última versión usando --dev, ejecutando

$ mach.bat build --dev

en PowerShell aquí. Es importante que uses opción --dev dado que la depuración no funcionará sin ello.

Volver a Visual Studio

Ahora que tenemos construido Servo, ejecutémoslo.

Puedes abrir Visual Studio, Fichero, Abrir, Proyecto/Solución, cambiar “Todos los ficheros del proyecto” a “Ficheros ejecutables del proyecto” y navegar a tu binario servo.exe, usualmente en target/debug/servo.exe.

Si necesitas pasar argumentos puedes dar click en el botón derecho en “Servo”, en el explorador de solución a la derecha. Una vez listo, puedes pulsar “comenzar” en la parte de arriba.

Esto debería cargar Servo y podrías ver algunos perfiles de memoria en el fondo en VS. Puedes parar en cualquier punto y debería llevarte al código cuando está pausado. Si esto no ocurre verifica que el “Thread” está configurado como “Main Thread”.

Por ejemplo, si el navegador está ocioso y pausamos, podríamos terminar en esta línea:

self.window.events_receiver.recv().ok() Opcional: entrar en la librería estándar

¿Recuerdas el rust-src que instalamos antes? Bien, esto es útil si queremos ver lo que la librería estándar está haciendo, de otro modo el depurador puede quejarse cuando pulses en funciones std::*. Así que para decir a VS sobre el código fuente rust damos click al botón derecho sobre el nombre de la solución a la derecha “Solution ‘servo’” y seleccionamos propiedades, después dentro de “Propiedades comunes/Ficheros fueste de depuración” añade esa ruta a la ventana de arriba.

Establecer puntos de ruptura

Es directo también, puedes arrastrar cualquier fichero desde el proyecto hacia VS y poner un punto de ruptura. Pulsa en empezar otra vez y el programa debería parar en ese punto. Puedes entrar y salir de las funciones o usar continuar y puntos de ruptura para inspeccionar la ejecución de tu programa. ¡Puedes ver las trazas y variables en su alcance abajo también!

Si todo fue bien, deberías tener algo similar a esto:

Contribuir

Te gustaría contribuir pero no estas seguro dónde empezar?

https://starters.servo.org/ tiene algunos tickets para principiantes, ademas hay todavía bastantes tickets fáciles también.

Artículos relacionados:

Categorías: Mozilla Hispano

Páginas

Subscribe to Proyecto NAVE agregador