2012-03-02 12 views
5

Estoy buscando una herramienta de administración de dependencias que no sea específica para Java o cualquier otro idioma.¿Existen algunas buenas herramientas de administración de dependencias que no sean específicas de un idioma?

Usamos SystemVerilog, un lenguaje de descripción de hardware, para crear módulos independientes. Etiquetamos lanzamientos de esos módulos en varios hitos. Los diseños de nivel superior a menudo extraen otros módulos utilizando etiquetas de Subversion.

Intentamos usar Subversion externos para automatizar las cosas, de modo que cuando revisa un módulo también obtiene sus dependencias. Pero cuando llega al nivel del sistema, hay tantos elementos externos anidados que lleva una hora ejecutar svn update. Claramente, ese enfoque no está funcionando.

Básicamente, quiero poder decir: "Mi módulo depende de esta versión del módulo A, esta versión del módulo B y esta versión del módulo C." La herramienta haría el trabajo de verificar las dependencias, verificar las dependencias de las dependencias y asegurarse de que no haya dependencias conflictivas (por ejemplo, dos versiones del mismo módulo).

¿Hay alguna herramienta que funcione bien con un lenguaje arbitrario y Subversion?

Respuesta

0

No siento el dolor del seguimiento de la dependencia que está describiendo, lo que significa que probablemente no entiendo completamente su problema.

Un enfoque es mantener todas las versiones de los módulos en archivos separados en la misma biblioteca. Por ejemplo, puede tener adder_0_0.sv para la primera versión de un módulo HDL sumador completo, que describiría un módulo llamado adder_0. Si encuentra un error en el módulo, puede crear un archivo llamado adder_0_1.sv que también describe adder_0. Podrá usar adder_0_1.sv en lugar de adder_0_0.sv. Si desea cambiar la interfaz, agregando o eliminando puertos, o cambiando la semántica de los puertos, puede crear un archivo llamado adder_1_0.sv que describe un módulo llamado adder_1. Tenga en cuenta que adder_0 y adder_1no se pueden usar de manera intercambiable.

La filosofía detrás de este enfoque es que todos estos archivos son escriben una vez. Solo sigue agregando nuevos archivos a su biblioteca. Cualquier proyecto que use esta biblioteca simplemente verifica toda la biblioteca y usa los archivos que ellos quieran. La administración de dependencias es tan complicada como poner los nombres de archivo correctos en el archivo de descripción de proyecto correcto para cualquier herramienta de simulación o síntesis que use. No se requiere ninguna herramienta especial de administración de dependencias. Cuantas menos bibliotecas separadas tenga, más fácil será gestionarlas.

0

Una vez tuve un flujo de herramientas que buscaba archivos de origen en dos lugares. Primero, se veía en el directorio local. En segundo lugar, se veía en el área "maestra" que era compartida, directorio de solo lectura con todo el código prestado para que todos lo usen. Si necesitaba modificar el código, solo revisé el módulo que necesitaba. Luego, el script recogerá ese módulo de mi espacio de trabajo local. El resto del código lo lee del área maestra. Todo esto era una creación de scripts personalizados, herramientas no originales, pero no era demasiado difícil.

Si funciona, es posible que pueda ir más allá y compilar el código de área maestra en bibliotecas maestras compartidas. Esto realmente podría acelerar el tiempo de compilación.

Cuestiones relacionadas