windows system
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
# Finales de línea LF en las dos máquinas (Make exige tabuladores y LF)
|
||||
* text=auto eol=lf
|
||||
|
||||
# Bytes en crudo: git no debe tocarlos nunca
|
||||
*.bin binary
|
||||
*.exe binary
|
||||
*.o binary
|
||||
@@ -1,3 +1,9 @@
|
||||
build/
|
||||
*.o
|
||||
*.exe
|
||||
|
||||
# Volcados de memoria de valgrind
|
||||
vgcore.*
|
||||
|
||||
# Binarios de Go compilados en Linux
|
||||
goescpos/hello
|
||||
|
||||
Vendored
+4
-1
@@ -27,7 +27,10 @@
|
||||
],
|
||||
"windows": {
|
||||
"program": "${workspaceFolder}/build/hello.exe",
|
||||
"miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe"
|
||||
"miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe",
|
||||
"environment": [
|
||||
{ "name": "PATH", "value": "C:/msys64/ucrt64/bin;${env:PATH}" }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Vendored
+14
-1
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"files.eol": "\n",
|
||||
"files.associations": {
|
||||
"*.h": "c"
|
||||
},
|
||||
@@ -12,5 +13,17 @@
|
||||
"[makefile]": {
|
||||
"editor.insertSpaces": false,
|
||||
"editor.detectIndentation": false
|
||||
}
|
||||
},
|
||||
"terminal.integrated.profiles.windows": {
|
||||
"MSYS2 UCRT64": {
|
||||
"path": "C:/msys64/usr/bin/bash.exe",
|
||||
"args": ["--login", "-i"],
|
||||
"env": {
|
||||
"MSYSTEM": "UCRT64",
|
||||
"CHERE_INVOKING": "1",
|
||||
"MSYS2_PATH_TYPE": "inherit"
|
||||
}
|
||||
}
|
||||
},
|
||||
"terminal.integrated.defaultProfile.windows": "MSYS2 UCRT64"
|
||||
}
|
||||
|
||||
Vendored
+16
@@ -1,5 +1,18 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"windows": {
|
||||
"options": {
|
||||
"shell": {
|
||||
"executable": "C:/msys64/usr/bin/bash.exe",
|
||||
"args": ["--login", "-c"]
|
||||
},
|
||||
"env": {
|
||||
"MSYSTEM": "UCRT64",
|
||||
"CHERE_INVOKING": "1",
|
||||
"MSYS2_PATH_TYPE": "inherit"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"label": "make",
|
||||
@@ -24,6 +37,9 @@
|
||||
"label": "valgrind",
|
||||
"type": "shell",
|
||||
"command": "valgrind --leak-check=full ./build/hello",
|
||||
"windows": {
|
||||
"command": "echo 'valgrind no existe en Windows: pruébalo en Fedora'"
|
||||
},
|
||||
"dependsOn": "make",
|
||||
"problemMatcher": []
|
||||
}
|
||||
|
||||
+18
-13
@@ -2,8 +2,8 @@
|
||||
|
||||
## Estado actual
|
||||
|
||||
- **Fase 2**: buffer dinámico. La Fase 1 está cerrada en Fedora, pero falta
|
||||
probarla en Windows.
|
||||
- **Fase 2**: buffer dinámico. La Fase 1 está cerrada en Fedora y en Windows
|
||||
(2026-10-05).
|
||||
- Paso actual: 2.3b. `hello.c` ya usa bien `goto cleanup` (punteros a `NULL`
|
||||
uno por línea, `result`, un solo `return`), sin avisos con gcc ni clang, y
|
||||
Valgrind limpio. Falta `escpos_buffer_append`: el parámetro con la cantidad,
|
||||
@@ -17,20 +17,23 @@
|
||||
|
||||
### Windows (sobremesa)
|
||||
|
||||
- Al llegar: `git pull` en la terminal UCRT64 y comprobar `gcc`, `make` y `gdb`.
|
||||
Si falta algo:
|
||||
`pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-gdb make`.
|
||||
- Cerrar la Fase 1: `make` tiene que generar `build/hello.exe`. Falta en el
|
||||
Makefile el `ifeq ($(OS),Windows_NT)` de `docs/06-make.md`. `mkdir -p` y
|
||||
`rm -rf` solo funcionan en la shell de MSYS2.
|
||||
- Probar F5 en VS Code: `.vscode/` ya tiene la configuración de Windows con
|
||||
rutas `C:/msys64/ucrt64/...`.
|
||||
- Hay gcc, gdb y make en `C:\msys64`. Faltan clang y `xxd` (opcionales:
|
||||
`pacman -S mingw-w64-ucrt-x86_64-clang vim`; mientras, `hexdump -C`).
|
||||
- Fase 1 cerrada: `make`, `make run` y `Nothing to be done` funcionan sin
|
||||
`EXE` gracias a la emulación de `.exe` de MSYS2 (ver docs/06-make.md). El
|
||||
`ifeq ($(OS),Windows_NT)` se pospone a la Fase 4, cuando haga falta
|
||||
`-lws2_32`.
|
||||
- Probar en VS Code: terminal nueva (debe abrir UCRT64), Ctrl+Shift+B y F5.
|
||||
- El 2.3b se puede avanzar aquí; la comprobación de memoria queda para Fedora.
|
||||
|
||||
### Fedora (portátil)
|
||||
|
||||
- Validar con valgrind el 2.3b cuando esté hecho (y con ASan/UBSan antes de
|
||||
cerrar la Fase 2).
|
||||
- Tras el `git pull` del 2026-10-05, comprobar que `make` y F5 siguen igual
|
||||
(se ha tocado `.vscode/` y se han añadido `.gitattributes` y `.gitignore`).
|
||||
Los binarios de Go ya no se versionan: recompilarlos con `go build` si hacen
|
||||
falta.
|
||||
|
||||
## Hecho
|
||||
|
||||
@@ -80,13 +83,15 @@
|
||||
- Estilo: nombres en `snake_case` y llave de apertura en línea aparte (estilo
|
||||
Allman) en funciones, structs y bloques.
|
||||
- Lo generado va en `build/`, que se crea en las recetas con `mkdir -p` y no se
|
||||
versiona.
|
||||
versiona. Tampoco se versionan ejecutables ni volcados (`vgcore.*`).
|
||||
- Dos máquinas transparentes: `.gitattributes` fuerza LF en todo y marca
|
||||
`*.bin` como binario (git no toca los bytes ESC/POS). En Windows, VS Code usa
|
||||
la shell UCRT64 de MSYS2 para la terminal y las tareas, así que `make`,
|
||||
`mkdir -p` y `rm -rf` funcionan igual que en Fedora.
|
||||
|
||||
## Pendiente / puntos débiles
|
||||
|
||||
- Fase 1: probar el Makefile en Windows (MSYS2), con el sufijo `.exe`.
|
||||
- `.gitignore` creado. Siguen versionados `emulator/escpos-emu.exe` y
|
||||
`goruntime/goruntime.exe`.
|
||||
- Make: le costó entender que va hacia atrás desde el objetivo y que una regla
|
||||
patrón es una plantilla. Repasar con `docs/06-make.md`.
|
||||
- Punteros: le cuesta saber cuándo hace falta `*` y cuándo no, y distinguir la
|
||||
|
||||
@@ -224,3 +224,26 @@ endif
|
||||
|
||||
Más adelante (Fase 4) aquí irán también las librerías que cambian según la
|
||||
plataforma, como `-lws2_32` para Winsock en Windows.
|
||||
|
||||
### La «magia .exe» de MSYS2
|
||||
|
||||
Sin `EXE`, el Makefile con objetivo `build/hello` parece funcionar en Windows:
|
||||
el segundo `make` dice `Nothing to be done`. No es mérito del Makefile:
|
||||
|
||||
- `make`, `ls` y la shell de `/usr/bin` son programas de MSYS2, que emula
|
||||
POSIX encima de Windows.
|
||||
- Si un programa de MSYS2 pregunta por `build/hello` y solo existe
|
||||
`build/hello.exe`, la capa de emulación responde que existe y le da la fecha
|
||||
del `.exe`.
|
||||
|
||||
| Comando | Qué ve |
|
||||
|---|---|
|
||||
| `ls -l build/hello` | Pasa por la emulación: «existe». |
|
||||
| `cmd //c dir build` | Pregunta a Windows: solo hay `hello.exe`. |
|
||||
|
||||
Con un make nativo (`mingw32-make`) esa emulación no existe: no encuentra
|
||||
`build/hello` y vuelve a enlazar cada vez. Por eso se pone el nombre real con
|
||||
`$(EXE)`.
|
||||
|
||||
**Comparación con Go:** `go build` añade `.exe` por sí mismo cuando
|
||||
`GOOS=windows`. En C, el nombre del ejecutable lo decides tú en el Makefile.
|
||||
|
||||
@@ -76,6 +76,10 @@ Si juntas dos flags de parada (`-E -S`), gana la que para antes.
|
||||
| `objdump -p hello.exe \| grep "DLL Name"` | Lista las DLL de las que depende el ejecutable. |
|
||||
| `strip hello.exe` | Quita símbolos e información de depuración. |
|
||||
| `gcc -static ...` | Enlaza estáticamente todas las librerías posibles. |
|
||||
| `uname -s` | Nombre del sistema: `Linux` en Fedora, `UCRT64_NT-...` en la terminal UCRT64 de Windows. |
|
||||
| `echo $MSYSTEM` | Entorno de MSYS2 activo. Tiene que ser `UCRT64`. |
|
||||
| `pacman -S mingw-w64-ucrt-x86_64-clang` | Instala clang para el entorno UCRT64. |
|
||||
| `pacman -S vim` | Instala `xxd` (viene con vim). Sin él, usa `hexdump -C fichero.bin`. |
|
||||
|
||||
## Make
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user