diff options
author | Steve Dower <steve.dower@python.org> | 2022-02-28 12:06:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-28 12:06:43 +0000 |
commit | da7d99a4de72aac8d436cecedf16ab2676f9b785 (patch) | |
tree | 4cd872e18c9b1053147d9e50bed6cbe8cfe6a1b6 | |
parent | 424ecab494d538650ba34937cdd710094ccb2275 (diff) | |
download | cpython-git-da7d99a4de72aac8d436cecedf16ab2676f9b785.tar.gz |
bpo-46567: Add Tcl/Tk build for Windows ARM64 (GH-31574)
-rw-r--r-- | .azure-pipelines/tcltk-build.yml | 6 | ||||
-rw-r--r-- | .azure-pipelines/windows-release/msi-steps.yml | 11 | ||||
-rw-r--r-- | .azure-pipelines/windows-release/stage-build.yml | 13 | ||||
-rw-r--r-- | .azure-pipelines/windows-release/stage-layout-full.yml | 1 | ||||
-rw-r--r-- | .azure-pipelines/windows-release/stage-layout-msix.yml | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2022-02-25-01-22-31.bpo-46567.37WEue.rst | 2 | ||||
-rw-r--r-- | PCbuild/get_externals.bat | 6 | ||||
-rw-r--r-- | PCbuild/pcbuild.proj | 2 | ||||
-rw-r--r-- | PCbuild/prepare_tcltk.bat | 4 | ||||
-rw-r--r-- | PCbuild/tcl.vcxproj | 8 | ||||
-rw-r--r-- | PCbuild/tcltk.props | 5 | ||||
-rw-r--r-- | PCbuild/tix.vcxproj | 6 | ||||
-rw-r--r-- | PCbuild/tk.vcxproj | 8 | ||||
-rw-r--r-- | Tools/msi/bundle/Default.ARM64.xsl | 5 | ||||
-rw-r--r-- | Tools/msi/bundle/bundle.targets | 2 | ||||
-rw-r--r-- | Tools/msi/bundle/bundle.wxs | 7 |
16 files changed, 63 insertions, 24 deletions
diff --git a/.azure-pipelines/tcltk-build.yml b/.azure-pipelines/tcltk-build.yml index 27968e886c..f9e50d3711 100644 --- a/.azure-pipelines/tcltk-build.yml +++ b/.azure-pipelines/tcltk-build.yml @@ -60,6 +60,12 @@ jobs: & "$(msbuild)" PCbuild\tix.vcxproj "@msbuild.rsp" /p:Platform=x64 /p:tcltkDir="$(OutDir)\amd64" displayName: 'Build for amd64' + - powershell: | + & "$(msbuild)" PCbuild\tcl.vcxproj "@msbuild.rsp" /p:Platform=ARM64 /p:tcltkDir="$(OutDir)\arm64" + & "$(msbuild)" PCbuild\tk.vcxproj "@msbuild.rsp" /p:Platform=ARM64 /p:tcltkDir="$(OutDir)\arm64" + & "$(msbuild)" PCbuild\tix.vcxproj "@msbuild.rsp" /p:Platform=ARM64 /p:tcltkDir="$(OutDir)\arm64" + displayName: 'Build for arm64' + - publish: '$(OutDir)' artifact: 'tcltk' displayName: 'Publishing tcltk' diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml index ef98d56c78..3c08a0660a 100644 --- a/.azure-pipelines/windows-release/msi-steps.yml +++ b/.azure-pipelines/windows-release/msi-steps.yml @@ -71,6 +71,13 @@ steps: artifactName: tcltk_lib_amd64 targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64 + - task: DownloadPipelineArtifact@1 + displayName: 'Download artifact: tcltk_lib_arm64' + condition: and(succeeded(), eq(variables['PublishARM64'], 'true')) + inputs: + artifactName: tcltk_lib_arm64 + targetPath: $(Build.BinariesDirectory)\tcltk_lib_arm64 + - powershell: | copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force displayName: 'Copy signed files into sources' @@ -107,7 +114,6 @@ steps: PYTHONHOME: $(Build.SourcesDirectory) TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32 BuildForRelease: true - SuppressMinGWLib: true - script: | %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true @@ -120,7 +126,6 @@ steps: PYTHONHOME: $(Build.SourcesDirectory) TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64 BuildForRelease: true - SuppressMinGWLib: true - script: | %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true @@ -132,8 +137,8 @@ steps: PYTHON: $(Build.BinariesDirectory)\win32\python.exe PythonForBuild: $(Build.BinariesDirectory)\win32\python.exe PYTHONHOME: $(Build.SourcesDirectory) + TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_arm64 BuildForRelease: true - SuppressMinGWLib: true - task: CopyFiles@2 displayName: 'Assemble artifact: msi (win32)' diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml index f70414ba21..e45034f650 100644 --- a/.azure-pipelines/windows-release/stage-build.yml +++ b/.azure-pipelines/windows-release/stage-build.yml @@ -166,6 +166,13 @@ jobs: platform: x64 msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64" + - task: MSBuild@1 + displayName: 'Copy Tcl/Tk lib for publish' + inputs: + solution: PCbuild\tcltk.props + platform: ARM64 + msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_arm64" + - task: PublishPipelineArtifact@0 displayName: 'Publish artifact: tcltk_lib_win32' inputs: @@ -177,3 +184,9 @@ jobs: inputs: targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64' artifactName: tcltk_lib_amd64 + + - task: PublishPipelineArtifact@0 + displayName: 'Publish artifact: tcltk_lib_arm64' + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\tcl_arm64' + artifactName: tcltk_lib_arm64 diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml index 0ba2fc017d..3546df60e4 100644 --- a/.azure-pipelines/windows-release/stage-layout-full.yml +++ b/.azure-pipelines/windows-release/stage-layout-full.yml @@ -26,6 +26,7 @@ jobs: HostArch: amd64 Python: $(Build.BinariesDirectory)\bin_amd64\python.exe PYTHONHOME: $(Build.SourcesDirectory) + TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8 steps: - template: ./checkout.yml diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml index 6efd327bdb..913bfcd919 100644 --- a/.azure-pipelines/windows-release/stage-layout-msix.yml +++ b/.azure-pipelines/windows-release/stage-layout-msix.yml @@ -25,6 +25,7 @@ jobs: HostArch: amd64 Python: $(Build.BinariesDirectory)\bin_amd64\python.exe PYTHONHOME: $(Build.SourcesDirectory) + TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8 steps: - template: ./checkout.yml diff --git a/Misc/NEWS.d/next/Windows/2022-02-25-01-22-31.bpo-46567.37WEue.rst b/Misc/NEWS.d/next/Windows/2022-02-25-01-22-31.bpo-46567.37WEue.rst new file mode 100644 index 0000000000..10a2b764b7 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2022-02-25-01-22-31.bpo-46567.37WEue.rst @@ -0,0 +1,2 @@ +Adds Tcl and Tk support for Windows ARM64. This also adds IDLE to the +installation. diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 5b0fe640eb..d4e052ef32 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -55,8 +55,8 @@ set libraries=%libraries% bzip2-1.0.6 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.4.2 if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1m set libraries=%libraries% sqlite-3.37.2.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.12.0 -if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.12.0 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.12.1 +if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.12.1 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tix-8.4.3.6 set libraries=%libraries% xz-5.2.2 set libraries=%libraries% zlib-1.2.11 @@ -78,7 +78,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi-3.4.2 if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1m -if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.12.0 +if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.12.1 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 for %%b in (%binaries%) do ( diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj index f32422a0ac..2ba0627b83 100644 --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -73,7 +73,7 @@ <!-- _ssl will build _socket as well, which may cause conflicts in parallel builds --> <ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" /> <ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" /> - <ExternalModules Include="_tkinter" Condition="$(IncludeTkinter) and $(Platform) != 'ARM' and $(Platform) != 'ARM64'" /> + <ExternalModules Include="_tkinter" Condition="$(IncludeTkinter)" /> <ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" /> <Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" /> <!-- Test modules --> diff --git a/PCbuild/prepare_tcltk.bat b/PCbuild/prepare_tcltk.bat index 77075af94f..4a43ed1582 100644 --- a/PCbuild/prepare_tcltk.bat +++ b/PCbuild/prepare_tcltk.bat @@ -53,3 +53,7 @@ call "%PCBUILD%\get_externals.bat" --tkinter-src %ORG_SETTING% %MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Release /p:Platform=x64 %MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Release /p:Platform=x64 %MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Release /p:Platform=x64 + +%MSBUILD% "%PCBUILD%\tcl.vcxproj" /p:Configuration=Release /p:Platform=ARM64 +%MSBUILD% "%PCBUILD%\tk.vcxproj" /p:Configuration=Release /p:Platform=ARM64 +%MSBUILD% "%PCBUILD%\tix.vcxproj" /p:Configuration=Release /p:Platform=ARM64 diff --git a/PCbuild/tcl.vcxproj b/PCbuild/tcl.vcxproj index 4536cbc925..ab68db9210 100644 --- a/PCbuild/tcl.vcxproj +++ b/PCbuild/tcl.vcxproj @@ -33,6 +33,10 @@ <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM64"> + <Configuration>Release</Configuration> + <Platform>ARM64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{B5FD6F1D-129E-4BFF-9340-03606FAC7283}</ProjectGuid> @@ -59,8 +63,8 @@ <NMakeBuildCommandLine>setlocal set VCINSTALLDIR=$(VCInstallDir) cd /D "$(tclDir)win" -nmake -f makefile.vc MACHINE=$(TclMachine) OPTS=$(TclOpts) $(TclDirs) $(DebugFlags) $(WarningsFlags) core shell dlls -nmake -f makefile.vc MACHINE=$(TclMachine) OPTS=$(TclOpts) $(TclDirs) $(DebugFlags) $(WarningsFlags) install-binaries install-libraries +nmake -f makefile.vc MACHINE=$(TclMachine) OPTS=$(TclOpts) $(TclDirs) $(DebugFlags) $(WarningsFlags) TCLSH_NATIVE="$(tclWin32Exe)" core shell dlls +nmake -f makefile.vc MACHINE=$(TclMachine) OPTS=$(TclOpts) $(TclDirs) $(DebugFlags) $(WarningsFlags) TCLSH_NATIVE="$(tclWin32Exe)" install-binaries install-libraries copy /Y ..\license.terms "$(OutDir)\tcllicense.terms" </NMakeBuildCommandLine> </PropertyGroup> diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props index 72cffc3ea1..7fd43e8279 100644 --- a/PCbuild/tcltk.props +++ b/PCbuild/tcltk.props @@ -5,7 +5,7 @@ <TclMajorVersion>8</TclMajorVersion> <TclMinorVersion>6</TclMinorVersion> <TclPatchLevel>12</TclPatchLevel> - <TclRevision>0</TclRevision> + <TclRevision>1</TclRevision> <TkMajorVersion>$(TclMajorVersion)</TkMajorVersion> <TkMinorVersion>$(TclMinorVersion)</TkMinorVersion> <TkPatchLevel>$(TclPatchLevel)</TkPatchLevel> @@ -18,6 +18,9 @@ <tkDir>$(ExternalsDir)tk-$(TkMajorVersion).$(TkMinorVersion).$(TkPatchLevel).$(TkRevision)\</tkDir> <tixDir>$(ExternalsDir)tix-$(TixMajorVersion).$(TixMinorVersion).$(TixPatchLevel).$(TixRevision)\</tixDir> <tcltkDir>$(ExternalsDir)tcltk-$(TclMajorVersion).$(TclMinorVersion).$(TclPatchLevel).$(TclRevision)\$(ArchName)\</tcltkDir> + <tclWin32Exe Condition="$(Platform) == 'Win32'">$(tcltkDir)\bin\tclsh$(TclMajorVersion)$(TclMinorVersion)t.exe</tclWin32Exe> + <tclWin32Exe Condition="$(Platform) != 'Win32'">$(tcltkDir)\..\win32\bin\tclsh$(TclMajorVersion)$(TclMinorVersion)t.exe</tclWin32Exe> + <!--<TclDebugExt Condition="'$(Configuration)' == 'Debug'">g</TclDebugExt>--> <tclDLLName>tcl$(TclMajorVersion)$(TclMinorVersion)t$(TclDebugExt).dll</tclDLLName> <tclLibName>tcl$(TclMajorVersion)$(TclMinorVersion)t$(TclDebugExt).lib</tclLibName> diff --git a/PCbuild/tix.vcxproj b/PCbuild/tix.vcxproj index 51682094cb..48abcd27c8 100644 --- a/PCbuild/tix.vcxproj +++ b/PCbuild/tix.vcxproj @@ -33,6 +33,10 @@ <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM64"> + <Configuration>Release</Configuration> + <Platform>ARM64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{C5A3E7FB-9695-4B2E-960B-1D9F43F1E555}</ProjectGuid> @@ -53,7 +57,7 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <PropertyGroup> - <TixDirs>BUILDDIRTOP="$(BuildDirTop)" TCL_DIR="$(tclDir.TrimEnd(`\`))" TK_DIR="$(tkDir.TrimEnd(`\`))" INSTALL_DIR="$(OutDir.TrimEnd(`\`))"</TixDirs> + <TixDirs>BUILDDIRTOP="$(BuildDirTop)" TCL_DIR="$(tclDir.TrimEnd(`\`))" TK_DIR="$(tkDir.TrimEnd(`\`))" INSTALL_DIR="$(OutDir.TrimEnd(`\`))" TCLSH_EXE="$(tclWin32Exe)"</TixDirs> <DebugFlags Condition="'$(Configuration)' == 'Debug'">DEBUG=1 NODEBUG=0 TCL_DBGX=g TK_DBGX=g</DebugFlags> <DebugFlags Condition="'$(Configuration)' != 'Debug'">DEBUG=0 NODEBUG=1</DebugFlags> <CFlags>-c -W3 -nologo -MD -wd4028 -wd4090 -wd4244 -wd4267 -wd4312</CFlags> diff --git a/PCbuild/tk.vcxproj b/PCbuild/tk.vcxproj index 70b5459a08..b111969ca5 100644 --- a/PCbuild/tk.vcxproj +++ b/PCbuild/tk.vcxproj @@ -33,6 +33,10 @@ <Configuration>Release</Configuration> <Platform>x64</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM64"> + <Configuration>Release</Configuration> + <Platform>ARM64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{7E85ECCF-A72C-4DA4-9E52-884508E80BA1}</ProjectGuid> @@ -60,8 +64,8 @@ <NMakeBuildCommandLine>setlocal set VCINSTALLDIR=$(VCInstallDir) cd /D "$(tkDir)win" -nmake /nologo -f makefile.vc RC=rc MACHINE=$(TclMachine) OPTS=$(TkOpts) $(TkDirs) $(DebugFlags) $(WarningsFlags) all -nmake /nologo -f makefile.vc RC=rc MACHINE=$(TclMachine) OPTS=$(TkOpts) $(TkDirs) $(DebugFlags) $(WarningsFlags) install-binaries install-libraries +nmake /nologo -f makefile.vc RC=rc MACHINE=$(TclMachine) OPTS=$(TkOpts) $(TkDirs) $(DebugFlags) $(WarningsFlags) TCLSH_NATIVE="$(tclWin32Exe)" all +nmake /nologo -f makefile.vc RC=rc MACHINE=$(TclMachine) OPTS=$(TkOpts) $(TkDirs) $(DebugFlags) $(WarningsFlags) TCLSH_NATIVE="$(tclWin32Exe)" install-binaries install-libraries copy /Y ..\license.terms "$(OutDir)\tklicense.terms" </NMakeBuildCommandLine> </PropertyGroup> diff --git a/Tools/msi/bundle/Default.ARM64.xsl b/Tools/msi/bundle/Default.ARM64.xsl index 0dd1c9e6a3..f63da4e727 100644 --- a/Tools/msi/bundle/Default.ARM64.xsl +++ b/Tools/msi/bundle/Default.ARM64.xsl @@ -13,14 +13,11 @@ <xsl:template match="*[local-name()='String' and @Id='InstallButtonNote']"> <String Id="InstallButtonNote">[TargetDir] -Includes pip and documentation +Includes IDLE, pip and documentation Creates shortcuts but no file associations</String> </xsl:template> <xsl:template match="*[local-name()='String' and @Id='Include_launcherHelp']"> <String Id="Include_launcherHelp">(The 'py' launcher is currently unavailable on ARM64.)</String> </xsl:template> - <xsl:template match="*[local-name()='String' and @Id='Include_tcltkHelpLabel']"> - <String Id="Include_tcltkHelpLabel">(tcl/tk and IDLE are currently unavailable on ARM64.)</String> - </xsl:template> </xsl:stylesheet>
\ No newline at end of file diff --git a/Tools/msi/bundle/bundle.targets b/Tools/msi/bundle/bundle.targets index 4f4306f7b6..89a5960a50 100644 --- a/Tools/msi/bundle/bundle.targets +++ b/Tools/msi/bundle/bundle.targets @@ -69,7 +69,7 @@ <Package Include="..\path\path*.wixproj" /> <Package Include="..\appendpath\appendpath*.wixproj" /> <Package Include="..\pip\pip*.wixproj" /> - <Package Include="..\tcltk\tcltk*.wixproj" Condition="$(Platform) != 'ARM64'" /> + <Package Include="..\tcltk\tcltk*.wixproj" /> <Package Include="..\test\test*.wixproj" /> <Package Include="..\tools\tools*.wixproj" /> <Package Include="..\ucrt\ucrt*.wixproj" Condition="$(Platform) != 'ARM64'" /> diff --git a/Tools/msi/bundle/bundle.wxs b/Tools/msi/bundle/bundle.wxs index 5c9fd6dca3..340c72acf4 100644 --- a/Tools/msi/bundle/bundle.wxs +++ b/Tools/msi/bundle/bundle.wxs @@ -77,12 +77,7 @@ <Variable Name="Include_test" Value="1" bal:Overridable="yes" /> <Variable Name="Include_doc" Value="1" bal:Overridable="yes" /> <Variable Name="Include_tools" Value="1" bal:Overridable="yes" /> - <?if $(var.Platform)~="ARM64" ?> - <Variable Name="Include_tcltk" Value="0" /> - <Variable Name="Include_tcltkState" Value="disable" /> - <?else ?> <Variable Name="Include_tcltk" Value="1" bal:Overridable="yes" /> - <?endif ?> <Variable Name="Include_pip" Value="1" bal:Overridable="yes" /> <?if $(var.Platform)~="ARM64" ?> <Variable Name="Include_launcher" Value="0" bal:Overridable="yes" /> @@ -122,8 +117,8 @@ <PackageGroupRef Id="test" /> <PackageGroupRef Id="doc" /> <PackageGroupRef Id="tools" /> - <?if $(var.Platform)!="ARM64" ?> <PackageGroupRef Id="tcltk" /> + <?if $(var.Platform)!="ARM64" ?> <PackageGroupRef Id="launcher" /> <?endif ?> <PackageGroupRef Id="pip" /> |