Skip to content

Commit 06594bf

Browse files
authored
Merge pull request #6 from Kilynho/copilot/test-compile-linux-kernel
Add kernel compilation testing with automatic cleanup and reporting
2 parents 2845ea4 + 1a2fd7e commit 06594bf

File tree

8 files changed

+1612
-16
lines changed

8 files changed

+1612
-16
lines changed

COMPILE.md

Lines changed: 323 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,323 @@
1+
# Módulo de Compilación - Documentación
2+
3+
## Descripción General
4+
5+
El módulo de compilación (`compile.py`) permite verificar que los archivos modificados del kernel Linux compilan correctamente después de aplicar los fixes automáticos. Esta funcionalidad es crucial para asegurar que las correcciones no introduzcan errores de compilación.
6+
7+
## Características Principales
8+
9+
### ✅ Compilación Individual
10+
- Compila archivos uno por uno usando el sistema de build del kernel (`make`)
11+
- Solo compila archivos `.c` (los archivos `.h` se incluyen automáticamente)
12+
- Usa el Makefile del kernel para garantizar compatibilidad
13+
14+
### ✅ Limpieza Automática
15+
- Elimina archivos `.o` generados después de la compilación
16+
- También elimina archivos auxiliares (`.cmd`, `.d`)
17+
- No deja rastro de archivos compilados en el árbol del kernel
18+
19+
### ✅ Gestión de Backups
20+
- Puede restaurar archivos desde sus backups (`.bak`) antes de compilar
21+
- Opción para restaurar backups después de compilar
22+
- Útil para probar compilación sin afectar el código modificado
23+
24+
### ✅ Reportes Completos
25+
- **HTML**: Reporte visual con estadísticas y detalles de errores
26+
- **JSON**: Resultados estructurados para procesamiento automático
27+
- **Consola**: Resumen en tiempo real del progreso
28+
29+
## Uso
30+
31+
### Comando Básico
32+
33+
```bash
34+
python3 main.py --compile \
35+
--json-input json/fixed.json \
36+
--kernel-root /path/to/kernel/linux
37+
```
38+
39+
### Opciones Disponibles
40+
41+
| Opción | Descripción |
42+
|--------|-------------|
43+
| `--json-input` | Archivo JSON con lista de archivos a compilar (requerido) |
44+
| `--kernel-root` | Directorio raíz del kernel Linux (requerido) |
45+
| `--restore-before` | Restaurar backups antes de compilar |
46+
| `--restore-after` | Restaurar backups después de compilar |
47+
| `--no-cleanup` | No limpiar archivos `.o` después de compilar |
48+
| `--html` | Ruta del archivo HTML de salida (default: `html/compile.html`) |
49+
| `--json-out` | Ruta del archivo JSON de salida (default: `json/compile.json`) |
50+
51+
### Ejemplos de Uso
52+
53+
#### 1. Compilar y verificar archivos modificados
54+
55+
```bash
56+
# Después de aplicar fixes, compilar para verificar
57+
python3 main.py --compile \
58+
--json-input json/fixed.json \
59+
--kernel-root ~/src/kernel/linux
60+
```
61+
62+
#### 2. Compilar y restaurar después
63+
64+
```bash
65+
# Útil para probar sin afectar los archivos
66+
python3 main.py --compile \
67+
--json-input json/fixed.json \
68+
--kernel-root ~/src/kernel/linux \
69+
--restore-after
70+
```
71+
72+
#### 3. Compilar sin limpieza (debug)
73+
74+
```bash
75+
# Mantener .o files para inspección
76+
python3 main.py --compile \
77+
--json-input json/fixed.json \
78+
--kernel-root ~/src/kernel/linux \
79+
--no-cleanup
80+
```
81+
82+
## Flujo Completo
83+
84+
El flujo recomendado es:
85+
86+
```bash
87+
# 1. Analizar archivos
88+
python3 main.py --analyze /path/to/kernel/linux --paths init
89+
90+
# 2. Aplicar fixes
91+
python3 main.py --fix --json-input json/checkpatch.json
92+
93+
# 3. Compilar para verificar
94+
python3 main.py --compile \
95+
--json-input json/fixed.json \
96+
--kernel-root /path/to/kernel/linux \
97+
--restore-after
98+
99+
# O usar el script automatizado
100+
./run
101+
```
102+
103+
## Formato del JSON de Entrada
104+
105+
El módulo acepta dos formatos de JSON:
106+
107+
### Formato 1: JSON de Autofix (recomendado)
108+
109+
```json
110+
{
111+
"/path/to/file1.c": {
112+
"error": [...],
113+
"warning": [...]
114+
},
115+
"/path/to/file2.c": {
116+
"error": [...],
117+
"warning": [...]
118+
}
119+
}
120+
```
121+
122+
Solo compila archivos que tienen al menos un fix aplicado (`fixed: true`).
123+
124+
### Formato 2: JSON de Checkpatch
125+
126+
```json
127+
[
128+
{
129+
"file": "/path/to/file1.c",
130+
"error": [...],
131+
"warning": [...]
132+
},
133+
{
134+
"file": "/path/to/file2.c",
135+
"error": [...],
136+
"warning": [...]
137+
}
138+
]
139+
```
140+
141+
Compila todos los archivos listados.
142+
143+
## Formato del JSON de Salida
144+
145+
```json
146+
{
147+
"summary": {
148+
"total": 3,
149+
"successful": 2,
150+
"failed": 1,
151+
"success_rate": 66.67,
152+
"total_duration": 4.5,
153+
"avg_duration": 1.5
154+
},
155+
"results": [
156+
{
157+
"file": "/path/to/file1.c",
158+
"success": true,
159+
"duration": 1.2,
160+
"stdout": "CC init/main.o",
161+
"stderr": "",
162+
"error_message": ""
163+
},
164+
{
165+
"file": "/path/to/file2.c",
166+
"success": false,
167+
"duration": 0.8,
168+
"stdout": "",
169+
"stderr": "error: implicit declaration...",
170+
"error_message": "error: implicit function declaration"
171+
}
172+
]
173+
}
174+
```
175+
176+
## Reporte HTML
177+
178+
El reporte HTML incluye:
179+
180+
### Sección de Estadísticas
181+
- **Total Files**: Número de archivos compilados
182+
- **Successful**: Archivos compilados exitosamente
183+
- **Failed**: Archivos con errores de compilación
184+
- **Success Rate**: Porcentaje de éxito
185+
- **Total Time**: Tiempo total de compilación
186+
- **Avg Time**: Tiempo promedio por archivo
187+
188+
### Cajas de Resumen
189+
-**Caja verde**: Todos los archivos compilaron exitosamente
190+
- ⚠️ **Caja roja**: Algunos archivos fallaron
191+
192+
### Detalles por Archivo
193+
- **Failed Compilations**: Lista de archivos con errores (expandibles)
194+
- Muestra mensaje de error
195+
- Incluye stderr completo en detalles
196+
- **Successful Compilations**: Lista de archivos exitosos (expandibles)
197+
- Muestra tiempo de compilación
198+
- Incluye stdout si está disponible
199+
200+
## Salida en Consola
201+
202+
```
203+
[COMPILE] Compilando 3 archivos...
204+
[COMPILE] [1/3] Compiling: init/main.c
205+
[COMPILE] ✓ Success (1.2s)
206+
[COMPILE] [2/3] Compiling: init/version.c
207+
[COMPILE] ✗ Failed (0.8s)
208+
[COMPILE] Error: error: implicit function declaration
209+
[COMPILE] [3/3] Compiling: init/calibrate.c
210+
[COMPILE] ✓ Success (0.9s)
211+
212+
[CLEANUP] Limpiando 2 archivos compilados...
213+
[CLEANUP] Removed: init/main.o
214+
[CLEANUP] Removed: init/calibrate.o
215+
216+
============================================================
217+
RESUMEN DE COMPILACIÓN
218+
============================================================
219+
Total de archivos: 3
220+
Compilados con éxito: 2 (66.7%)
221+
Fallidos: 1 (33.3%)
222+
Tiempo total: 2.9s
223+
Tiempo promedio: 1.0s
224+
============================================================
225+
226+
Archivos con errores de compilación:
227+
✗ version.c
228+
error: implicit function declaration
229+
230+
[COMPILE] ✓ Informe HTML generado: html/compile.html
231+
[COMPILE] ✓ JSON generado: json/compile.json
232+
```
233+
234+
## Requisitos del Sistema
235+
236+
### Kernel Linux
237+
- Debe tener el sistema de build configurado (`make` debe funcionar)
238+
- `scripts/checkpatch.pl` debe existir
239+
- Los archivos a compilar deben estar en el árbol del kernel
240+
241+
### Dependencias Python
242+
- Python 3.6+
243+
- Módulo `pathlib` (incluido en Python 3.4+)
244+
- Módulo `json` (incluido en stdlib)
245+
- Módulo `subprocess` (incluido en stdlib)
246+
247+
## Manejo de Errores
248+
249+
### Timeout de Compilación
250+
- Cada archivo tiene un timeout de 5 minutos
251+
- Si se excede, se marca como fallido con mensaje de timeout
252+
253+
### Errores de Compilación
254+
- Los errores se capturan del stderr
255+
- Se muestran las primeras 5 líneas con "error:"
256+
- El stderr completo está disponible en el reporte HTML
257+
258+
### Archivos No Existentes
259+
- Si un archivo del JSON no existe, se salta con warning
260+
261+
## Tests Unitarios
262+
263+
El módulo incluye tests completos en `test_compile.py`:
264+
265+
```bash
266+
# Ejecutar todos los tests
267+
python3 test_compile.py -v
268+
269+
# Tests incluidos:
270+
# - CompilationResult creation and serialization
271+
# - Result summarization
272+
# - JSON report generation
273+
# - Backup restoration
274+
# - Full workflow integration
275+
```
276+
277+
Todos los tests son independientes y no requieren kernel Linux.
278+
279+
## Integración con Dashboard
280+
281+
El reporte de compilación se integra en el dashboard con:
282+
- Tab "Compile" en la navegación
283+
- Breadcrumb: Dashboard → Compile
284+
- Estilo consistente con analyzer y autofix
285+
286+
## Limitaciones Conocidas
287+
288+
1. **Solo archivos .c**: Los archivos `.h` no se compilan directamente
289+
2. **Requiere kernel configurado**: El kernel debe tener `.config` generado
290+
3. **Dependencias del kernel**: Si el archivo depende de módulos no compilados, puede fallar
291+
4. **Tiempo de compilación**: Puede ser lento para muchos archivos
292+
293+
## Solución de Problemas
294+
295+
### Error: "Kernel root no encontrado"
296+
- Verificar que la ruta al kernel es correcta
297+
- Usar ruta absoluta: `--kernel-root ~/src/kernel/linux`
298+
299+
### Error: "make: *** No rule to make target"
300+
- El archivo puede no estar en el Makefile del kernel
301+
- Verificar que el archivo es parte del kernel
302+
303+
### Compilación lenta
304+
- Usar menos archivos en el JSON
305+
- Verificar que el kernel está configurado correctamente
306+
307+
### No se limpian los .o
308+
- Verificar que no se usa `--no-cleanup`
309+
- Verificar permisos de escritura en el directorio
310+
311+
## Mejoras Futuras
312+
313+
- [ ] Compilación paralela de múltiples archivos
314+
- [ ] Soporte para compilar módulos completos
315+
- [ ] Detección automática de dependencias
316+
- [ ] Caché de resultados de compilación
317+
- [ ] Integración con herramientas de análisis estático
318+
319+
## Referencias
320+
321+
- [Documentación del kernel Linux](https://www.kernel.org/doc/html/latest/)
322+
- [Sistema de build del kernel (Kbuild)](https://www.kernel.org/doc/html/latest/kbuild/index.html)
323+
- [Checkpatch.pl](https://www.kernel.org/doc/html/latest/dev-tools/checkpatch.html)

0 commit comments

Comments
 (0)