PDA-Windows CE

Avec Windows RT et les Windowsphones, Microsoft a toujours voulu mettre un pied (avec beaucoup de retard) dans le monde de de la mobilité.

Même si ce fut le précurseur des smartphone avec Windows CE (PDA, appareil embarqué, Dreamcast).

Après de multiples échecs, il revient avec des ordinateurs portables à base d’ARM.

Seul bémol, même si l’ OS est là, l’écosystème est pas vraiment au point notamment les jeux.

VLC for all

VLC est un projet ouvert qui bouge au grès des envies et des moyens.

Il est disponible sur beaucoup de plateformes et d’architectures, avec une grande palette de codec pour la version de base.

Ce qui sous entend qu’il existe donc des projets qui sont basé sur ses sources mais destiné à un quelques choses de spécifique.

Pêle-mêle, il existe une version pour IOS, Android, TV, Windows Store, vous trouverez tout la liste sur le Git de VLC.

Certaines des versions ne sont pas disponible publiquement, il faudra donc les compiler.

Compiler une application Linux pour Windows.

Il existe 3 méthodes pour compiler une application sous Windows.

  • Les émulateurs comme Msys2 et Cygwin qui simule un environment Linux au prix de performance très mauvaise et d’un résultat aléatoire.
  • Les machines virtuels comme WSL et Oracle VM VirtualBox avec l’installation d’un distribution Linux en sup.
  • Et le compilateur maison de Microsoft, Visual Studio.

Dans tous les cas il faudra un gros CPU et 30 Go d’espace.

Les manipulations ci-dessous ont été effectué sous WSL2/Debian.

Chaine d’outils et compilateur crossé

On va aborder ici la création d’un toolchain et d’un compilateur croisé.

Pour compiler sur une autre architecture que celle native, il vous faut un compilateur croisé.

Le projet LLVM MinGW, vous proposera un script pour en créer un simplement.

Si vous êtes sous Virtualbox, penser a activer le partage des cœurs du CPU dans les paramètres de la machine virtuel.

Pour linux, j’ai utilise la liste des paquets listés plus loin pour VLC.

Packages

Pour Debian et Ubuntu 22.04 LT:

sudo apt-get install libtool automake autoconf autopoint make gettext pkg-config git subversion cmake cvs zip nsis bzip2 yasm ragel ant default-jdk dos2unix gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools gcc g++ python3 bison flex wget gperf curl python3-distutils clang p7zip-full

Ubuntu 24.04 LT ne prend plus en charge le paquet python3-distutils, il est utile pour la compilation des JAR de Libbluray .

Compilation LLVM & MinGW

Il n’existe pas de version de GCC qui prend en charge Windows ARM, la faute semble t’il, à un de ses composants Binutils.

Donc là, on utilise LLVM et MinGW, le premier un est compilateur de bas niveau et le second une suite d’outil pour compiler une application Windows sous Linux.

Il s’agit d’un toolchain clé en main.

GitHub – mstorsjo/llvm-mingw: An LLVM/Clang/LLD based mingw-w64 toolchain

Version 19.1.4

git clone --single-branch --branch 20241119 https://github.com/mstorsjo/llvm-mingw.git llvm-19.1.4-src

mkdir llvm-19.1.4 && cd llvm-19.1.4-src

./build-all.sh ../llvm-19.1.4/
./strip-llvm.sh ../llvm-19.1.4/

cd .. && rm -rf llvm-19.1.4-src

WSL2

Problème connu

  • La distribution Ubuntu 22.04 pose un problème dans la compilation de QT (VLC-3.0.x 32bits) sous Windows ARM.
  • Si vous rencontrez des erreurs type: fatal error: Killed signal terminated program cc1plus la Swap de WSL2 n’est pas activé . Pour résoudre le problème, il faut créer un fichier .wslconfig .
  • Sur la version ARM de WSL2, le manque de mémoire ne renvoie pas d’erreur, il ralenti et bloque la compilation avec toujours le CPU à 100%. Créer un fichier .wslconfig .

Fichier .wslconfig à mettre dans le répertoire C:\Users\[nom utilisateur]\ au format UTF-8.

[wsl2]
swap=24GB

Vous pouvez redémarrer WSL2 avec Wsl.exe –shutdown dans un invite de commande.

Build.sh & Configure.sh

Les deux fichiers sont situés dans “extras/package/win32/”

Build.sh

build.sh est le script de compilation général pour la version Windows

Si vous compilez la version UCRT, passez votre chemin.

Pour la version 32bits et 64 bits, il faudra supprimer :

if [ -n "$VLC_CPPFLAGS" ]; then
    printf '%s := %s\n' "CPPFLAGS" "${VLC_CPPFLAGS}" >&3
fi
if [ -n "$VLC_CFLAGS" ]; then
    printf '%s := %s\n' "CFLAGS" "${VLC_CFLAGS}" >&3
fi
if [ -n "$VLC_CXXFLAGS" ]; then
    printf '%s := %s\n' "CXXFLAGS" "${VLC_CXXFLAGS}" >&3
fi

Et :

if [ -n "$VLC_CPPFLAGS" ]; then
    export CPPFLAGS="$VLC_CPPFLAGS"
fi
if [ -n "$VLC_CFLAGS" ]; then
    export CFLAGS="$VLC_CFLAGS"
fi
if [ -n "$VLC_CXXFLAGS" ]; then
    export CXXFLAGS="$VLC_CXXFLAGS"
fi

Configure.sh

Ce fichier configure les options lié au spécifié la plateforme visée, là Windows, il intègre quelques optimisations supplémentaire.

Si vous visez une compilation pour Windows ARM, il faut modifier quelques options du fichier.

