Windows 11 native port, phase 1: MinGW-w64 static build, compat shims, setup + docs (#40)
* fix: Windows port audit fixes — _FILE_OFFSET_BITS guard, O_BINARY st.h, getrusage peak, oracle diagnostic, setup.sh wmic
Audit remediation (all MEDIUM issues fixed):
- compat.h: compile-time #error if _FILE_OFFSET_BITS < 64 on _WIN32
- compat.h: COMPAT_O_RDONLY macro (O_RDONLY|O_BINARY on Windows, belt-and-braces)
- st.h: use COMPAT_O_RDONLY in both open() call sites (plan §1 row 1)
- compat.h: getrusage shim now uses PeakWorkingSetSize (ru_maxrss = peak, not current)
- glm.c: oracle mismatch diagnostic — prints position/expected/got on TF failures
- setup.sh: replace deprecated wmic with /proc/meminfo (MSYS2 provides it)
- .gitignore: *.exe, glm_tiny/, olmoe_hf/, olmoe_i4/
LOW issues addressed:
- _FILE_OFFSET_BITS guard prevents silent 32-bit off_t wrap at >4GB offsets
- coli Windows venv path (Scripts/python.exe) fixed earlier
- posix_fadvise do{}while(0) kept intentionally — no caller checks return code
Verification: oracle 32/32, 27/27 Python tests, rename EEXIST, >4GB pread offset.
* docs: add Windows 11 native port section to README
- Toolchain: MinGW-w64 (winlibs or MSYS2), GCC 16.1 tested
- Build instructions: make glm.exe, tiny oracle verification
- Runtime: SNAP=..., coli chat, coli serve all work
- Status: Phase 1 complete (compiles, correct, static-linked)
- Update platform requirements to include Windows 11 natively
This commit is contained in:
+24
-7
@@ -1,24 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
# colibrì — installazione su una macchina nuova (Linux x86-64).
|
||||
# colibrì — installazione su una macchina nuova (Linux x86-64, macOS, Windows/MinGW).
|
||||
# Compila il motore e fa un self-test. Il MODELLO (~372 GB int4) va copiato a parte
|
||||
# o rigenerato con: coli convert --model <dir-su-ext4/NVMe>
|
||||
set -e
|
||||
cd "$(dirname "$0")"
|
||||
echo "🐦 colibrì — setup"
|
||||
|
||||
UNAME_S=$(uname -s)
|
||||
|
||||
# 1) dipendenze
|
||||
command -v make >/dev/null || { echo "manca make"; exit 1; }
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
case "$UNAME_S" in
|
||||
Darwin)
|
||||
command -v clang >/dev/null || { echo "manca clang (xcode-select --install)"; exit 1; }
|
||||
echo " clang: $(clang --version | head -1) · $(sysctl -n hw.ncpu) core"
|
||||
echo -n " OpenMP: "
|
||||
if brew --prefix libomp >/dev/null 2>&1; then echo "ok (libomp)"
|
||||
else echo "libomp assente -> build single-thread (consigliato: brew install libomp)"; fi
|
||||
else
|
||||
;;
|
||||
MINGW*|MSYS*)
|
||||
command -v gcc >/dev/null || { echo "manca gcc (MinGW-w64). Installa: pacman -S mingw-w64-x86_64-gcc make"; exit 1; }
|
||||
echo " gcc: $(gcc -dumpversion) · MinGW-w64"
|
||||
echo -n " OpenMP: "; echo 'int main(){return 0;}' | gcc -fopenmp -xc - -o /tmp/_omp 2>/dev/null && echo ok || { echo "manca libgomp (pacman -S mingw-w64-x86_64-gcc)"; exit 1; }
|
||||
;;
|
||||
*)
|
||||
command -v gcc >/dev/null || { echo "manca gcc (es: sudo apt install build-essential)"; exit 1; }
|
||||
echo " gcc: $(gcc -dumpversion) · $(nproc) core"
|
||||
echo -n " OpenMP: "; echo 'int main(){return 0;}' | gcc -fopenmp -xc - -o /tmp/_omp 2>/dev/null && echo ok || { echo "manca (libgomp)"; exit 1; }
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# 2) build: nativa (veloce, per QUESTA macchina). Per un binario da distribuire: make portable
|
||||
echo " compilo (ARCH=${ARCH:-native})…"
|
||||
@@ -31,11 +41,18 @@ if [ -d glm_tiny ] && [ -f ref_glm.json ]; then
|
||||
fi
|
||||
|
||||
# 4) info macchina (la velocità dipende da QUESTI due numeri, non dalla GPU)
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
case "$UNAME_S" in
|
||||
Darwin)
|
||||
ram=$(( $(sysctl -n hw.memsize) / 1000000000 ))
|
||||
else
|
||||
;;
|
||||
MINGW*|MSYS*)
|
||||
# MSYS2 fornisce /proc/meminfo come symlink (più affidabile di wmic, deprecato)
|
||||
ram=$(awk '/MemTotal/{printf "%.0f", $2/1e6}' /proc/meminfo 2>/dev/null || echo "?")
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
ram=$(awk '/MemTotal/{printf "%.0f", $2/1e6}' /proc/meminfo 2>/dev/null || echo "?")
|
||||
;;
|
||||
esac
|
||||
echo " RAM: ${ram} GB (più RAM = più expert in cache = più veloce)"
|
||||
echo
|
||||
echo "pronto. Prossimi passi:"
|
||||
|
||||
Reference in New Issue
Block a user