#536 Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio / WDK

Open
opened 1 month ago by steffen23 · 3 comments

Dieses Issue ist eine Anleitung, um Neo ohne Visual Studio, alleine mit dem MKLC, zu kompilieren.

Der Microsoft Keyboard Layout Creator (MKLC) 1.4, hier frei verfügbar, ermöglicht es, Keyboard Layouts per GUI zu erzeugen. Für Neo ist er leider nicht geeignet, da einige Tasten nicht geändert werden können, u.a. CapsLock.

Installation

Allerdings basiert der MKLC intern auch auf dem Windows Driver Kit. Nach seiner Installation finden sich (fast?) alle benötigten Header und Libraries unter C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4. Auch alle benötigten Binaries rc.exe, cl.exe und link.exe sind in der Installation enthalten. Die Installation ist sehr kompakt, nur 25MB.

MKLC ruft den Compiler intern auf, es gibt auch ein Kommandozeilentool, das die für Neo unzureichenden .klc Dateien zu DLLs kompiliert:

kbdutool.exe -u -x my_layout.klc

In diesem Blog wird beschrieben, wie man die korrekten Kommandos extrahieren kann: https://levicki.net/articles/2006/09/29/HOWTO_Build_keyboard_layouts_for_Windows_x64.php

Für ein Arabisches Layout hat sich PromyLOph die Mühe gemacht, ein Makefile zu erstellen 4679f89e8f/README.rst

Das Makefile ist nicht direkt im Code enthalten, man muss erst ninja ausführen:

./gen.sh > build.ninja && ninja ninja _build/_temp/winkbd/customization.h ninja _build/report/ar-lulua-w64.zip

Die Kommandos funktionieren nicht zu 100%, da einige Dateien wie im Blog beschrieben fehlen, aber danach findet sich die Datei make.bat im Ordner _build/_temp/winkbd/. Um Euch die Arbeit zu ersparen, habe ich make.bat angefügt. Es müssen nur die Dateinamen angepasst werden, kbdneo2 statt kbdarlulua und kbdneo2.XYZ statt keyboard.XYZ.

make.bat benutzt den Compiler, der mit MKLC mitgeliefert wird.

Treiber kompilieren

Um den Windows 10 Treiber zu kompilieren sind die folgenden Schritte nötig:

  1. Installiere MKLC von https://www.microsoft.com/en-us/download/details.aspx?id=22339
  2. git clone https://git.neo-layout.org/neo/neo-layout/ in Arbeitsverzeichnis
  3. cd neo-layout\windows\kbdneo2\Quelldateien
  4. Kopiere angefügte Datei make.bat nach Quelldateien
  5. Überprüfe, daß der Pfad in make.bat für MKLC korrekt ist: SET MSKLC="C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4"
  6. #include <dontuse.h> in kbdneo2.c auskommentieren
  7. Fehlende Headerdateien nach Quelldateien entpacken. Die Dateien kommen ursprünglich von mingw64. Wer einen Kompiler installiert hat, kann stattdessen den entsprechenden Pfad setzen.
  8. make.bat ausführen. Der Treiber kbdneo2.dll ist danach im Ordner system32 zu finden.
  9. Den Treiber nach %windir%/system32 kopieren.
  10. Einen Registrierungseintrag anpassen. Der Einfachheit den für Dvorak unter Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409\Layout file auf kbdneo2.dll ändern.
  11. Test: MKLC aufrufen. File|Load Existing Keyboard. Wenn der Treiber nicht auf der Liste erscheint, dann stimmt etwas nicht.
  12. Installation im System: Hier hat sich leider einiges in der Systemsteuerung geändert und die klassischen Menüs im Control Panel gibt es nicht mehr. Auf meinem System ist dies unter „Language Preferences“, „Preferred Language“, „Options“, „Add a Keyboard“.

Ich bekomme bei Schritt 8 jetzt eine Warnung, die vorher nur bei der 32-Bit-Variante aufgetreten ist. Der Treiber scheint aber trotzdem zu funktionieren.

“C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4”\bin\i386\link.exe -nologo -base:0x5FFE0000 -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:AMD64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -subsystem:native,5.2 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -debugtype:cv,fixup -debug -osversion:5.2 -version:5.2 /release -def:kbdneo2.def -out:system32\kbdneo2.dll kbdneo2.res kbdneo2.obj || exit /b