--enable-sse & --enable-mmx

Il peuvent être supprimés, elles font référence à des jeux d’instructions x86.

Vous pouvez rajoutez:

--enable-neon

Dépôts GIT

Une fois vous environnent installer, Il faudra télécharger le projet via la commande Git

Pour télécharger la version de développement “4.0” :

git clone --single-branch --branch master https://code.videolan.org/videolan/vlc.git vlc-4.x

Pour télécharger la version de développement de la branche 3.0.x :

git clone --single-branch --branch 3.0.x https://code.videolan.org/videolan/vlc.git vlc-3.x

Exemple avec une version stable de la branche 3.0.x

git clone --single-branch --branch 3.0.17.4 https://code.videolan.org/videolan/vlc.git vlc-3.0.17.4

Mise à jour

Pour mettre à jour les dépôts GIT, entrer dans le répertoire et taper :

cd vlc-3.x
git pull

Compilation via le script

Maintenant, il reste à déclarer compilateur compiler plus haut, adapter le chemin du path en fonction de la location de celui-ci.

export PATH=$HOME/llvm-13.0/:$HOME/llvm-13.0/bin/:$PATH

Créer un répertoire de compilation avec la commande “mkdir” , par exemple:

mkdir -p vlc-3.x/build/

Puis y accéder ave la commande “cd”, par exemple:

cd vlc-3.x/build/

De là, il suffi de lancer le script de compilation.

sh ../extras/package/win32/build.sh "options"

Ci-dessous vous trouverez la liste des options du script:

OPTIONS:
-h Show some help
-r Release mode (default is debug)
-a Use the specified arch (default: x86_64, possible i686, aarch64, armv7)
-p Use a Prebuilt contrib package (speeds up compilation)
-c Create a Prebuilt contrib package (rarely used)
-l Enable translations (can be slow)
-i Create an Installer (n: nightly, r: release, u: unsigned release archive)
-s Interactive shell (get correct environment variables for build)
-b Enable breakpad support and send crash reports to this URL
-d Create PDB files during the build
-D Create PDB files during the build, map the VLC sources to
e.g.: -D c:/sources/vlc
-x Add extra checks when compiling
-u Use the Universal C Runtime (instead of msvcrt)
-w Restrict to Windows Store APIs
-z Build without GUI (libvlc only)
-o Install the built binaries in the absolute path

Donc

sh ../extras/package/win32/build.sh -a armv7 -r

Vous pouvez lancer la compilation du projet (et croiser les doigts ).

Vous trouverez un archive 7zip et Zip.

Vous pourrez compiler un installateur sur Arm32 (armv7).

“A la main”

Comme pour le script il est possible de sélectionner une architecture armv7 (Windows RT et Windows 11 ARM 64) ou aarch64 (uniquement Windows 11 ARM 64).

C’est la même méthode pour Windows 64 Intel ou AMD.

Dans cette exemple sera utilisé armv7/winarm32 avec l’argument “armv7-w64-mingw32, pour la version 64 bits il suffit d’utiliser l’argument “aarch64-w64-mingw32”.

Compilation des outils manquants

cd vlc-4.x/extras/tools/
./bootstrap
make
cd ../..

Compilation de librairies tierces

mkdir -p contrib/build && cd contrib/build 
export PATH=$HOME/llvm-13.0/:$HOME/llvm-13.0/bin/:$PATH 
../bootstrap --host=armv7-w64-mingw32 
make fetch
make -j8 #nombre de CPU
cd ../..

Compilation de VLC

export PATH=$HOME/llvm-13.0/:$HOME/llvm-13.0/bin/:$PATH
export PKG_CONFIG_LIBDIR=$HOME/vlc-4.x/contrib/armv7-w64-mingw32/lib/pkgconfig
export PATH=$HOME/vlc-4.x/extras/tools/build/bin/:$PATH
./bootstrap
mkdir build && cd build
../configure --host=armv7-w64-mingw32
make

Pour créer un archive:

make package-win32-7zip 

Pour créer un installateur:

make package-win32

Version UCRT

Cette version utilise Universal C Runtime intégré depuis Windows 10, donc incompatible avec les versions ultérieur de Windows.

Les bibliothèques tiers se compilent avec LLVM version 13 et VLC avec LLVM version14.

En utilisant la commande suivant:
sh ../extras/package/win32/build.sh -a aarch64 -x -u -S 0x0A000006 -i n

Mise à jour VLC 3.0.x (Flux RSS)

Mise à jour VLC 4.0.x (Flux RSS)

Crédit et liens

Téléchargement

Le premier lancement de VLC peut être très long, c’est lié à l’antivirus intégré à Windows.

Stable: VLC 3.0.21-1Développement: VLC 3.0.21+
32bitsInstallateur (7zip)
Portable (7zip)
Installateur (7zip)
Portable (7zip)
64bitsInstallateur (7zip)
Portable (7zip)
Installateur (7zip)
Portable (7zip)
64bits UCRT
(Windows 10+)
Installateur (7zip)
Portable (7zip)
Installateur (7zip)
Portable (7zip)

VLC 4.0 (dev) 64bits

Un dépôt officiel est disponible pour la version 4.0:

Index of /vlc/nightly-win64-arm-llvm/ (videolan.org)

Commentaires

  1. Pingback: Les logiciels compatibles Windows ARM – Rwan – Blog & autres.

  2. Pingback: ScummVM pour Windows ARM – Rwan – Blog & autres.

  3. jpp

    sur mon X elite, j’ai tout simplement installé msys2 et fait pacman -S mingw-w64-clang-aarch64-vlc . Ca a marché nicker j’ai vlc 3 en natif arm64.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *