2011-01-29 14 views
19

Tengo este deseo de hacer algunos experimentos con la modificación de la parte inferior de la biblioteca de tiempo de ejecución de Delphi (RTL), system.pas y los me gusta ... ¿Es posible o no?Recompilación del RTL: si es posible, ¿cómo?

Soy muy aficionado a los desafíos como "sí, pero tendrás que proporcionar archivos .obj personalizados para algunos ensambladores de magia porque nunca se distribuyeron con la fuente oficial de Delphi". Bien conmigo, solo quiero saber.

Quiero hacer este experimento con Delphi 7, pero la información interna en cualquier otra versión está bien. Es una de las ventajas de estar con una compañía que trabajó con Delphi desde la Edad de Piedra.

(Siempre pensé que esto sea una de esas preguntas RTFM, siendo la respuesta un rotundo "NO", pero por alguna razón que Google no confirmarlo.)

Respuesta

19

Puede recompilar el RTL como cualquier otra unidad.

Para System.pas debe utilizar el compilador de línea de comandos.

Por ejemplo, aquí es un contenido de archivo por lotes de trabajo (hay una cierta línea de comandos no está bien documentado interruptores):

del *.dcu /s 
"c:\program files\borland\delphi7\bin\dcc32.exe" -O+ -Q -M -Y -Z -$D+ System.pas 

Esto recompilar System.pas y SysInit.pas (ambos archivos RTL nivel más bajo) .

Pero para utilizar sus archivos dcu recreados, deberá colocar la carpeta que contiene los archivos dcu actualizados en la primera posición de su IDE: por ejemplo, en Opciones/Opciones de entorno/Biblioteca Delphi 7, luego coloque su carpeta PRIMERO en el campo "Ruta de la Biblioteca" y "Ruta de navegación".

Y tal vez valga la pena eliminar los archivos .dcu originales en su directorio de instalación de Delphi.

Pero asegúrese de no cambiar la parte de "interfaz" de la unidad, o tendrá problemas para compilar con otras unidades no modificadas de la RTL (o componentes de terceros). Puede cambiar la parte de "implementación", aplicar arreglos o reescribir alguna parte para la velocidad, pero no cambie la parte de "interfaz" para evitar cualquier error de enlace.

Realice siempre una copia de seguridad de los archivos .pas y .dcu originales que está cambiando. Y es una buena idea hacer una prueba de compilación automática, para que pueda estar seguro de que sus modificaciones de la RTL no agregarán ninguna regresión.

Hicimos una recompilación de RTL para nuestro Enhanced Run Time Library para una mejor velocidad de las funciones RTL de bajo nivel (principalmente System.pas y SysUtils.pas). Diseñado para Delphi 7 y 2007. Para la versión más reciente de Delphi, aún puede usar el mismo principio.

+0

Gracias por la redacción clara, respaldada por una experiencia dura. ¡Excelente! –

16

Sólo puede volver a compilar el RTL desde la línea de comando. Debe haber un archivo MAKE en el directorio fuente de RTL de su instalación. Está diseñado para ser utilizado con la utilidad de línea de comandos make.exe, que debe estar en la carpeta "bin" de su instalación. Le recomendaría que copie las fuentes relevantes en un lugar diferente para la experimentación. Debo advertirle que la unidad del Sistema está estrechamente unida al compilador, que espera que muchas funciones tengan un nombre específico y que tengan listas de parámetros particulares, si alguna está incluso declarada. Muchas funciones RTL "auxiliares" no tienen ningún parámetro formalmente declarado, pero esperan que los parámetros se pasen de cierta manera.

Otro poco de precaución es cambiar las declaraciones de interfaz de ciertas clases, funciones o tipos. Hacerlo puede causar serias incompatibilidades con los archivos y componentes DCU existentes. Por este motivo, debe tener mucho cuidado al mezclar los archivos DCU del RTL incluido o los componentes de terceros con sus versiones modificadas personalizadas. Sugeriría que empiece haciendo solo cambios en la sección de implementación antes de aventurarse en el campo de minas de cambios de interrupción de la interfaz.

+0

Recuerdo una vez que el compilador también se basó en el orden de las declaraciones System.pas. Ha sido hace mucho tiempo desde que recompuse el RTL, por lo que esto podría haber sido en la era Turbo Pascal/Delphi 1 (16 bits). –

+2

¿Cómo lo llamamos RTL? Para System.pas y SysInit.pas, podría hacerse solo desde la línea de comando. Pero para otras unidades de nivel superior (como Classes.pas o SysUtils.pas) se puede hacer desde el IDE, simplemente cambiando los archivos de la Biblioteca más antiguos en las opciones IDE, y proporcionando otra fuente .pas que se usará en lugar del versión predeterminada. –

+0

Como recuerdo Variants.pas no se puede volver a compilar fácilmente incluso sin cambios. – Torbins

Cuestiones relacionadas