Skip to content

FR 03 Build Compilation

Captain FLAM edited this page Aug 27, 2026 · 1 revision

🛠️ Process de build

💻 Environnement local (générique - réutilisable sur toute machine Windows sans gcc)

Cette machine n'a pas de gcc/MinGW utilisable (le /mingw64/bin présent dans le PATH de Git Bash appartient au runtime embarqué de GitHub Desktop, pas à un vrai toolchain). Le compilateur disponible est MSVC, via Visual Studio Community 18 :

C:\Program Files\Microsoft Visual Studio\18\Community

🅰️ Option A - build rapide en ligne de commande avec cl.exe

Utile pour un test ponctuel hors solution VS (ex. compiler un .c isolé) :

cmd /c "call `"C:\Program Files\Microsoft Visual Studio\18\Community\VC\Auxiliary\Build\vcvars64.bat`" && cd /d `"<dossier>`" && cl fichier1.c fichier2.c /Fe:sortie.exe /nologo user32.lib"
  • vcvars64.bat initialise l'environnement (INCLUDE/LIB/PATH) pour cl.exe.
  • ℹ️ Un message vswhere.exe n'est pas reconnu pendant vcvarsall.bat est du bruit inoffensif - l'environnement s'initialise correctement quand même.
  • cl.exe génère des .obj intermédiaires à côté des sources : à supprimer une fois le .exe obtenu si on ne les veut pas dans le dossier.
  • Si le code utilise l'API Registre Windows (RegOpenKeyExA, RegCreateKeyExA, etc.), ajouter advapi32.lib en plus de user32.lib :
cl CopilotKey.c /Fe:CopilotKey+.exe /nologo user32.lib advapi32.lib

🅱️ Option B - build via la solution/MSBuild (✅ préféré pour ce projet)

Le projet a maintenant CopilotKey+.sln / Sources\CopilotKey.vcxproj : préférer MSBuild directement plutôt que cl.exe brut, car il applique automatiquement le niveau de warnings, les defines (LOG en Debug) et les dossiers de sortie du projet :

& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe" "d:\GitHub\Copilot Key+\CopilotKey+.sln" /p:Configuration=Debug /p:Platform=x64 /m
& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe" "d:\GitHub\Copilot Key+\CopilotKey+.sln" /p:Configuration=Release /p:Platform=x64 /m
  • 🐞 Debug : LOG défini → console + sortie DEBUG_LOG. Sortie : bin\Debug\Copilot_Key+.exe.
  • 🚀 Release : pas de console/log. Sortie à la racine de la solution : Copilot_Key+.exe - c'est ce binaire qui est installé/lancé en résident via -config.
  • 🔁 Après un rebuild Release, il faut -quit puis relancer l'instance résidente pour que le correctif prenne effet (Windows garde l'ancien code chargé en mémoire sinon).

🅲️ Option C - build avec GCC (MinGW-w64, sur une machine qui en dispose)

⚠️ Cette machine n'a pas de gcc/MinGW utilisable (voir 🧯 04-Pieges-Environnement.md) - cette option est documentée pour être réutilisable ailleurs, pas testée ici.

CopilotKey.c est du C Win32 pur (pas de spécificité MSVC dans le code), mais il utilise les fonctions "sécurisées" du CRT (strncpy_s, strtok_s, sprintf_s, strcat_s, freopen_s) : il faut donc un MinGW-w64 basé sur UCRT (ex. environnement UCRT64 de MSYS2, ou build WinLibs UCRT) - un toolchain MinGW-w64/MSVCRT classique (TDM-GCC, environnement MINGW64 de MSYS2) échouera à l'édition de liens (symboles _s introuvables).

# 1) Compiler la ressource (icône, version info, LANGUAGE)
windres Resources\CopilotKey.rc -O coff -o CopilotKey_res.o

# 2) Compiler + lier (ANSI/MultiByte comme le .vcxproj - ne pas définir UNICODE)
gcc Sources\CopilotKey.c CopilotKey_res.o -o "Copilot_Key+.exe" -O2 -DNDEBUG -mwindows -luser32 -ladvapi32 -lhid
  • -mwindows : équivalent du SubSystem=Windows du projet MSVC (pas de console attachée par défaut - le programme en alloue une lui-même dans -config).
  • Libs à lier : user32, advapi32 (registre), hid (HidD_/HidP_ pour le chemin HID Consumer) - mêmes dépendances que AdditionalDependencies dans Sources\CopilotKey.vcxproj.
  • Pas d'équivalent testé au binaire bin\Debug\... avec LOG défini : ajouter -DLOG et retirer -mwindows (ou garder une console via -mconsole) pour un build "debug" avec logs, par analogie avec la config Debug MSVC.

📦 Générer l'installeur - make-install.bat

Script autonome à la racine du dépôt (à double-cliquer ou lancer depuis un terminal), séparé du build du .exe lui-même :

make-install.bat
  • Nécessite NSIS installé (makensis.exe) ; le script cherche %ProgramFiles(x86)%\NSIS\Bin, puis retombe sur %ProgramFiles%\NSIS\Bin.
  • Compile le script Resources\Install.nsi avec makensis /V3 /PAUSE (/PAUSE laisse la fenêtre ouverte à la fin pour lire le résultat).
  • Suppose que Copilot_Key+.exe (build Release) existe déjà à la racine du dépôt - il faut donc avoir fait l'Option B ci-dessus avant.
  • Sortie : dist\Copilot Key+ - Install.exe.
  • Utilisé tel quel par la CI (.github/workflows/build-and-sign.yml, étape "Build installer") après le build Release et l'installation de NSIS via winget.

Clone this wiki locally