
Windows CE Builds im Docker Container
« | 08 Sep 2024 | »Bisher waren für meine Windows CE Experimente immer eine Windows-XP VM mit Visual Studio 2005 notwendig, wo ich per Build-Script einen elend langen Build-Prozess anstarten musste.
Doch neulich fand ich eine GCC Variante, die WinCE-Binaries bauen konnte, und zwar im Linux Docker Container.
Im Github Account enlyze befindet sich still
und heimlich die Lösung all meiner Windows-CE Probleme.
Nämlich ein Linux Docker Image
mit einer speziellen GCC Variante, die Windows-CE Binaries bauen kann.
Ich habe mir hierfür das Image angepasst und als neues Build-Tag
in mein OpenGATE Repository aufgenommen:
hub.docker.com/r/opendockergate/gate-build-env/tags
deb.12.cegcc.arm.9.3.1
Dem Image wurde nur git
, cmake
, nodejs
und ein paar Zusatztools
hinzugefügt, die zum Bauen unter Forgejo
notwendig sind.
Für CMake
wurde dem GATE Projekt eine neue Toolchain-Datei hinzugefügt:
1set(CMAKE_SYSTEM_NAME "WindowsCE") 2set(CMAKE_SYSTEM_PROCESSOR "arm") 3set(TOOLCHAIN_PREFIX "arm-mingw32ce") 4 5set(CMAKE_C_COMPILER "${TOOLCHAIN_PREFIX}-gcc") 6set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PREFIX}-g++") 7 8set(CMAKE_CROSSCOMPILING TRUE) 9 10set(MINGW TRUE) 11set(CMAKE_FIND_ROOT_PATH "/opt/cegcc-arm" "/opt/cegcc-arm/arm-mingw32ce") 12set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 13set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 14set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Beim Bauen werden so die richtigen Compiler Tools im Docker Container gefunden.
Unterschiede zum MSVC
Tatsächlich brauchte es jede Menge Tests und Anpassungen am Sourcecode und am Buildsystem, bis die ersten Binaries erfolgreich gebaut werden konnten.
Unter MSVC
fehlen große Bestandteile der C-Standard-Bibliothek, welche
durch meine eigene Implementierung ersetzt wurden. Doch im GCC sind einige
dieser Funktionen oder Makros vorhanden, und so musste ich diese Spezialfälle
in meiner stdcpatches
Bibliothek anpassen.
Früher war ein if(WINCE)
gleichbedeutend mit einem if(MSVC)
, doch nun
gibt es die feine Unterscheidung:
Fazit
Am Ende gelang das Experiment und ab sofort erzeugt jeder Commit ins Codeberg GATE Repository auch einen GCC Windows CE Build.
Tatsächlich existier auch ein i386
Output, den ich aber nie testen konnte.
Den handelsüblichen ARM
Output habe ich jedoch auf meinen WinCE-Laptop
erfolgreich ausgeführt.
An dieser Stelle kann ich wieder nur betonen:
Es ist unglaublich, was wir heute mit Linux und dem GCC erreichen können.
Niemand hätte sich im Jahr 2000 vorstellen können, dass einmal sämtliche Windows Build von Linux-Maschinen kommen würden.
… am wenigsten Steve Ballmer.