Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio / WDK #536
Labels
Geen label
(╯°□°)╯︵ ┻━┻
Bug
Diskussion
Dokumentation
Duplikat
Gitea
Hardware
Hilfe
Invalid
Java
Lernen
Qt
Remote
Subversion
Tablet
Tastaturbelegung
Test
Treiber/Android
Treiber/iOS
Treiber/Linux/Konsole
Treiber/Linux/xkbmap
Treiber/Linux/xmodmap
Treiber/MacOS
Treiber/Windows/AHK
Treiber/Windows/kbdneo
Treiber/Windows/ReNeo
Verbesserung
Website
Windows 11
Wontfix
Worksforme
Geen mijlpaal
Niet toegewezen
4 deelnemers
Notificaties
Vervaldatum
Geen vervaldatum ingesteld.
Afhankelijkheden
Geen afhankelijkheden ingesteld.
Referentie: neo/neo-layout#536
Laden…
Verwijs in nieuw issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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 Binariesrc.exe
,cl.exe
undlink.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:
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:
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:
git clone https://git.neo-layout.org/neo/neo-layout/
in Arbeitsverzeichniscd neo-layout\windows\kbdneo2\Quelldateien
SET MSKLC="C:\Program Files (x86)\Microsoft Keyboard Layout Creator 1.4"
#include <dontuse.h>
in kbdneo2.c auskommentieren%windir%/system32
kopieren.Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409\Layout file
auf kbdneo2.dll ändern.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.
Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio DDK (nur zur Info)naar Alternative Kompilationsmöglichkeit unter Windows ohne Visual Studio / WDKHi,
einiges in der Anleitung war nicht ganz so wie in meinem Ordner.
cd neo-layout\windows\kbdneo2\Quelldateien
habe ich folgende Ordnerstrukturcd windows\kbdneo2\source\kbdneo2
(Punkt 3)#include <dontuse.h>
wird inkbdneo.h
nicht inkbdneo.c
referenziert (Punkt 6)windows\system32
auch noch in den Ordner für 32-Bit-Anwendungenwindows\SysWOW64
kopiertDanke 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.
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“.
Ich bin Autor des oben genannten arabischen Layouts und selber auch Neo2-Nutzer. Ursprünglich war meine Hoffnung die DLL für Windows unter Linux mit dem GCC cross-compilieren zu können, wodurch ich den gesamten Prozess hätte automatisieren können. Aber a) fehlen die Header und b) kenne ich leider die benötigten Compileroptionen nicht – Windows ist da sehr wählerisch und akzeptiert nicht jede beliebige DLL. a) könnte man durch Kopieren der MSKLC-Header lösen (mit Anpassungen). Wenn jemand für b) eine Lösung hat, dann wäre ich sehr interessiert.
Hast Du den Beitrag über dir gelesen? Ich hatte ein bisschen mit den Buildoptionen vom Visual Studio experimentiert und bin schließlich, ausgehend von den Standardoptionen, auf eine funktionierende Konfiguration gekommen. Notwendig für die Kompilierung sind nun ausschließlich der Compiler, der Resource Compiler und der Linker, die sich in den Visual Studio Build Tools befinden. Siehe auch hier (Variante 2) sowie im unterliegenden build/-Ordner.
Ob man das auch unter Linux bauen kann, ist fraglich. Es werden einige Libraries und Headerdateien aus dem Windows 10 SDK benötigt (siehe Buildskript). Eventuell kannst Du die von einer Windows-Installation rüberkopieren. Problem (b) wiederum sollte nun durch die Kommandos nachvollziehbar sein, wobei ich nicht alle explizit identifiziert habe. Da müsstest Du ggf. die Dokumentation dazu bemühen. Die meisten Optionen sind eben VS-Standard, nur entsprechend angepasst, dass eine schlanke DLL herauskommt.
Sinnvoll wäre es wohl, den GCC (und das SDK) auf Windows zu installieren und damit zu experimentieren, bis das Ergebnis übereinstimmt.
Der einzige benötigte Header ist eine abgespeckte Variante von
kbd.h
, Bibliotheken überhaupt keine (sind ja nur Daten), ein paar Compileroptionen und ein Linkerskript. Ich habe es jetzt mit der Hilfe von ReactOS implementiert:1b6e5b491a
Inspiration war: https://github.com/reactos/reactos/blob/master/dll/keyboard/CMakeLists.txt
Schön, dass es bereits auf anderem Wege funktioniert hat.