Creating library system32\kbdneo2.lib and object system32\kbdneo2.exp LINK : warning LNK4254: section ‘.edata’ (40000040) merged into ‘.data’ (C0000040) with different attributes LINK : warning LNK4254: section ‘.rdata’ (40000040) merged into ‘.data’ (C0000040) with different attributes LINK : warning LNK4254: section ‘.text’ (60000020) merged into ‘.data’ (C0000040) with different attributes LINK : warning LNK4254: section ‘.bss’ (C0000080) merged into ‘.data’ (C0000040) with different attributes LINK : warning LNK4253: section ‘.rdata’ not merged into ‘.text’; already merged into ‘.data’

Dieses Issue ist eine Anleitung, um Neo ohne Visual Studio, alleine mit dem MKLC, zu kompilieren. Der Microsoft Keyboard Layout Creator (MKLC) 1.4, [hier frei verfügbar](https://www.microsoft.com/en-us/download/details.aspx?id=22339), ermöglicht es, Keyboard Layouts per GUI zu erzeugen. Für Neo ist er leider nicht geeignet, da einige Tasten nicht geändert werden können, u.a. CapsLock. ## Installation Allerdings basiert der MKLC intern auch auf dem Windows Driver Kit. Nach seiner Installation finden sich (fast?) alle benötigten Header und Libraries unter `C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4`. Auch alle benötigten Binaries `rc.exe`, `cl.exe` und `link.exe` sind in der Installation enthalten. Die Installation ist sehr kompakt, nur 25MB. MKLC ruft den Compiler intern auf, es gibt auch ein Kommandozeilentool, das die für Neo unzureichenden .klc Dateien zu DLLs kompiliert: ``` kbdutool.exe -u -x my_layout.klc ``` In diesem Blog wird beschrieben, wie man die korrekten Kommandos extrahieren kann: https://levicki.net/articles/2006/09/29/HOWTO_Build_keyboard_layouts_for_Windows_x64.php Für ein Arabisches Layout hat sich PromyLOph die Mühe gemacht, ein Makefile zu erstellen 4679f89e8f/README.rst Das Makefile ist nicht direkt im Code enthalten, man muss erst ninja ausführen: ``` ./gen.sh > build.ninja && ninja ninja _build/_temp/winkbd/customization.h ninja _build/report/ar-lulua-w64.zip ``` Die Kommandos funktionieren nicht zu 100%, da einige Dateien wie im Blog beschrieben fehlen, aber danach findet sich die Datei make.bat im Ordner `_build/_temp/winkbd/`. Um Euch die Arbeit zu ersparen, habe ich make.bat angefügt. Es müssen nur die Dateinamen angepasst werden, kbdneo2 statt kbdarlulua und kbdneo2.XYZ statt keyboard.XYZ. `make.bat` benutzt den Compiler, der mit MKLC mitgeliefert wird. ## Treiber kompilieren Um den Windows 10 Treiber zu kompilieren sind die folgenden Schritte nötig: 1. Installiere MKLC von https://www.microsoft.com/en-us/download/details.aspx?id=22339 2. `git clone https://git.neo-layout.org/neo/neo-layout/` in Arbeitsverzeichnis 3. `cd neo-layout\windows\kbdneo2\Quelldateien` 4. Kopiere angefügte Datei make.bat nach Quelldateien 5. Überprüfe, daß der Pfad in make.bat für MKLC korrekt ist: `SET MSKLC="C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4"` 6. `#include <dontuse.h>` in kbdneo2.c auskommentieren 7. Fehlende Headerdateien nach Quelldateien entpacken. Die Dateien kommen ursprünglich von mingw64. Wer einen Kompiler installiert hat, kann stattdessen den entsprechenden Pfad setzen. 8. make.bat ausführen. Der Treiber kbdneo2.dll ist danach im Ordner system32 zu finden. 9. Den Treiber nach `%windir%/system32` kopieren. 10. Einen Registrierungseintrag anpassen. Der Einfachheit den für Dvorak unter `Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409\Layout file` auf kbdneo2.dll ändern. 11. Test: MKLC aufrufen. File|Load Existing Keyboard. Wenn der Treiber nicht auf der Liste erscheint, dann stimmt etwas nicht. 12. **Installation im System:** Hier hat sich leider einiges in der Systemsteuerung geändert und die klassischen Menüs im Control Panel gibt es nicht mehr. Auf meinem System ist dies unter „Language Preferences“, „Preferred Language“, „Options“, „Add a Keyboard“. Ich bekomme bei Schritt 8 jetzt eine Warnung, die vorher nur bei der 32-Bit-Variante aufgetreten ist. Der Treiber scheint aber trotzdem zu funktionieren. > "C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4"\bin\i386\link.exe -nologo -base:0x5FFE0000 -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -MACHINE:AMD64 -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4039,4078 -noentry -dll -subsystem:native,5.2 -merge:.rdata=.text -PDBPATH:NONE -STACK:0x40000,0x1000 /opt:nowin98 -debugtype:cv,fixup -debug -osversion:5.2 -version:5.2 /release -def:kbdneo2.def -out:system32\kbdneo2.dll kbdneo2.res kbdneo2.obj || exit /b > > Creating library system32\kbdneo2.lib and object system32\kbdneo2.exp > LINK : warning LNK4254: section '.edata' (40000040) merged into '.data' (C0000040) with different attributes > LINK : warning LNK4254: section '.rdata' (40000040) merged into '.data' (C0000040) with different attributes > LINK : warning LNK4254: section '.text' (60000020) merged into '.data' (C0000040) with different attributes > LINK : warning LNK4254: section '.bss' (C0000080) merged into '.data' (C0000040) with different attributes > LINK : warning LNK4253: section '.rdata' not merged into '.text'; already merged into '.data'
qwertfisch added the
Treiber/Windows/kbdneo
label 1 month ago
qwertfisch changed title from Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio DDK (nur zur Info) to Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio / WDK 1 month ago
mi-skam commented 1 month ago

Hi,

einiges in der Anleitung war nicht ganz so wie in meinem Ordner.

  1. statt cd neo-layout\windows\kbdneo2\Quelldateien habe ich folgende Ordnerstruktur cd windows\kbdneo2\source\kbdneo2 (Punkt 3)
  2. #include <dontuse.h> wird in kbdneo.h nicht in kbdneo.c referenziert (Punkt 6)
  3. Den Treiber habe ich neben windows\system32 auch noch in den Ordner für 32-Bit-Anwendungen windows\SysWOW64 kopiert
Hi, einiges in der Anleitung war nicht ganz so wie in meinem Ordner. 1. statt `cd neo-layout\windows\kbdneo2\Quelldateien` habe ich folgende Ordnerstruktur `cd windows\kbdneo2\source\kbdneo2` (Punkt 3) 2. `#include <dontuse.h>` wird in `kbdneo.h` nicht in `kbdneo.c` referenziert (Punkt 6) 3. Den Treiber habe ich neben `windows\system32` auch noch in den Ordner für 32-Bit-Anwendungen `windows\SysWOW64` kopiert
qwertfisch commented 1 month ago
Owner

Danke für die Hinweise.

Die Anleitung bezog sich auf den Quellcode der früheren Version. Verzeichnisnamen habe ich angepasst mit dem neuen Projekt. Der Quellcode ist aber (erstmal) identisch.

Danke für die Hinweise. Die Anleitung bezog sich auf den Quellcode der [früheren Version](https://git.neo-layout.org/neo/neo-layout/src/branch/master/windows/kbdneo2/legacy_source). Verzeichnisnamen habe ich angepasst mit dem neuen Projekt. Der Quellcode ist aber (erstmal) identisch.
qwertfisch commented 3 weeks ago
Owner

In Commit d3a8e148 habe ich eine Möglichkeit bereitgestellt, kbdneo/kbdbone/kbdqwertz zu kompilieren, ohne ein Visual Studio oder das Windows Driver Kit installieren zu müssen. Dafür sind entsprechende Buildskripte hinzugekommen.

Benötigt werden dabei nur noch das normale Windows SDK sowie die Visual Studio Build Tools (deutlich kleiner). Die Beschreibung steht in der README im Abschnitt „Manueller Build“.

In Commit d3a8e148 habe ich eine Möglichkeit bereitgestellt, kbdneo/kbdbone/kbdqwertz zu kompilieren, ohne ein Visual Studio oder das Windows Driver Kit installieren zu müssen. Dafür sind entsprechende Buildskripte hinzugekommen. Benötigt werden dabei nur noch das normale Windows SDK sowie die Visual Studio Build Tools (deutlich kleiner). Die Beschreibung steht in der [README](src/branch/master/windows/kbdneo2/) im Abschnitt „Manueller Build“.
Sign in to join this conversation.
Loading…
Cancel
Save
There is no content yet.