"Création de 7-zip (19.00) pour Windows 10 sur ARM avec Visual Studio 2019 (x86) sur Windows 10 sur ARM Cette fois, j'ai essayé de construire Python3.
Je n'ai pas beaucoup d'expérience avec Python moi-même, mais je l'ai vu parfois utilisé comme script d'aide à la construction OSS, donc j'ai pensé qu'il serait utile de le rendre natif [ici]. ](Https://bugs.python.org/issue33125) J'ai vu un échange qui semblait être quelque chose que je pouvais faire, alors j'ai décidé de relever le défi.
Pour le moment, nous utiliserons cette fois la série 3.8, qui est la Stable actuelle. Bien qu'il existe des restrictions ridicules (décrites plus loin), j'ai pu construire rapidement avec le groupe de commande suivant.
git clone https://github.com/python/cpython -b 3.8
cd .\cpython\PCbuild
build.bat -p ARM64 -c Release
Il semble que NuGet installe divers modules externes sous . \ Cpython \ externals
lors de la construction de Python, mais certains modules externes ne sont pas inclus pour ARM64 et la construction est ignorée.
Parmi eux, je pensais que ce serait un peu solitaire que tkinter (TclTk), qui est un module d'interface graphique Python standard, ne puisse pas être utilisé, alors j'ai essayé de construire TclTk.
TclTk installé par NuGet au moment de cette build Python était la version 8.6.9, mais je pense que la build est un peu plus facile à passer [ici](https://www.tcl.tk/software/tcltk/ Téléchargez tcl8610-src.zip et tk8610-src.zip à partir du site download.html) et extrayez-les vers votre lieu de travail.
Il semble que le script ne le supporte pas, j'ai donc spécifié ARM64 de force cette fois.
Rules.vc
dans. \ Tcl8.6.10 \ win
Réglez ARM64 sur le paramètre MACHINE sur la ligne 473
MACHINE=$(ARCH)
→ MACHINE=ARM64
De plus, la fonction cpuid ressemble à un assembleur, je l'ai donc omise de force cette fois.
tclWin32Dll.c
dans. \ Tcl8.6.10 \ win
Commenter la ligne 820
__cpuid(regsPtr, index);
→ /*__cpuid(regsPtr, index);*/
S'il est développé normalement, lancez une fenêtre de commande aux emplacements des dossiers . \ Tcl8.6.10 \ win
et. \ Tk8.6.10 \ win
, respectivement.
Préparez l'environnement du jeu d'outils pour ARM64 comme d'habitude
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_arm64
Maintenant, commencez à construire!
Cependant, pour une raison quelconque, lors de la construction sur Windows 10 sur ARM, je me fâche que "TCLSH_NATIVE n'est pas défini", donc pour le moment, j'ai spécifié la version x86 de TclTk installée par NuGet lors de la construction de python. ..
nmake -f makefile.vc release OPTS=threads TCLSH_NATIVE="work\cpython\externals\tcltk-8.6.9.0\win32\bin\tclsh86t.exe"
Fondamentalement, la construction a passé avec la commande ci-dessus, mais lors de la compilation du module sqlite de la construction côté Tcl, il y a eu un saut en raison d'une erreur liée au compilateur de ressources comme indiqué ci-dessous.
.\tcl8.6.10\pkgs\sqlite3.30.1.2\win\Release_ARM64_VC1926\sqlite_ThreadedDynamic\sqlite.rc(4) : error RC2167 : unrecognized VERSIONINFO field; BEGIN or comma expected
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86\rc.EXE"' :Code de retour'0x2'
Stop.
Je pensais que cela n'affecterait pas tkinter, alors j'ai traversé cette période. ^^; À l'avenir, j'étudierai la gestion du compilateur de ressources lors de la construction pour ARM64, même si j'en ai envie.
Pour le moment, je me fiche de la différence entre les numéros de version et je suis coincé dans le dossier arm64 de TclTk, qui a été installé avec NuGet lors de la construction de Python.
nmake -f makefile.vc install INSTALLDIR="work\cpython\externals\tcltk-8.6.9.0\arm64" TCLSH_NATIVE="work\cpython\externals\tcltk-8.6.9.0\win32\bin\tclsh86t.exe"
Maintenant que TclTk est prêt, je vais construire tkinter (reconstruire Python), mais je n'étais pas sûr qu'il se reconfigurerait bien, donc cette fois c'est dans . \ Cpython \ PCbuild
. J'ai lancé l'IDE de Visual Studio à partir de pcbuild.sln` et l'ai reconstruit en ajoutant tkinter dans "Build Configuration" ici.
Je n'ai pas vérifié l'opération en détail, mais pour le moment, j'ai réussi à arriver au point où la fenêtre GUI de tkinter a été lancée.
N'est-ce pas là le goût unique d'une machine mineure dont l'environnement s'enrichit progressivement en se débattant? Cependant, nous espérons que la version officielle ARM64 sera distribuée dès que possible afin de gagner du terrain pour son utilisation généralisée.