From c8c533f8796fe3dbbbc88227deb3155d90ef482f Mon Sep 17 00:00:00 2001 From: regro-cf-autotick-bot <36490558+regro-cf-autotick-bot@users.noreply.github.com> Date: Tue, 27 Jan 2026 00:57:43 +0000 Subject: [PATCH 1/5] migration: supportwindowsarm64platform --- conda-forge.yml | 1 + recipe/meta.yaml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/conda-forge.yml b/conda-forge.yml index a16962d8..ab94597a 100644 --- a/conda-forge.yml +++ b/conda-forge.yml @@ -9,6 +9,7 @@ build_platform: linux_aarch64: linux_64 linux_ppc64le: linux_64 osx_arm64: osx_64 + win_arm64: win_64 conda_build: pkg_format: '2' conda_forge_output_validation: true diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 17b8d6e7..fb28f323 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -86,6 +86,8 @@ build: requirements: build: + - python # [build_platform != target_platform] + - cross-python_{{ target_platform }} # [build_platform != target_platform] - patch # [not win] - m2-patch # [win] - m2-gcc-libs # [win] From 1e4fd3840735077c4ca5daf7f632ccc7d72fa312 Mon Sep 17 00:00:00 2001 From: regro-cf-autotick-bot <36490558+regro-cf-autotick-bot@users.noreply.github.com> Date: Tue, 27 Jan 2026 00:59:37 +0000 Subject: [PATCH 2/5] MNT: Re-rendered with conda-smithy 3.54.1 and conda-forge-pinning 2026.01.26.23.17.1 --- .azure-pipelines/azure-pipelines-win.yml | 6 +++ .ci_support/win_arm64_freethreadingno.yaml | 43 +++++++++++++++++++++ .ci_support/win_arm64_freethreadingyes.yaml | 43 +++++++++++++++++++++ .scripts/run_osx_build.sh | 19 +++++++++ README.md | 14 +++++++ 5 files changed, 125 insertions(+) create mode 100644 .ci_support/win_arm64_freethreadingno.yaml create mode 100644 .ci_support/win_arm64_freethreadingyes.yaml diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml index d5d5b998..90c44503 100755 --- a/.azure-pipelines/azure-pipelines-win.yml +++ b/.azure-pipelines/azure-pipelines-win.yml @@ -14,6 +14,12 @@ jobs: win_64_freethreadingyes: CONFIG: win_64_freethreadingyes UPLOAD_PACKAGES: 'True' + win_arm64_freethreadingno: + CONFIG: win_arm64_freethreadingno + UPLOAD_PACKAGES: 'True' + win_arm64_freethreadingyes: + CONFIG: win_arm64_freethreadingyes + UPLOAD_PACKAGES: 'True' timeoutInMinutes: 360 variables: CONDA_BLD_PATH: D:\\bld\\ diff --git a/.ci_support/win_arm64_freethreadingno.yaml b/.ci_support/win_arm64_freethreadingno.yaml new file mode 100644 index 00000000..0ce25317 --- /dev/null +++ b/.ci_support/win_arm64_freethreadingno.yaml @@ -0,0 +1,43 @@ +build_type: +- release +bzip2: +- '1' +c_compiler: +- vs2022 +c_stdlib: +- vs +channel_sources: +- conda-forge/label/python_rc,conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- vs2022 +expat: +- '2' +freethreading: +- 'no' +libffi: +- '3.5' +liblzma_devel: +- '5' +libsqlite: +- '3' +openssl: +- '3.5' +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- '3.14' +target_platform: +- win-arm64 +tk: +- '8.6' +zip_keys: +- - build_type + - channel_targets +zlib: +- '1' +zstd: +- '1.5' diff --git a/.ci_support/win_arm64_freethreadingyes.yaml b/.ci_support/win_arm64_freethreadingyes.yaml new file mode 100644 index 00000000..e82aad0a --- /dev/null +++ b/.ci_support/win_arm64_freethreadingyes.yaml @@ -0,0 +1,43 @@ +build_type: +- release +bzip2: +- '1' +c_compiler: +- vs2022 +c_stdlib: +- vs +channel_sources: +- conda-forge/label/python_rc,conda-forge +channel_targets: +- conda-forge main +cxx_compiler: +- vs2022 +expat: +- '2' +freethreading: +- 'yes' +libffi: +- '3.5' +liblzma_devel: +- '5' +libsqlite: +- '3' +openssl: +- '3.5' +pin_run_as_build: + python: + min_pin: x.x + max_pin: x.x +python: +- '3.14' +target_platform: +- win-arm64 +tk: +- '8.6' +zip_keys: +- - build_type + - channel_targets +zlib: +- '1' +zstd: +- '1.5' diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh index 361edeb2..bac7141a 100755 --- a/.scripts/run_osx_build.sh +++ b/.scripts/run_osx_build.sh @@ -63,6 +63,25 @@ if [[ "${sha:-}" == "" ]]; then sha=$(git rev-parse HEAD) fi +if [[ "${OSX_SDK_DIR:-}" == "" ]]; then + if [[ "${CI:-}" == "" ]]; then + echo "Please set OSX_SDK_DIR to a directory where SDKs can be downloaded to. Aborting" + exit 1 + else + export OSX_SDK_DIR=/opt/conda-sdks + /usr/bin/sudo mkdir -p "${OSX_SDK_DIR}" + /usr/bin/sudo chown "${USER}" "${OSX_SDK_DIR}" + fi +else + if tmpf=$(mktemp -p "$OSX_SDK_DIR" tmp.XXXXXXXX 2>/dev/null); then + rm -f "$tmpf" + echo "OSX_SDK_DIR is writeable without sudo, continuing" + else + echo "User-provided OSX_SDK_DIR is not writeable for current user! Aborting" + exit 1 + fi +fi + echo -e "\n\nRunning the build setup script." source run_conda_forge_build_setup diff --git a/README.md b/README.md index 78eed68b..84b4babd 100644 --- a/README.md +++ b/README.md @@ -212,6 +212,20 @@ Current build status variant + + win_arm64_freethreadingno + + + variant + + + + win_arm64_freethreadingyes + + + variant + + From b76fe9bf4dc676fd7334822b212c1487548222f5 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Mon, 26 Jan 2026 17:09:02 -0800 Subject: [PATCH 3/5] Remove Python requirements for cross-platform builds Removed unnecessary Python requirements for cross-platform builds. --- recipe/meta.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/recipe/meta.yaml b/recipe/meta.yaml index fb28f323..17b8d6e7 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -86,8 +86,6 @@ build: requirements: build: - - python # [build_platform != target_platform] - - cross-python_{{ target_platform }} # [build_platform != target_platform] - patch # [not win] - m2-patch # [win] - m2-gcc-libs # [win] From b42732c3a15e2244b8840b735e617fa1bedb1e6d Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Mon, 26 Jan 2026 17:32:16 -0800 Subject: [PATCH 4/5] Fix platform and build_path --- recipe/build_base.bat | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/recipe/build_base.bat b/recipe/build_base.bat index 59471bca..2a31a84a 100644 --- a/recipe/build_base.bat +++ b/recipe/build_base.bat @@ -2,15 +2,18 @@ setlocal EnableDelayedExpansion echo on :: Compile python, extensions and external libraries -if "%ARCH%"=="64" ( +if "%target_platform%"=="win-64" ( set PLATFORM=x64 - set VC_PATH=x64 set BUILD_PATH=amd64 -) else ( +) +if "%target_platform%"=="win-32" ( set PLATFORM=Win32 - set VC_PATH=x86 set BUILD_PATH=win32 ) +if "%target_platform%"=="win-arm64" ( + set PLATFORM=ARM64 + set BUILD_PATH=arm64 +) for /F "tokens=1,2 delims=." %%i in ("%PKG_VERSION%") do ( set "VERNODOTS=%%i%%j" From 2d294436fe1d8311a4624bebd819cf775ace988a Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Tue, 27 Jan 2026 19:44:39 -0800 Subject: [PATCH 5/5] refactor variables --- recipe/build_base.bat | 67 ++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/recipe/build_base.bat b/recipe/build_base.bat index 2a31a84a..b0f1bc80 100644 --- a/recipe/build_base.bat +++ b/recipe/build_base.bat @@ -3,16 +3,29 @@ echo on :: Compile python, extensions and external libraries if "%target_platform%"=="win-64" ( - set PLATFORM=x64 - set BUILD_PATH=amd64 + set HOST_PLATFORM=x64 + set HOST_DIR=amd64 ) if "%target_platform%"=="win-32" ( - set PLATFORM=Win32 - set BUILD_PATH=win32 + set HOST_PLATFORM=Win32 + set HOST_DIR=win32 ) if "%target_platform%"=="win-arm64" ( - set PLATFORM=ARM64 - set BUILD_PATH=arm64 + set HOST_PLATFORM=ARM64 + set HOST_DIR=arm64 +) + +if "%build_platform%"=="win-64" ( + set BUILD_PLATFORM=x64 + set BUILD_DIR=amd64 +) +if "%build_platform%"=="win-32" ( + set BUILD_PLATFORM=Win32 + set BUILD_DIR=win32 +) +if "%build_platform%"=="win-arm64" ( + set BUILD_PLATFORM=ARM64 + set BUILD_DIR=arm64 ) for /F "tokens=1,2 delims=." %%i in ("%PKG_VERSION%") do ( @@ -64,25 +77,25 @@ cd PCbuild :: Twice because: :: error : importlib_zipimport.h updated. You will need to rebuild pythoncore to see the changes. -call build.bat %PGO% %CONFIG% %FREETHREADING% -m -e -v -p %PLATFORM% -call build.bat %PGO% %CONFIG% %FREETHREADING% -m -e -v -p %PLATFORM% +call build.bat %PGO% %CONFIG% %FREETHREADING% -m -e -v -p %HOST_PLATFORM% +call build.bat %PGO% %CONFIG% %FREETHREADING% -m -e -v -p %HOST_PLATFORM% if errorlevel 1 exit 1 cd .. :: Populate the root package directory for %%x in (python%VERNODOTS%%THREAD%%_D%.dll python3%THREAD%%_D%.dll python%EXE_T%%_D%.exe pythonw%EXE_T%%_D%.exe) do ( - if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x ( - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x %PREFIX% + if exist %SRC_DIR%\PCbuild\%HOST_DIR%\%%x ( + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\%%x %PREFIX% ) else ( - echo "WARNING :: %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x does not exist" + echo "WARNING :: %SRC_DIR%\PCbuild\%HOST_DIR%\%%x does not exist" ) ) for %%x in (python%THREAD%%_D%.pdb python%VERNODOTS%%THREAD%%_D%.pdb pythonw%THREAD%%_D%.pdb) do ( - if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x ( - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x %PREFIX% + if exist %SRC_DIR%\PCbuild\%HOST_DIR%\%%x ( + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\%%x %PREFIX% ) else ( - echo "WARNING :: %SRC_DIR%\PCbuild\%BUILD_PATH%\%%x does not exist" + echo "WARNING :: %SRC_DIR%\PCbuild\%HOST_DIR%\%%x does not exist" ) ) @@ -93,7 +106,7 @@ if errorlevel 1 exit 1 :: Populate the DLLs directory mkdir %PREFIX%\DLLs -xcopy /s /y %SRC_DIR%\PCBuild\%BUILD_PATH%\*.pyd %PREFIX%\DLLs\ +xcopy /s /y %SRC_DIR%\PCBuild\%HOST_DIR%\*.pyd %PREFIX%\DLLs\ if errorlevel 1 exit 1 copy /Y %SRC_DIR%\PC\icons\py.ico %PREFIX%\DLLs\ @@ -135,12 +148,12 @@ for %%x in (idle pydoc) do ( :: Populate the libs directory if not exist %PREFIX%\libs mkdir %PREFIX%\libs -dir %SRC_DIR%\PCbuild\%BUILD_PATH%\ -if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\python%VERNODOTS%%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\python%VERNODOTS%%THREAD%%_D%.lib %PREFIX%\libs\ +dir %SRC_DIR%\PCbuild\%HOST_DIR%\ +if exist %SRC_DIR%\PCbuild\%HOST_DIR%\python%VERNODOTS%%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\python%VERNODOTS%%THREAD%%_D%.lib %PREFIX%\libs\ if errorlevel 1 exit 1 -if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\python3%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\python3%THREAD%%_D%.lib %PREFIX%\libs\ +if exist %SRC_DIR%\PCbuild\%HOST_DIR%\python3%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\python3%THREAD%%_D%.lib %PREFIX%\libs\ if errorlevel 1 exit 1 -if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\_tkinter%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\_tkinter%THREAD%%_D%.lib %PREFIX%\libs\ +if exist %SRC_DIR%\PCbuild\%HOST_DIR%\_tkinter%THREAD%%_D%.lib copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\_tkinter%THREAD%%_D%.lib %PREFIX%\libs\ if errorlevel 1 exit 1 @@ -151,20 +164,20 @@ if errorlevel 1 exit 1 :: Copy venv[w]launcher scripts to venv\srcipts\nt :: See https://github.com/python/cpython/blob/b4a316087c32d83e375087fd35fc511bc430ee8b/Lib/venv/__init__.py#L334-L376 -if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\venvlauncher%THREAD%%_D%.exe ( +if exist %SRC_DIR%\PCbuild\%HOST_DIR%\venvlauncher%THREAD%%_D%.exe ( @rem We did copy pythonw.exe until 3.12 but starting with 3.13 we seem to need the latter. Should we omit the first? - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\venvlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\python.exe - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\venvlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\venvlauncher%THREAD%%_D%.exe + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\venvlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\python.exe + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\venvlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\venvlauncher%THREAD%%_D%.exe ) else ( - echo "WARNING :: %SRC_DIR%\PCbuild\%BUILD_PATH%\venvlauncher%THREAD%%_D%.exe does not exist" + echo "WARNING :: %SRC_DIR%\PCbuild\%HOST_DIR%\venvlauncher%THREAD%%_D%.exe does not exist" ) -if exist %SRC_DIR%\PCbuild\%BUILD_PATH%\venvwlauncher%THREAD%%_D%.exe ( +if exist %SRC_DIR%\PCbuild\%HOST_DIR%\venvwlauncher%THREAD%%_D%.exe ( @rem We did copy pythonw.exe until 3.12 but starting with 3.13 we seem to need the latter. Should we omit the first? - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\venvwlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\pythonw.exe - copy /Y %SRC_DIR%\PCbuild\%BUILD_PATH%\venvwlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\venvwlauncher%THREAD%%_D%.exe + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\venvwlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\pythonw.exe + copy /Y %SRC_DIR%\PCbuild\%HOST_DIR%\venvwlauncher%THREAD%%_D%.exe %PREFIX%\Lib\venv\scripts\nt\venvwlauncher%THREAD%%_D%.exe ) else ( - echo "WARNING :: %SRC_DIR%\PCbuild\%BUILD_PATH%\venvwlauncher%THREAD%%_D%.exe does not exist" + echo "WARNING :: %SRC_DIR%\PCbuild\%HOST_DIR%\venvwlauncher%THREAD%%_D%.exe does not exist" ) :: Remove test data to save space.