Skip to content

bpo-46567: Add Tcl/Tk build for Windows ARM64 #31574

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Feb 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .azure-pipelines/tcltk-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
11 changes: 8 additions & 3 deletions .azure-pipelines/windows-release/msi-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)'
Expand Down
13 changes: 13 additions & 0 deletions .azure-pipelines/windows-release/stage-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
1 change: 1 addition & 0 deletions .azure-pipelines/windows-release/stage-layout-full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions .azure-pipelines/windows-release/stage-layout-msix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Adds Tcl and Tk support for Windows ARM64. This also adds IDLE to the
installation.
6 changes: 3 additions & 3 deletions PCbuild/get_externals.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 (
Expand Down
2 changes: 1 addition & 1 deletion PCbuild/pcbuild.proj
Original file line number Diff line number Diff line change
Expand Up @@ -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 -->
Expand Down
4 changes: 4 additions & 0 deletions PCbuild/prepare_tcltk.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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
8 changes: 6 additions & 2 deletions PCbuild/tcl.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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>
Expand Down
5 changes: 4 additions & 1 deletion PCbuild/tcltk.props
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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>
Expand Down
6 changes: 5 additions & 1 deletion PCbuild/tix.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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>
Expand Down
8 changes: 6 additions & 2 deletions PCbuild/tk.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
Expand Down Expand Up @@ -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>
Expand Down
5 changes: 1 addition & 4 deletions Tools/msi/bundle/Default.ARM64.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -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>
2 changes: 1 addition & 1 deletion Tools/msi/bundle/bundle.targets
Original file line number Diff line number Diff line change
Expand Up @@ -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'" />
Expand Down
7 changes: 1 addition & 6 deletions Tools/msi/bundle/bundle.wxs
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down Expand Up @@ -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" />
Expand Down