
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
- VLC
- VirtualBox
- LLVM MinGW
- WSL (Sous-système Linux sur Windows)
- doc/BUILD-win32.md · master · VideoLAN / VLC · GitLab
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-1 | Développement: VLC 3.0.21+ | |
32bits | Installateur (7zip) Portable (7zip) | Installateur (7zip) Portable (7zip) |
64bits | Installateur (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:
Pingback: Les logiciels compatibles Windows ARM – Rwan – Blog & autres.
Pingback: ScummVM pour Windows ARM – Rwan – Blog & autres.
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.