diff --git a/.azure-pipelines/azure-pipelines-linux.yml b/.azure-pipelines/azure-pipelines-linux.yml
index 9514627e7..f3792dd3f 100755
--- a/.azure-pipelines/azure-pipelines-linux.yml
+++ b/.azure-pipelines/azure-pipelines-linux.yml
@@ -8,12 +8,8 @@ jobs:
vmImage: ubuntu-latest
strategy:
matrix:
- linux_64_:
- CONFIG: linux_64_
- UPLOAD_PACKAGES: 'True'
- DOCKER_IMAGE: quay.io/condaforge/linux-anvil-alma-x86_64:8
- linux_aarch64_:
- CONFIG: linux_aarch64_
+ linux_ppc64le_:
+ CONFIG: linux_ppc64le_
UPLOAD_PACKAGES: 'True'
DOCKER_IMAGE: quay.io/condaforge/linux-anvil-cos7-x86_64
timeoutInMinutes: 360
diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml
deleted file mode 100755
index ac0bf384e..000000000
--- a/.azure-pipelines/azure-pipelines-osx.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-# This file was generated automatically from conda-smithy. To update this configuration,
-# update the conda-forge.yml and/or the recipe/meta.yaml.
-# -*- mode: yaml -*-
-
-jobs:
-- job: osx
- pool:
- vmImage: macOS-13
- strategy:
- matrix:
- osx_64_:
- CONFIG: osx_64_
- UPLOAD_PACKAGES: 'True'
- osx_arm64_:
- CONFIG: osx_arm64_
- UPLOAD_PACKAGES: 'True'
- timeoutInMinutes: 360
- variables: {}
-
- steps:
- # TODO: Fast finish on azure pipelines?
- - script: |
- export CI=azure
- export flow_run_id=azure_$(Build.BuildNumber).$(System.JobAttempt)
- export remote_url=$(Build.Repository.Uri)
- export sha=$(Build.SourceVersion)
- export OSX_FORCE_SDK_DOWNLOAD="1"
- export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME
- export FEEDSTOCK_NAME=$(basename ${BUILD_REPOSITORY_NAME})
- if [[ "${BUILD_REASON:-}" == "PullRequest" ]]; then
- export IS_PR_BUILD="True"
- else
- export IS_PR_BUILD="False"
- fi
- ./.scripts/run_osx_build.sh
- displayName: Run OSX build
- env:
- BINSTAR_TOKEN: $(BINSTAR_TOKEN)
- FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN)
- STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN)
\ No newline at end of file
diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml
deleted file mode 100755
index 990191763..000000000
--- a/.azure-pipelines/azure-pipelines-win.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-# This file was generated automatically from conda-smithy. To update this configuration,
-# update the conda-forge.yml and/or the recipe/meta.yaml.
-# -*- mode: yaml -*-
-
-jobs:
-- job: win
- pool:
- vmImage: windows-2022
- strategy:
- matrix:
- win_64_:
- CONFIG: win_64_
- UPLOAD_PACKAGES: 'True'
- timeoutInMinutes: 360
- variables:
- CONDA_BLD_PATH: D:\\bld\\
- MINIFORGE_HOME: D:\Miniforge
- UPLOAD_TEMP: D:\\tmp
-
- steps:
-
- - script: |
- call ".scripts\run_win_build.bat"
- displayName: Run Windows build
- env:
- MINIFORGE_HOME: $(MINIFORGE_HOME)
- PYTHONUNBUFFERED: 1
- CONFIG: $(CONFIG)
- CI: azure
- flow_run_id: azure_$(Build.BuildNumber).$(System.JobAttempt)
- remote_url: $(Build.Repository.Uri)
- sha: $(Build.SourceVersion)
- UPLOAD_PACKAGES: $(UPLOAD_PACKAGES)
- UPLOAD_TEMP: $(UPLOAD_TEMP)
- BINSTAR_TOKEN: $(BINSTAR_TOKEN)
- FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN)
- STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN)
\ No newline at end of file
diff --git a/.ci_support/linux_64_.yaml b/.ci_support/linux_64_.yaml
deleted file mode 100644
index c7f8ba8fa..000000000
--- a/.ci_support/linux_64_.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-c_compiler:
-- gcc
-c_compiler_version:
-- '13'
-c_stdlib:
-- sysroot
-c_stdlib_version:
-- '2.28'
-cdt_name:
-- cos7
-channel_sources:
-- conda-forge
-channel_targets:
-- conda-forge main
-cxx_compiler:
-- gxx
-cxx_compiler_version:
-- '13'
-docker_image:
-- quay.io/condaforge/linux-anvil-alma-x86_64:8
-target_platform:
-- linux-64
-zip_keys:
-- - c_compiler_version
- - cxx_compiler_version
-- - c_stdlib_version
- - cdt_name
-zlib:
-- '1'
-zstd:
-- '1.5'
diff --git a/.ci_support/linux_aarch64_.yaml b/.ci_support/linux_aarch64_.yaml
deleted file mode 100644
index d45fc59a9..000000000
--- a/.ci_support/linux_aarch64_.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-BUILD:
-- aarch64-conda_cos7-linux-gnu
-c_compiler:
-- gcc
-c_compiler_version:
-- '13'
-c_stdlib:
-- sysroot
-c_stdlib_version:
-- '2.28'
-cdt_arch:
-- aarch64
-cdt_name:
-- cos7
-channel_sources:
-- conda-forge
-channel_targets:
-- conda-forge main
-cxx_compiler:
-- gxx
-cxx_compiler_version:
-- '13'
-docker_image:
-- quay.io/condaforge/linux-anvil-cos7-x86_64
-target_platform:
-- linux-aarch64
-zip_keys:
-- - c_compiler_version
- - cxx_compiler_version
-- - c_stdlib_version
- - cdt_name
-zlib:
-- '1'
-zstd:
-- '1.5'
diff --git a/.ci_support/linux_ppc64le_.yaml b/.ci_support/linux_ppc64le_.yaml
new file mode 100644
index 000000000..3e92dbcf1
--- /dev/null
+++ b/.ci_support/linux_ppc64le_.yaml
@@ -0,0 +1,40 @@
+c_compiler:
+- gcc
+c_compiler_version:
+- '13'
+c_stdlib:
+- sysroot
+c_stdlib_version:
+- '2.28'
+cdt_name:
+- conda
+channel_sources:
+- conda-forge
+channel_targets:
+- conda-forge main
+docker_image:
+- quay.io/condaforge/linux-anvil-cos7-x86_64
+target_platform:
+- linux-ppc64le
+zlib:
+- '1'
+zstd:
+- '1.5'
+build_platform:
+- linux-64
+CMAKE_CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
+CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
+build_platform:
+- linux-64
+CMAKE_CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
+CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
+build_platform:
+- linux-64
+CMAKE_CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
+CROSSCOMPILING_EMULATOR:
+- /usr/bin/qemu-ppc64le-static
diff --git a/.ci_support/osx_64_.yaml b/.ci_support/osx_64_.yaml
deleted file mode 100644
index 4b1cc3d0a..000000000
--- a/.ci_support/osx_64_.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-MACOSX_DEPLOYMENT_TARGET:
-- '11.3'
-MACOSX_SDK_VERSION:
-- '11.3'
-c_compiler:
-- clang
-c_compiler_version:
-- '17'
-c_stdlib:
-- macosx_deployment_target
-c_stdlib_version:
-- '11.3'
-channel_sources:
-- conda-forge
-channel_targets:
-- conda-forge main
-cxx_compiler:
-- clangxx
-cxx_compiler_version:
-- '17'
-macos_machine:
-- x86_64-apple-darwin13.4.0
-target_platform:
-- osx-64
-zip_keys:
-- - c_compiler_version
- - cxx_compiler_version
-zlib:
-- '1'
-zstd:
-- '1.5'
diff --git a/.ci_support/osx_arm64_.yaml b/.ci_support/osx_arm64_.yaml
deleted file mode 100644
index 5f91874f5..000000000
--- a/.ci_support/osx_arm64_.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-MACOSX_DEPLOYMENT_TARGET:
-- '11.0'
-MACOSX_SDK_VERSION:
-- '11.0'
-c_compiler:
-- clang
-c_compiler_version:
-- '17'
-c_stdlib:
-- macosx_deployment_target
-c_stdlib_version:
-- '11.0'
-channel_sources:
-- conda-forge
-channel_targets:
-- conda-forge main
-cxx_compiler:
-- clangxx
-cxx_compiler_version:
-- '17'
-macos_machine:
-- arm64-apple-darwin20.0.0
-target_platform:
-- osx-arm64
-zip_keys:
-- - c_compiler_version
- - cxx_compiler_version
-zlib:
-- '1'
-zstd:
-- '1.5'
diff --git a/.ci_support/win_64_.yaml b/.ci_support/win_64_.yaml
deleted file mode 100644
index 6b2002f20..000000000
--- a/.ci_support/win_64_.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-c_compiler:
-- vs2019
-c_stdlib:
-- vs
-channel_sources:
-- conda-forge
-channel_targets:
-- conda-forge main
-cxx_compiler:
-- vs2019
-libxml2:
-- '2'
-target_platform:
-- win-64
-zlib:
-- '1'
-zstd:
-- '1.5'
diff --git a/.scripts/run_osx_build.sh b/.scripts/run_osx_build.sh
deleted file mode 100755
index 7f948c41f..000000000
--- a/.scripts/run_osx_build.sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env bash
-
-# -*- mode: jinja-shell -*-
-
-source .scripts/logging_utils.sh
-
-set -xe
-
-MINIFORGE_HOME=${MINIFORGE_HOME:-${HOME}/miniforge3}
-MINIFORGE_HOME=${MINIFORGE_HOME%/} # remove trailing slash
-
-( startgroup "Provisioning base env with micromamba" ) 2> /dev/null
-MICROMAMBA_VERSION="1.5.10-0"
-if [[ "$(uname -m)" == "arm64" ]]; then
- osx_arch="osx-arm64"
-else
- osx_arch="osx-64"
-fi
-MICROMAMBA_URL="https://github.com/mamba-org/micromamba-releases/releases/download/${MICROMAMBA_VERSION}/micromamba-${osx_arch}"
-MAMBA_ROOT_PREFIX="${MINIFORGE_HOME}-micromamba-$(date +%s)"
-echo "Downloading micromamba ${MICROMAMBA_VERSION}"
-micromamba_exe="$(mktemp -d)/micromamba"
-curl -L -o "${micromamba_exe}" "${MICROMAMBA_URL}"
-chmod +x "${micromamba_exe}"
-echo "Creating environment"
-"${micromamba_exe}" create --yes --root-prefix "${MAMBA_ROOT_PREFIX}" --prefix "${MINIFORGE_HOME}" \
- --channel conda-forge \
- pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
-echo "Moving pkgs cache from ${MAMBA_ROOT_PREFIX} to ${MINIFORGE_HOME}"
-mv "${MAMBA_ROOT_PREFIX}/pkgs" "${MINIFORGE_HOME}"
-echo "Cleaning up micromamba"
-rm -rf "${MAMBA_ROOT_PREFIX}" "${micromamba_exe}" || true
-( endgroup "Provisioning base env with micromamba" ) 2> /dev/null
-
-( startgroup "Configuring conda" ) 2> /dev/null
-
-source "${MINIFORGE_HOME}/etc/profile.d/conda.sh"
-conda activate base
-export CONDA_SOLVER="libmamba"
-export CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1
-
-
-
-
-
-echo -e "\n\nSetting up the condarc and mangling the compiler."
-setup_conda_rc ./ ./recipe ./.ci_support/${CONFIG}.yaml
-
-if [[ "${CI:-}" != "" ]]; then
- mangle_compiler ./ ./recipe .ci_support/${CONFIG}.yaml
-fi
-
-if [[ "${CI:-}" != "" ]]; then
- echo -e "\n\nMangling homebrew in the CI to avoid conflicts."
- /usr/bin/sudo mangle_homebrew
- /usr/bin/sudo -k
-else
- echo -e "\n\nNot mangling homebrew as we are not running in CI"
-fi
-
-if [[ "${sha:-}" == "" ]]; then
- sha=$(git rev-parse HEAD)
-fi
-
-echo -e "\n\nRunning the build setup script."
-source run_conda_forge_build_setup
-
-
-
-( endgroup "Configuring conda" ) 2> /dev/null
-
-echo -e "\n\nMaking the build clobber file"
-make_build_number ./ ./recipe ./.ci_support/${CONFIG}.yaml
-
-if [[ -f LICENSE.txt ]]; then
- cp LICENSE.txt "recipe/recipe-scripts-license.txt"
-fi
-
-if [[ "${BUILD_WITH_CONDA_DEBUG:-0}" == 1 ]]; then
- if [[ "x${BUILD_OUTPUT_ID:-}" != "x" ]]; then
- EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --output-id ${BUILD_OUTPUT_ID}"
- fi
- conda debug ./recipe -m ./.ci_support/${CONFIG}.yaml \
- ${EXTRA_CB_OPTIONS:-} \
- --clobber-file ./.ci_support/clobber_${CONFIG}.yaml
-
- # Drop into an interactive shell
- /bin/bash
-else
-
- if [[ "${HOST_PLATFORM}" != "${BUILD_PLATFORM}" ]]; then
- EXTRA_CB_OPTIONS="${EXTRA_CB_OPTIONS:-} --no-test"
- fi
-
- conda-build ./recipe -m ./.ci_support/${CONFIG}.yaml \
- --suppress-variables ${EXTRA_CB_OPTIONS:-} \
- --clobber-file ./.ci_support/clobber_${CONFIG}.yaml \
- --extra-meta flow_run_id="$flow_run_id" remote_url="$remote_url" sha="$sha"
-
- ( startgroup "Inspecting artifacts" ) 2> /dev/null
-
- # inspect_artifacts was only added in conda-forge-ci-setup 4.9.4
- command -v inspect_artifacts >/dev/null 2>&1 && inspect_artifacts --recipe-dir ./recipe -m ./.ci_support/${CONFIG}.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4"
-
- ( endgroup "Inspecting artifacts" ) 2> /dev/null
- ( startgroup "Validating outputs" ) 2> /dev/null
-
- validate_recipe_outputs "${FEEDSTOCK_NAME}"
-
- ( endgroup "Validating outputs" ) 2> /dev/null
-
- ( startgroup "Uploading packages" ) 2> /dev/null
-
- if [[ "${UPLOAD_PACKAGES}" != "False" ]] && [[ "${IS_PR_BUILD}" == "False" ]]; then
- upload_package --validate --feedstock-name="${FEEDSTOCK_NAME}" ./ ./recipe ./.ci_support/${CONFIG}.yaml
- fi
-
- ( endgroup "Uploading packages" ) 2> /dev/null
-fi
\ No newline at end of file
diff --git a/.scripts/run_win_build.bat b/.scripts/run_win_build.bat
deleted file mode 100755
index d3c0345e5..000000000
--- a/.scripts/run_win_build.bat
+++ /dev/null
@@ -1,152 +0,0 @@
-:: PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here
-:: will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent
-:: changes to this script, consider a proposal to conda-smithy so that other feedstocks can also
-:: benefit from the improvement.
-
-:: INPUTS (required environment variables)
-:: CONFIG: name of the .ci_support/*.yaml file for this job
-:: CI: azure, github_actions, or unset
-:: MINIFORGE_HOME: where to install the base conda environment
-:: UPLOAD_PACKAGES: true or false
-:: UPLOAD_ON_BRANCH: true or false
-
-setlocal enableextensions enabledelayedexpansion
-
-if "%MINIFORGE_HOME%"=="" set "MINIFORGE_HOME=%USERPROFILE%\Miniforge3"
-:: Remove trailing backslash, if present
-if "%MINIFORGE_HOME:~-1%"=="\" set "MINIFORGE_HOME=%MINIFORGE_HOME:~0,-1%"
-call :start_group "Provisioning base env with micromamba"
-set "MAMBA_ROOT_PREFIX=%MINIFORGE_HOME%-micromamba-%RANDOM%"
-set "MICROMAMBA_VERSION=1.5.10-0"
-set "MICROMAMBA_URL=https://github.com/mamba-org/micromamba-releases/releases/download/%MICROMAMBA_VERSION%/micromamba-win-64"
-set "MICROMAMBA_TMPDIR=%TMP%\micromamba-%RANDOM%"
-set "MICROMAMBA_EXE=%MICROMAMBA_TMPDIR%\micromamba.exe"
-
-echo Downloading micromamba %MICROMAMBA_VERSION%
-if not exist "%MICROMAMBA_TMPDIR%" mkdir "%MICROMAMBA_TMPDIR%"
-certutil -urlcache -split -f "%MICROMAMBA_URL%" "%MICROMAMBA_EXE%"
-if !errorlevel! neq 0 exit /b !errorlevel!
-
-echo Creating environment
-call "%MICROMAMBA_EXE%" create --yes --root-prefix "%MAMBA_ROOT_PREFIX%" --prefix "%MINIFORGE_HOME%" ^
- --channel conda-forge ^
- pip python=3.12 conda-build conda-forge-ci-setup=4 "conda-build>=24.1"
-if !errorlevel! neq 0 exit /b !errorlevel!
-echo Moving pkgs cache from %MAMBA_ROOT_PREFIX% to %MINIFORGE_HOME%
-move /Y "%MAMBA_ROOT_PREFIX%\pkgs" "%MINIFORGE_HOME%"
-if !errorlevel! neq 0 exit /b !errorlevel!
-echo Removing %MAMBA_ROOT_PREFIX%
-del /S /Q "%MAMBA_ROOT_PREFIX%"
-del /S /Q "%MICROMAMBA_TMPDIR%"
-call :end_group
-
-call :start_group "Configuring conda"
-
-:: Activate the base conda environment
-call "%MINIFORGE_HOME%\Scripts\activate.bat"
-:: Configure the solver
-set "CONDA_SOLVER=libmamba"
-if !errorlevel! neq 0 exit /b !errorlevel!
-set "CONDA_LIBMAMBA_SOLVER_NO_CHANNELS_FROM_INSTALLED=1"
-
-:: Set basic configuration
-echo Setting up configuration
-setup_conda_rc .\ ".\recipe" .\.ci_support\%CONFIG%.yaml
-if !errorlevel! neq 0 exit /b !errorlevel!
-echo Running build setup
-CALL run_conda_forge_build_setup
-
-
-if !errorlevel! neq 0 exit /b !errorlevel!
-
-if EXIST LICENSE.txt (
- echo Copying feedstock license
- copy LICENSE.txt "recipe\\recipe-scripts-license.txt"
-)
-if NOT [%HOST_PLATFORM%] == [%BUILD_PLATFORM%] (
- if [%CROSSCOMPILING_EMULATOR%] == [] (
- set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --no-test"
- )
-)
-
-if NOT [%flow_run_id%] == [] (
- set "EXTRA_CB_OPTIONS=%EXTRA_CB_OPTIONS% --extra-meta flow_run_id=%flow_run_id% remote_url=%remote_url% sha=%sha%"
-)
-
-call :end_group
-
-:: Build the recipe
-echo Building recipe
-conda-build.exe "recipe" -m .ci_support\%CONFIG%.yaml --suppress-variables %EXTRA_CB_OPTIONS%
-if !errorlevel! neq 0 exit /b !errorlevel!
-
-call :start_group "Inspecting artifacts"
-:: inspect_artifacts was only added in conda-forge-ci-setup 4.9.4
-WHERE inspect_artifacts >nul 2>nul && inspect_artifacts --recipe-dir ".\recipe" -m .ci_support\%CONFIG%.yaml || echo "inspect_artifacts needs conda-forge-ci-setup >=4.9.4"
-call :end_group
-
-:: Prepare some environment variables for the upload step
-if /i "%CI%" == "github_actions" (
- set "FEEDSTOCK_NAME=%GITHUB_REPOSITORY:*/=%"
- set "GIT_BRANCH=%GITHUB_REF:refs/heads/=%"
- if /i "%GITHUB_EVENT_NAME%" == "pull_request" (
- set "IS_PR_BUILD=True"
- ) else (
- set "IS_PR_BUILD=False"
- )
- set "TEMP=%RUNNER_TEMP%"
-)
-if /i "%CI%" == "azure" (
- set "FEEDSTOCK_NAME=%BUILD_REPOSITORY_NAME:*/=%"
- set "GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%"
- if /i "%BUILD_REASON%" == "PullRequest" (
- set "IS_PR_BUILD=True"
- ) else (
- set "IS_PR_BUILD=False"
- )
- set "TEMP=%UPLOAD_TEMP%"
-)
-
-:: Validate
-call :start_group "Validating outputs"
-validate_recipe_outputs "%FEEDSTOCK_NAME%"
-if !errorlevel! neq 0 exit /b !errorlevel!
-call :end_group
-
-if /i "%UPLOAD_PACKAGES%" == "true" (
- if /i "%IS_PR_BUILD%" == "false" (
- call :start_group "Uploading packages"
- if not exist "%TEMP%\" md "%TEMP%"
- set "TMP=%TEMP%"
- upload_package --validate --feedstock-name="%FEEDSTOCK_NAME%" .\ ".\recipe" .ci_support\%CONFIG%.yaml
- if !errorlevel! neq 0 exit /b !errorlevel!
- call :end_group
- )
-)
-
-exit
-
-:: Logging subroutines
-
-:start_group
-if /i "%CI%" == "github_actions" (
- echo ::group::%~1
- exit /b
-)
-if /i "%CI%" == "azure" (
- echo ##[group]%~1
- exit /b
-)
-echo %~1
-exit /b
-
-:end_group
-if /i "%CI%" == "github_actions" (
- echo ::endgroup::
- exit /b
-)
-if /i "%CI%" == "azure" (
- echo ##[endgroup]
- exit /b
-)
-exit /b
\ No newline at end of file
diff --git a/README.md b/README.md
index e3acdb76a..941515c4a 100644
--- a/README.md
+++ b/README.md
@@ -39,38 +39,10 @@ Current build status
Variant | Status |
- linux_64 |
+ linux_ppc64le |
-
-
- |
-
- linux_aarch64 |
-
-
-
-
- |
-
- osx_64 |
-
-
-
-
- |
-
- osx_arm64 |
-
-
-
-
- |
-
- win_64 |
-
-
-
+
|
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index a30f040e8..d309e84b2 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -19,7 +19,7 @@ stages:
echo "##vso[task.setvariable variable=log]$git_log"
displayName: Obtain commit message
- bash: echo "##vso[task.setvariable variable=RET]false"
- condition: or(contains(variables.log, '[skip azp]'), contains(variables.log, '[azp skip]'), contains(variables.log, '[skip ci]'), contains(variables.log, '[ci skip]'))
+ condition: and(eq(variables['Build.Reason'], 'PullRequest'), or(contains(variables.log, '[skip azp]'), contains(variables.log, '[azp skip]'), contains(variables.log, '[skip ci]'), contains(variables.log, '[ci skip]')))
displayName: Skip build?
- bash: echo "##vso[task.setvariable variable=start_main;isOutput=true]$RET"
name: result
@@ -28,6 +28,4 @@ stages:
condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true'))
dependsOn: Check
jobs:
- - template: ./.azure-pipelines/azure-pipelines-linux.yml
- - template: ./.azure-pipelines/azure-pipelines-osx.yml
- - template: ./.azure-pipelines/azure-pipelines-win.yml
+ - template: ./.azure-pipelines/azure-pipelines-linux.yml
\ No newline at end of file
diff --git a/build-locally.py b/build-locally.py
index 6788aea66..c4a56c667 100755
--- a/build-locally.py
+++ b/build-locally.py
@@ -26,6 +26,13 @@ def setup_environment(ns):
os.path.dirname(__file__), "miniforge3"
)
+ # The default cache location might not be writable using docker on macOS.
+ if ns.config.startswith("linux") and platform.system() == "Darwin":
+ os.environ["CONDA_FORGE_DOCKER_RUN_ARGS"] = (
+ os.environ.get("CONDA_FORGE_DOCKER_RUN_ARGS", "")
+ + " -e RATTLER_CACHE_DIR=/tmp/rattler_cache"
+ )
+
def run_docker_build(ns):
script = ".scripts/run_docker_build.sh"
diff --git a/conda-forge.yml b/conda-forge.yml
index bcfdbb9ea..316d6f265 100644
--- a/conda-forge.yml
+++ b/conda-forge.yml
@@ -8,5 +8,6 @@ conda_build:
pkg_format: '2'
build_platform:
linux_aarch64: linux_64
+ linux_ppc64le: linux_64
osx_arm64: osx_64
test: native_and_emulated
diff --git a/recipe/build.sh b/recipe/build.sh
index 1ac560437..ddaaefcc6 100644
--- a/recipe/build.sh
+++ b/recipe/build.sh
@@ -21,6 +21,9 @@ case "${target_platform}" in
linux-aarch64)
bash "${RECIPE_DIR}"/build_scripts/cross-"${builder}"-linux-aarch64.sh
;;
+ linux-ppc64le)
+ bash "${RECIPE_DIR}"/build_scripts/cross-"${builder}"-linux-ppc64le.sh
+ ;;
osx-arm64)
bash "${RECIPE_DIR}"/build_scripts/cross-"${builder}"-osx-arm64.sh
;;
diff --git a/recipe/build_scripts/_build_qemu_execve.sh b/recipe/build_scripts/_build_qemu_execve.sh
new file mode 100644
index 000000000..50f0dee56
--- /dev/null
+++ b/recipe/build_scripts/_build_qemu_execve.sh
@@ -0,0 +1,71 @@
+function build_qemu_execve() {
+ local arch=${1:-"aarch64"}
+
+ mamba create -n qemu-execve -y -c conda-forge \
+ gcc_linux-64 \
+ glib \
+ make \
+ meson \
+ patchelf \
+ pkg-config \
+ sphinx \
+ sphinx-rtd-theme \
+ sysroot_linux-64=2.28 \
+ zlib
+
+ mkdir -p "${SRC_DIR}"/_qemu_execve
+ cd "${SRC_DIR}"/_qemu_execve
+ git clone https://gitlab.com/qemu-project/qemu.git
+ cd qemu
+ git checkout v9.1.0
+ cd ..
+ patch -p0 < "${RECIPE_DIR}"/patches/xxxx-qemu-execve.patch
+
+ mkdir _conda-build
+ cd _conda-build
+ local CC=$(mamba run -n qemu-execve which x86_64-conda-linux-gnu-gcc | grep -Eo '/.*gcc' | tail -n 1)
+ local PKG_CONFIG=$(mamba run -n qemu-execve which pkg-config | grep -Eo '/.*pkg-config' | tail -n 1)
+ local PKG_CONFIG_PATH=$(dirname ${PKG_CONFIG})/../lib/pkgconfig
+ mamba run -n qemu-execve bash -c 'echo "${CFLAGS:-}" > _cflags.txt' >& /dev/null
+ local CFLAGS=$(< _cflags.txt)
+ CFLAGS=${CFLAGS//-mcpu=power8 -mtune=power8/}
+ mamba run -n qemu-execve bash -c 'echo "${LDFLAGS:-}" > _ldflags.txt' >& /dev/null
+ local LDFLAGS=$(< _ldflags.txt)
+ mamba run -n qemu-execve bash -c 'echo "${PATH:-}" > _path.txt' >& /dev/null
+ local PATH=$(< _path.txt)
+
+ # export CC PATH PKG_CONFIG CFLAGS LDFLAGS PKG_CONFIG_PATH
+
+ "${SRC_DIR}"/_qemu_execve/qemu/configure --prefix="${BUILD_PREFIX}" \
+ --interp-prefix="${BUILD_PREFIX}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot" \
+ --enable-linux-user \
+ --target-list="${arch}-linux-user" \
+ "--cross-cc-${arch}=${SYSROOT_ARCH}-conda-linux-gnu-gcc" \
+ "--cross-prefix-${arch}=${SYSROOT_ARCH}-conda-linux-gnu-" \
+ --disable-system --disable-fdt --disable-guest-agent --disable-tools --disable-virtfs \
+ --disable-docs --disable-hexagon-idef-parser \
+ --disable-bsd-user --disable-strip --disable-werror --disable-gcrypt --disable-pie \
+ --disable-debug-info --disable-debug-tcg --disable-tcg-interpreter \
+ --disable-brlapi --disable-linux-aio --disable-bzip2 --disable-cap-ng --disable-curl \
+ --disable-glusterfs --disable-gnutls --disable-nettle --disable-gtk --disable-rdma --disable-libiscsi \
+ --disable-vnc-jpeg --disable-kvm --disable-lzo --disable-curses --disable-libnfs --disable-numa \
+ --disable-opengl --disable-rbd --disable-vnc-sasl --disable-sdl --disable-seccomp \
+ --disable-smartcard --disable-snappy --disable-spice --disable-libusb --disable-usb-redir --disable-vde \
+ --disable-vhost-net --disable-virglrenderer --disable-vnc --disable-vte --disable-xen \
+ --disable-xen-pci-passthrough > "${SRC_DIR}"/_configure_qemu.log 2>&1
+ make -j"${CPU_COUNT}" > "${SRC_DIR}"/_make_qemu.log 2>&1
+ make install > "${SRC_DIR}"/_install_qemu.log 2>&1
+
+ # Patch the interpreter
+ patchelf --set-interpreter "${BUILD_PREFIX}/x86_64-conda-linux-gnu/sysroot/lib64/ld-2.28.so" "${BUILD_PREFIX}/bin/qemu-${arch}"
+ patchelf --set-rpath "\$ORIGIN/../x86_64-conda-linux-gnu/sysroot/lib64" "${BUILD_PREFIX}/bin/qemu-${arch}"
+ patchelf --add-rpath "\$ORIGIN/../lib" "${BUILD_PREFIX}/bin/qemu-${arch}"
+
+ export QEMU_LD_PREFIX="${SYSROOT_PATH}"
+ export QEMU_SET_ENV="LD_LIBRARY_PATH=${SYSROOT_PATH}/lib64:${LD_LIBRARY_PATH:-}"
+ export QEMU_EXECVE="${BUILD_PREFIX}"/bin/qemu-${arch}
+ export QEMU_STACK_SIZE=67108864
+ export QEMU_LOG_FILENAME="${SRC_DIR}"/_qemu.log
+ export QEMU_LOG="strace"
+ cd "${SRC_DIR}"
+}
diff --git a/recipe/build_scripts/_functions.sh b/recipe/build_scripts/_functions.sh
index e66fcd027..9c144da82 100644
--- a/recipe/build_scripts/_functions.sh
+++ b/recipe/build_scripts/_functions.sh
@@ -5,7 +5,7 @@ function cmake_build_install() {
current_dir=$(pwd)
cd "${build_dir}" || exit 1
- cmake --build . -- -j"${CPU_COUNT}"
+ cmake --build . -v -- -j"${CPU_COUNT}"
cmake --install .
cd "${current_dir}" || exit 1
}
@@ -122,18 +122,55 @@ function build_zig_with_zig() {
fi
}
-function patchelf_installed_zig() {
- local install_dir=$1
+function patchelf_with_2.28() {
+ local _exec=$1
local _prefix=$2
- patchelf --remove-rpath "${install_dir}/bin/zig"
- patchelf --set-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64" "${install_dir}/bin/zig"
- patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/lib" "${install_dir}/bin/zig"
- patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/usr/lib64" "${install_dir}/bin/zig"
- patchelf --add-rpath "${_prefix}/lib" "${install_dir}/bin/zig"
- patchelf --add-rpath "${PREFIX}/lib" "${install_dir}/bin/zig"
+ patchelf --remove-rpath "${_exec}"
+ patchelf --set-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64" "${_exec}"
+ patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/lib" "${_exec}"
+ patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/usr/lib64" "${_exec}"
+ patchelf --add-rpath "${_prefix}/lib" "${_exec}"
+ patchelf --add-rpath "${PREFIX}/lib" "${_exec}"
- patchelf --set-interpreter "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-2.28.so" "${install_dir}/bin/zig"
+ patchelf --set-interpreter "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-2.28.so" "${_exec}"
+}
+
+function patchelf_replace_2.28() {
+ local _exec=$1
+ local _prefix=$2
+
+ patchelf --remove-rpath "${_exec}"
+ patchelf --set-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64" "${_exec}"
+ patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/lib" "${_exec}"
+ patchelf --add-rpath "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/usr/lib64" "${_exec}"
+ patchelf --add-rpath "${_prefix}/lib" "${_exec}"
+ patchelf --add-rpath "${PREFIX}/lib" "${_exec}"
+
+ # patchelf --replace-needed "libc.so.6" "libc-2.28.so" "${_exec}"
+ # patchelf --replace-needed "ld-linux-aarch64.so.1" "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-linux-aarch64.so.1" "${_exec}"
+
+ # patchelf --set-interpreter "${_prefix}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-2.28.so" "${_exec}"
+}
+
+function patchelf_sysroot_interpreter() {
+ local _sysroot=$1
+ local _interpreter=$2
+ local _exec=$3
+ local _add_lib=${4:-}
+
+ patchelf --set-interpreter "${_interpreter}" "${_exec}"
+ patchelf --set-rpath "${PREFIX}"/lib "${_exec}"
+ if [[ -d "${_sysroot}"/lib64 ]]; then
+ patchelf --add-rpath "${_sysroot}"/lib64 "${_exec}"
+ fi
+ patchelf --add-rpath "${_sysroot}"/lib "${_exec}"
+
+ if [[ "${_add_lib:-0}" != "0" ]]; then
+ patchelf --add-needed "libdl.so.2" "${_exec}"
+ patchelf --add-needed "librt.so.1" "${_exec}"
+ patchelf --add-needed "libm.so.6" "${_exec}"
+ fi
}
function remove_failing_langref() {
diff --git a/recipe/build_scripts/cross-cmake-linux-aarch64.sh b/recipe/build_scripts/cross-cmake-linux-aarch64.sh
new file mode 100644
index 000000000..d235d69b7
--- /dev/null
+++ b/recipe/build_scripts/cross-cmake-linux-aarch64.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+set -euxo pipefail
+
+# --- Functions ---
+
+source "${RECIPE_DIR}/build_scripts/_functions.sh"
+
+# --- Main ---
+
+cmake_build_dir="${SRC_DIR}/_conda-cmake-build"
+
+mkdir -p "${cmake_build_dir}" && cp -r "${SRC_DIR}"/zig-source/* "${cmake_build_dir}"
+
+mkdir -p "${SRC_DIR}"/_conda-build-level-patches
+cp -r "${RECIPE_DIR}"/patches/xxxx* "${SRC_DIR}"/_conda-build-level-patches
+
+# Current conda zig may not be able to build the latest zig
+SYSROOT_ARCH="aarch64"
+SYSROOT_PATH="${PREFIX}"/"${SYSROOT_ARCH}"-conda-linux-gnu/sysroot
+TARGET_INTERPRETER="${SYSROOT_PATH}/lib64/ld-linux-${SYSROOT_ARCH}.so.1"
+
+export ZIG_GLOBAL_CACHE_DIR="${PWD}/zig-global-cache"
+export ZIG_LOCAL_CACHE_DIR="${PWD}/zig-local-cache"
+
+EXTRA_CMAKE_ARGS+=( \
+ "-DCMAKE_BUILD_TYPE=Release" \
+ "-DCMAKE_PREFIX_PATH=${PREFIX};${SYSROOT_PATH}" \
+ "-DCMAKE_C_COMPILER=${CC}" \
+ "-DCMAKE_CXX_COMPILER=${CXX}" \
+ "-DZIG_SHARED_LLVM=ON" \
+ "-DZIG_USE_LLVM_CONFIG=ON" \
+ "-DZIG_TARGET_TRIPLE=${SYSROOT_ARCH}-linux-gnu" \
+)
+# This path is too long for Target.zig
+# "-DZIG_TARGET_DYNAMIC_LINKER=${TARGET_INTERPRETER}" \
+
+source "${RECIPE_DIR}/build_scripts/_build_qemu_execve.sh"
+build_qemu_execve "${SYSROOT_ARCH}"
+
+# export CROSSCOMPILING_EMULATOR="${BUILD_PREFIX}/bin/qemu-${SYSROOT_ARCH}"
+
+export CROSSCOMPILING_EMULATOR="${QEMU_EXECVE}"
+export CROSSCOMPILING_LIBC="Wl,-dynamic-linker,${TARGET_INTERPRETER};-L${SYSROOT_PATH}/lib64;-lc"
+
+export CFLAGS="${CFLAGS} -Wl,-rpath-link,${SYSROOT_PATH}/lib64 -Wl,-dynamic-linker,${TARGET_INTERPRETER}"
+export CXXFLAGS="${CXXFLAGS} -Wl,-rpath-link,${SYSROOT_PATH}/lib64 -Wl,-dynamic-linker,${TARGET_INTERPRETER}"
+
+export ZIG_CROSS_TARGET_TRIPLE="${SYSROOT_ARCH}"-linux-gnu
+export ZIG_CROSS_TARGET_MCPU="native"
+
+USE_CMAKE_ARGS=1
+
+configure_cmake_zigcpp "${cmake_build_dir}" "${PREFIX}"
+cat <> "${cmake_build_dir}/config.zig"
+pub const mem_leak_frames = 0;
+EOF
+
+cmake_build_cmake_target "${cmake_build_dir}" zig2
+patchelf_sysroot_interpreter "${SYSROOT_PATH}" "${TARGET_INTERPRETER}" "${cmake_build_dir}/zig2" 1
+
+sed -i -E "s@#define ZIG_CXX_COMPILER \".*/bin@#define ZIG_CXX_COMPILER \"${PREFIX}/bin@g" "${cmake_build_dir}/config.h"
+pushd "${cmake_build_dir}"
+ cmake --build . -- -j"${CPU_COUNT}"
+ cmake --install .
+popd
+
+# patchelf --set-interpreter "${PREFIX}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-linux-${SYSROOT_ARCH}.so.1" "${PREFIX}/bin/zig"
+patchelf --set-rpath "\$ORIGIN/../${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64" "${PREFIX}/bin/zig"
+patchelf --add-rpath "\$ORIGIN/../lib" "${PREFIX}/bin/zig"
+
+# Use stage3/zig to self-build: This failed locally with SEGV in qemu
+# build_zig_with_zig "${zig_build_dir}" "${PREFIX}/bin/zig" "${PREFIX}"
diff --git a/recipe/build_scripts/cross-cmake-linux-ppc64le.sh b/recipe/build_scripts/cross-cmake-linux-ppc64le.sh
new file mode 100644
index 000000000..9ad0544ef
--- /dev/null
+++ b/recipe/build_scripts/cross-cmake-linux-ppc64le.sh
@@ -0,0 +1,102 @@
+#!/usr/bin/env bash
+set -euxo pipefail
+
+# --- Functions ---
+
+source "${RECIPE_DIR}/build_scripts/_functions.sh"
+
+# --- Main ---
+
+cmake_build_dir="${SRC_DIR}/_conda-cmake-build"
+
+mkdir -p "${cmake_build_dir}" && cp -r "${SRC_DIR}"/zig-source/* "${cmake_build_dir}"
+
+mkdir -p "${SRC_DIR}"/_conda-build-level-patches
+cp -r "${RECIPE_DIR}"/patches/xxxx* "${SRC_DIR}"/_conda-build-level-patches
+
+# Current conda zig may not be able to build the latest zig
+SYSROOT_ARCH="powerpc64le"
+ZIG_ARCH="powerpc64"
+QEMU_ARCH="ppc64le"
+SYSROOT_PATH="${BUILD_PREFIX}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot"
+TARGET_INTERPRETER="${SYSROOT_PATH}/lib64/ld-2.28.so"
+
+export ZIG_GLOBAL_CACHE_DIR="${PWD}/zig-global-cache"
+export ZIG_LOCAL_CACHE_DIR="${PWD}/zig-local-cache"
+
+source "${RECIPE_DIR}/build_scripts/_build_qemu_execve.sh"
+build_qemu_execve "${QEMU_ARCH}"
+
+export CC=$(which clang)
+export CXX=$(which clang++)
+
+export CFLAGS="-target ${SYSROOT_ARCH}-linux-gnu -fno-plt"
+export CXXFLAGS="-target ${SYSROOT_ARCH}-linux-gnu -fno-plt --stdlib=libstdc++"
+
+EXTRA_CMAKE_ARGS+=( \
+ "-DCMAKE_BUILD_TYPE=Release" \
+ "-DCMAKE_PREFIX_PATH=${PREFIX};${SYSROOT_PATH}" \
+ "-DCMAKE_C_COMPILER=${CC}" \
+ "-DCMAKE_CXX_COMPILER=${CXX}" \
+ "-DZIG_SHARED_LLVM=ON" \
+ "-DZIG_USE_LLVM_CONFIG=ON" \
+ "-DZIG_TARGET_TRIPLE=${ZIG_ARCH}-linux-gnu" \
+ "-DZIG_TARGET_MCPU=baseline" \
+ "-DZIG_SYSTEM_LIBCXX=stdc++" \
+)
+# This path is too long for Target.zig
+# "-DZIG_TARGET_DYNAMIC_LINKER=${TARGET_INTERPRETER}" \
+
+# export CROSSCOMPILING_EMULATOR="${BUILD_PREFIX}/bin/qemu-${SYSROOT_ARCH}"
+
+export CROSSCOMPILING_EMULATOR="${QEMU_EXECVE}"
+export CROSSCOMPILING_LIBC="Wl,-dynamic-linker,${TARGET_INTERPRETER};-L${SYSROOT_PATH}/lib64;-lc"
+
+# CFLAGS="${CFLAGS} -mlongcall -mcmodel=large -Os -Wl,--no-relax -fPIE -pie"
+# CXXFLAGS="${CXXFLAGS} -mlongcall -mcmodel=large -Os -Wl,--no-relax -fPIE -pie"
+# CFLAGS=${CFLAGS//-fno-plt/}
+# CXXFLAGS=${CXXFLAGS//-fno-plt/}
+
+export CFLAGS="${CFLAGS} -Wl,-rpath-link,${SYSROOT_PATH}/lib64 -Wl,-dynamic-linker,${TARGET_INTERPRETER}"
+export CXXFLAGS="${CXXFLAGS} -Wl,-rpath-link,${SYSROOT_PATH}/lib64 -Wl,-dynamic-linker,${TARGET_INTERPRETER}"
+
+export ZIG_CROSS_TARGET_TRIPLE="${ZIG_ARCH}"-linux-gnu
+export ZIG_CROSS_TARGET_MCPU="ppc64le"
+
+USE_CMAKE_ARGS=0
+
+# CFLAGS=${CFLAGS//-fPIC/}
+# CXXFLAGS=${CXXFLAGS//-fPIC/}
+# CFLAGS=${CFLAGS//-fpie/}
+# CXXFLAGS=${CXXFLAGS//-fpie/}
+# CFLAGS=${CFLAGS//-fno-plt/}
+# CXXFLAGS=${CXXFLAGS//-fno-plt/}
+# export CFLAGS="${CFLAGS}"
+# export CXXFLAGS="${CXXFLAGS} -fno-optimize-sibling-calls -fno-threadsafe-statics"
+# echo "CFLAGS=${CFLAGS}"
+# echo "CXXFLAGS=${CXXFLAGS}"
+configure_cmake_zigcpp "${cmake_build_dir}" "${PREFIX}"
+cat <> "${cmake_build_dir}/config.zig"
+pub const mem_leak_frames = 0;
+EOF
+
+cmake_build_cmake_target "${cmake_build_dir}" zig2.c
+# pushd "${cmake_build_dir}"
+# patch -Np0 -i "${SRC_DIR}"/_conda-build-level-patches/xxxx-zig2.c-asm-clobber-list.patch --binary
+# popd
+
+cmake_build_cmake_target "${cmake_build_dir}" zig2
+patchelf_sysroot_interpreter "${SYSROOT_PATH}" "${TARGET_INTERPRETER}" "${cmake_build_dir}/zig2" 1
+
+sed -i -E "s@#define ZIG_CXX_COMPILER \".*/bin@#define ZIG_CXX_COMPILER \"${PREFIX}/bin@g" "${cmake_build_dir}/config.h"
+pushd "${cmake_build_dir}"
+ cmake --build . -- -j"${CPU_COUNT}" > "${SRC_DIR}"/_make_post_zig2.log 2>&1
+ cmake --install .
+popd
+
+# patchelf --set-interpreter "${PREFIX}/${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64/ld-linux-${SYSROOT_ARCH}.so.1" "${PREFIX}/bin/zig"
+patchelf --set-rpath "\$ORIGIN/../${SYSROOT_ARCH}-conda-linux-gnu/sysroot/lib64" "${PREFIX}/bin/zig"
+patchelf --add-rpath "\$ORIGIN/../lib" "${PREFIX}/bin/zig"
+
+# Use stage3/zig to self-build: This failed locally with SEGV in qemu
+# build_zig_with_zig "${zig_build_dir}" "${PREFIX}/bin/zig" "${PREFIX}"
diff --git a/recipe/build_scripts/native-cmake-linux-ppc64le.sh b/recipe/build_scripts/native-cmake-linux-ppc64le.sh
new file mode 100644
index 000000000..a4c1b04e5
--- /dev/null
+++ b/recipe/build_scripts/native-cmake-linux-ppc64le.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+set -euxo pipefail
+
+# --- Functions ---
+
+source "${RECIPE_DIR}/build_scripts/_functions.sh"
+
+# --- Main ---
+
+export ZIG_GLOBAL_CACHE_DIR="${PWD}/zig-global-cache"
+export ZIG_LOCAL_CACHE_DIR="${PWD}/zig-local-cache"
+
+cmake_build_dir="${SRC_DIR}/build-release"
+mkdir -p "${cmake_build_dir}" && cp -r "${SRC_DIR}"/zig-source/* "${cmake_build_dir}"
+
+SYSROOT_ARCH="powerpc64le"
+
+EXTRA_CMAKE_ARGS+=( \
+ "-DCMAKE_BUILD_TYPE=Release" \
+ "-DZIG_SHARED_LLVM=ON" \
+ "-DZIG_USE_LLVM_CONFIG=ON" \
+ "-DZIG_TARGET_TRIPLE=${SYSROOT_ARCH}-linux-gnu" \
+)
+
+# Zig searches for libm.so/libc.so in incorrect paths (libm.so with hard-coded /usr/lib64/libmvec_nonshared.a)
+modify_libc_libm_for_zig "${BUILD_PREFIX}"
+
+# When using installed c++ libs, zig needs libzigcpp.a
+configure_cmake_zigcpp "${cmake_build_dir}" "${PREFIX}"
+cmake_build_install "${cmake_build_dir}"
diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml
index 68d99ad7b..bf0ee671b 100644
--- a/recipe/conda_build_config.yaml
+++ b/recipe/conda_build_config.yaml
@@ -1,7 +1,5 @@
c_stdlib_version: # [unix]
- 2.28 # [linux]
- 11.3 # [osx and x86_64]
-build_c_stdlib:
- - sysroot # [linux]
docker_image:
- - quay.io/condaforge/linux-anvil-alma-x86_64:8 # [linux and x86_64]
+ - quay.io/condaforge/linux-anvil-alma-x86_64:8 # [linux and (x86_64 or ppc64le)]
diff --git a/recipe/meta.yaml b/recipe/meta.yaml
index 304aecc1a..b43720252 100644
--- a/recipe/meta.yaml
+++ b/recipe/meta.yaml
@@ -9,8 +9,13 @@ package:
source:
- url: https://github.com/ziglang/zig/archive/refs/tags/{{ version }}.tar.gz
sha256: d3912858003e340f315224bf177d0f441d86b81f62854f5c141b6d51ab6b5516
+ # - url: https://github.com/ziglang/zig/archive/refs/heads/master.zip
+ # sha256: 535092b882cc5d64a2d07b3fe328cb15276eb2dfd87a5dfee8276c3d11f2f587
patches:
- - patches/0001-cross-findllvm.patch # [linux and aarch64]
+ - patches/0001-cross-findllvm.patch # [linux and (aarch64 or ppc64le)]
+ - patches/0002-cross-CMakeLists.txt.patch # [build_platform != target_platform]
+ - patches/0003-cross-install.cmake.patch # [build_platform != target_platform]
+ - patches/0004-cross-ppc64le-signal.h.patch # [ppc64le]
# May be combined into a single patch once the build is found robust (few versions of zig)
- patches/0001-win-set-MD-CMakeLists.txt.patch # [win]
- patches/0002-win-deprecations.patch # [win]
@@ -32,9 +37,10 @@ source:
# sha256: d45312e61ebcc48032b77bc4cf7fd6915c11fa16e4aad116b66c9468211230ea # [linux]
build:
- number: 4
+ number: 5
+ skip: true # [not linux or not ppc64le]
script_env:
- - BUILD_WITH_CMAKE=1 # [(linux or osx or win) and x86_64]
+ - BUILD_WITH_CMAKE=1 # [(linux or osx or win) and (x86_64 or ppc64le)]
ignore_run_exports:
- __glibc # [linux and aarch64]
- ucrt # [win]
@@ -44,15 +50,29 @@ requirements:
build:
- {{ compiler('c') }}
- {{ compiler('cxx') }}
- - {{ c_stdlib }}_{{ build_platform }} >={{ c_stdlib_version }} # [linux and aarch64]
- - {{ stdlib("c") }}
+ - {{ stdlib('c') }}
+ - clang # [linux and ppc64le]
+ - clangxx # [linux and ppc64le]
+ - llvm-tools # [linux and ppc64le]
+ # - {{ c_stdlib }}_{{ build_platform }} >={{ c_stdlib_version }} # [linux and aarch64]
- cmake >=3.5
- ninja
+ # This is needed to build a qemu that intercepts the execve() call that zig2 emits
+ - glib # [linux and build_platform != target_platform]
+ - sysroot_{{ build_platform }} >=2.28 # [linux and build_platform != target_platform]
+ - sysroot_{{ target_platform }} >=2.28 # [linux and build_platform != target_platform]
+ # - gcc_impl_linux-ppc64le # [linux and ppc64le]
+ # - make # [linux and build_platform != target_platform]
+ # - meson # [linux and build_platform != target_platform]
+ # - pkg-config # [linux and build_platform != target_platform]
+ # - sphinx # [linux and build_platform != target_platform]
+ # - sphinx-rtd-theme # [linux and build_platform != target_platform]
+ # - zlib # [linux and build_platform != target_platform]
- zig # [build_platform != target_platform]
host:
- clangdev {{ llvm_version }}
- libclang-cpp {{ llvm_version }}
- - libcxx {{ cxx_compiler_version }} # [osx]
+ - libcxx # [osx]
- llvmdev {{ llvm_version }}
- llvm {{ llvm_version }}
- lld {{ llvm_version }}
@@ -61,9 +81,13 @@ requirements:
- zlib
- zstd
run:
- - sysroot_{{ target_platform }} >=2.28 # [linux and aarch64]
+ - libxml2 # [linux and build_platform != target_platform]
+ - sysroot_{{ target_platform }} >=2.28 # [linux and (aarch64 or ppc64le)]
test:
+ requires:
+ - patchelf # [aarch64]
+ - sysroot_{{ target_platform }} >=2.28 # [linux and (aarch64 or ppc64le)]
commands:
- test -f ${PREFIX}/bin/zig # [unix]
- test -f ${PREFIX}/lib/zig/c.zig # [unix]
@@ -83,6 +107,9 @@ test:
{% endfor %}
# Functionality tests
+ - readelf -l ${PREFIX}/bin/zig # [(aarch64 or ppc64le)]
+ - patchelf --set-interpreter ${PREFIX}/aarch64-conda-linux-gnu/sysroot/lib64/ld-linux-aarch64.so.1 ${PREFIX}/bin/zig # [aarch64]
+ - readelf -l ${PREFIX}/bin/zig # [(aarch64 or ppc64le)]
- zig version
- zig zen
- zig init
diff --git a/recipe/patches/0002-cross-CMakeLists.txt.patch b/recipe/patches/0002-cross-CMakeLists.txt.patch
new file mode 100644
index 000000000..9aae35389
--- /dev/null
+++ b/recipe/patches/0002-cross-CMakeLists.txt.patch
@@ -0,0 +1,154 @@
+--- CMakeLists.txt.old 2024-06-06 14:05:11.000000000 -0500
++++ CMakeLists.txt 2024-07-05 15:35:21.268292096 -0500
+@@ -91,2 +91,3 @@
+ set(ZIG_STATIC_ZSTD ${ZIG_STATIC} CACHE BOOL "Prefer linking against static zstd")
++set(ZIG_STATIC_XML2 ${ZIG_STATIC} CACHE BOOL "Prefer linking against static xml2")
+ if(APPLE AND ZIG_STATIC)
+@@ -152,2 +153,5 @@
+ list(APPEND LLVM_LIBRARIES "${ZLIB}")
++else()
++ find_library(ZLIB NAMES z zlib libz libz.a libzlibstatic.a NAMES_PER_DIR)
++ list(APPEND LLVM_LIBRARIES "${ZLIB}")
+ endif()
+@@ -163,2 +167,19 @@
+ list(APPEND LLVM_LIBRARIES "${ZSTD}")
++else()
++ find_library(ZSTD NAMES zstd libzstd.a libzstdstatic.a NAMES_PER_DIR)
++ list(APPEND LLVM_LIBRARIES "${ZSTD}")
++endif()
++
++if(ZIG_STATIC_XML2)
++ if (MSVC)
++ list(REMOVE_ITEM LLVM_LIBRARIES "xml2.lib")
++ else()
++ list(REMOVE_ITEM LLVM_LIBRARIES "-lxml2")
++ endif()
++
++ find_library(XML2 NAMES libxml2.a xml2 NAMES_PER_DIR)
++ list(APPEND LLVM_LIBRARIES "${XML2}")
++else()
++ find_library(XML2 NAMES xml2 libxml2 libxml2.a NAMES_PER_DIR)
++ list(APPEND LLVM_LIBRARIES "${XML2}")
+ endif()
+@@ -722,3 +743,3 @@
+ -fno-rtti
+- -fno-stack-protector
++ # -fno-stack-protector
+
+@@ -729,6 +750,8 @@
+ -Wno-comment
++ -Os
+ )
+ else()
+-target_compile_options(zigcpp PRIVATE /Zc:preprocessor)
+-set_property(TARGET zigcpp PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded")
++ target_compile_options(zigcpp PRIVATE -MD)
++ target_compile_options(zigcpp PRIVATE /Zc:preprocessor)
++ set_property(TARGET zigcpp PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded")
+ endif()
+@@ -808,2 +831,28 @@
+ set(ZIG_HOST_TARGET_TRIPLE "${ZIG_HOST_TARGET_ARCH}-${ZIG_HOST_TARGET_OS}${ZIG_HOST_TARGET_ABI}" CACHE STRING "Host zig target triple.")
++if(DEFINED ENV{CROSSCOMPILING_EMULATOR})
++ set(CROSSCOMPILING_EMULATOR $ENV{CROSSCOMPILING_EMULATOR})
++ if(NOT DEFINED ENV{CROSSCOMPILING_LIBC})
++ set(CROSSCOMPILING_LIBC "-lc")
++ else()
++ set(CROSSCOMPILING_LIBC $ENV{CROSSCOMPILING_LIBC})
++ message(STATUS "Setting CROSSCOMPILING_LIBC ${CROSSCOMPILING_LIBC}")
++ endif()
++ if(DEFINED ENV{ZIG_CROSS_TARGET_TRIPLE})
++ set(ZIG_CROSS_TARGET_TRIPLE $ENV{ZIG_CROSS_TARGET_TRIPLE} CACHE STRING "Host zig target triple.")
++ message(STATUS "Setting ZIG_CROSS_TARGET_TRIPLE ${ZIG_CROSS_TARGET_TRIPLE}")
++ else()
++ message(SEND_ERROR "ZIG_CROSS_TARGET_TRIPLE is not set while cross-compiling")
++ endif()
++ if(DEFINED ENV{ZIG_CROSS_TARGET_MCPU})
++ set(ZIG_CROSS_TARGET_MCPU $ENV{ZIG_CROSS_TARGET_MCPU} CACHE STRING "Host zig target cpu.")
++ message(STATUS "Setting ZIG_CROSS_TARGET_MCPU ${ZIG_CROSS_TARGET_MCPU}")
++ else()
++ set(ZIG_CROSS_TARGET_MCPU "baseline" CACHE STRING "Host zig target cpu.")
++ message(STATUS "Setting ZIG_CROSS_TARGET_MCPU ${ZIG_CROSS_TARGET_MCPU}")
++ endif()
++else()
++ set(CROSSCOMPILING_EMULATOR "")
++ set(ZIG_CROSS_TARGET_TRIPLE ${ZIG_TARGET_TRIPLE})
++ set(ZIG_CROSS_TARGET_MCPU ${ZIG_TARGET_MCPU})
++endif()
+
+@@ -815,5 +864,11 @@
+ else()
+- set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99 -O2")
+- set(ZIG1_COMPILE_FLAGS "-std=c99 -Os")
+- set(ZIG2_COMPILE_FLAGS "-std=c99 -O0 -fno-stack-protector")
++ if(ZIG_HOST_TARGET_ARCH MATCHES "powerpc64le")
++ set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99 -O2")
++ set(ZIG1_COMPILE_FLAGS "-std=c99 -Os")
++ set(ZIG2_COMPILE_FLAGS "-std=c99 -Os -fno-stack-protector --save-temps")
++ else()
++ set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99 -O2")
++ set(ZIG1_COMPILE_FLAGS "-std=c99 -Os")
++ set(ZIG2_COMPILE_FLAGS "-std=c99 -Os")
++ endif()
+ if(APPLE)
+@@ -840,3 +895,3 @@
+ OUTPUT "${ZIG1_C_SOURCE}"
+- COMMAND zig-wasm2c "${ZIG1_WASM_MODULE}" "${ZIG1_C_SOURCE}"
++ COMMAND ${CROSSCOMPILING_EMULATOR} ${PROJECT_BINARY_DIR}/zig-wasm2c "${ZIG1_WASM_MODULE}" "${ZIG1_C_SOURCE}"
+ DEPENDS zig-wasm2c "${ZIG1_WASM_MODULE}"
+@@ -852,3 +907,9 @@
+ else()
+- target_link_libraries(zig1 LINK_PUBLIC m)
++ if(WIN32)
++ find_library(M NAMES m libm.lib NAMES_PER_DIR)
++ target_link_libraries(zig1 LINK_PUBLIC $M)
++ # target_link_libraries(zig1 LINK_PUBLIC $ENV{PREFIX}/Library/lib/libm.lib)
++ else()
++ target_link_libraries(zig1 LINK_PUBLIC m)
++ endif()
+ if(MINGW)
+@@ -858,8 +919,11 @@
+
++if(NOT DEFINED ZIG_CROSS_TARGET_TRIPLE)
++ set(ZIG_CROSS_TARGET_TRIPLE ${ZIG_HOST_TARGET_TRIPLE})
++endif()
+ set(BUILD_ZIG2_ARGS
+ "${PROJECT_SOURCE_DIR}/lib"
+- build-exe -ofmt=c -lc -OReleaseSmall
++ build-exe -ofmt=c "${CROSSCOMPILING_LIBC}" -OReleaseSmall
+ --name zig2
+ -femit-bin="${ZIG2_C_SOURCE}"
+- -target "${ZIG_HOST_TARGET_TRIPLE}"
++ -target "${ZIG_CROSS_TARGET_TRIPLE}"
+ --dep "build_options"
+@@ -873,3 +937,3 @@
+ OUTPUT "${ZIG2_C_SOURCE}"
+- COMMAND zig1 ${BUILD_ZIG2_ARGS}
++ COMMAND ${CROSSCOMPILING_EMULATOR} ${PROJECT_BINARY_DIR}/zig1 ${BUILD_ZIG2_ARGS}
+ DEPENDS zig1 "${ZIG_STAGE2_SOURCES}"
+@@ -884,3 +948,3 @@
+ -femit-bin="${ZIG_COMPILER_RT_C_SOURCE}"
+- -target "${ZIG_HOST_TARGET_TRIPLE}"
++ -target "${ZIG_CROSS_TARGET_TRIPLE}"
+ --dep "build_options"
+@@ -892,3 +956,3 @@
+ OUTPUT "${ZIG_COMPILER_RT_C_SOURCE}"
+- COMMAND zig1 ${BUILD_COMPILER_RT_ARGS}
++ COMMAND ${CROSSCOMPILING_EMULATOR} ${PROJECT_BINARY_DIR}/zig1 ${BUILD_COMPILER_RT_ARGS}
+ DEPENDS zig1 "${ZIG_STAGE2_SOURCES}"
+@@ -931,4 +995,4 @@
+ "-Dversion-string=${RESOLVED_ZIG_VERSION}"
+- "-Dtarget=${ZIG_TARGET_TRIPLE}"
+- "-Dcpu=${ZIG_TARGET_MCPU}"
++ "-Dtarget=${ZIG_CROSS_TARGET_TRIPLE}"
++ "-Dcpu=${ZIG_CROSS_TARGET_MCPU}"
+
+@@ -978,3 +1042,4 @@
+ OUTPUT "${PROJECT_BINARY_DIR}/stage3/bin/zig"
+- COMMAND zig2 build --prefix "${PROJECT_BINARY_DIR}/stage3" ${ZIG_BUILD_ARGS}
++ COMMAND ${CROSSCOMPILING_EMULATOR} ${PROJECT_BINARY_DIR}/zig2 build --prefix "${PROJECT_BINARY_DIR}/stage3" ${ZIG_BUILD_ARGS}
++ DEPENDS zig2
+ COMMENT STATUS "Building stage3"
+@@ -989,2 +1055,3 @@
+
++install(CODE "set(CROSSCOMPILING_EMULATOR \"${CROSSCOMPILING_EMULATOR}\")")
+ install(CODE "set(ZIG_EXECUTABLE \"${ZIG_EXECUTABLE}\")")
diff --git a/recipe/patches/0003-cross-install.cmake.patch b/recipe/patches/0003-cross-install.cmake.patch
new file mode 100644
index 000000000..e211c52e4
--- /dev/null
+++ b/recipe/patches/0003-cross-install.cmake.patch
@@ -0,0 +1,15 @@
+--- cmake/install.cmake 2024-06-06 14:05:11.000000000 -0500
++++ cmake/install.cmake 2024-06-19 11:00:55.023460439 -0500
+@@ -2,3 +2,3 @@
+ execute_process(
+- COMMAND "${ZIG_EXECUTABLE}" ${ZIG_INSTALL_ARGS}
++ COMMAND ${CROSSCOMPILING_EMULATOR} "${ZIG_EXECUTABLE}" ${ZIG_INSTALL_ARGS}
+ WORKING_DIRECTORY "${ZIG2_WORKING_DIR}"
+@@ -13,5 +13,5 @@
+ message("::")
+- message(":: argv: ${ZIG_EXECUTABLE} ${s_INSTALL_LIBSTAGE2_ARGS}")
++ message(":: argv: ${CROSSCOMPILING_EMULATOR} ${ZIG_EXECUTABLE} ${s_INSTALL_LIBSTAGE2_ARGS}")
+
+- set(_args ${ZIG_EXECUTABLE} ${ZIG_INSTALL_ARGS})
++ set(_args ${CROSSCOMPILING_EMULATOR} ${ZIG_EXECUTABLE} ${ZIG_INSTALL_ARGS})
+ list(LENGTH _args _len)
diff --git a/recipe/patches/0004-cross-ppc64le-signal.h.patch b/recipe/patches/0004-cross-ppc64le-signal.h.patch
new file mode 100644
index 000000000..b1fd5d7f4
--- /dev/null
+++ b/recipe/patches/0004-cross-ppc64le-signal.h.patch
@@ -0,0 +1,4 @@
+diff --git a/stage1/zig.h b/stage1/zig.h
+index 05529feec7..38f01ca020 100644
+--- a/stage1/zig.h
++++ b/stage1/zig.h
diff --git a/recipe/patches/xxxx-qemu-execve.patch b/recipe/patches/xxxx-qemu-execve.patch
new file mode 100644
index 000000000..618bc5ab4
--- /dev/null
+++ b/recipe/patches/xxxx-qemu-execve.patch
@@ -0,0 +1,143 @@
+--- qemu/linux-user/main.c.orig 2024-07-13 15:31:51.826834383 -0500
++++ qemu/linux-user/main.c 2024-07-13 16:17:44.996484934 -0500
+@@ -128,2 +128,3 @@
+ const char *qemu_uname_release;
++const char *qemu_execve_path;
+
+@@ -378,2 +379,7 @@
+
++static void handle_arg_execve(const char *arg)
++{
++ qemu_execve_path = strdup(arg);
++}
++
+ static void handle_arg_reserved_va(const char *arg)
+@@ -494,2 +500,4 @@
+ "address", "set guest_base address to 'address'"},
++ {"execve", "QEMU_EXECVE", true, handle_arg_execve,
++ "path", "use interpreter at 'path' when a process calls execve()"},
+ {"R", "QEMU_RESERVED_VA", true, handle_arg_reserved_va,
+--- qemu/linux-user/user-internals.h.orig 2024-07-13 15:31:51.834834526 -0500
++++ qemu/linux-user/user-internals.h 2024-07-13 16:22:08.113225373 -0500
+@@ -30,2 +30,3 @@
+ extern const char *qemu_uname_release;
++extern const char *qemu_execve_path;
+ extern unsigned long mmap_min_addr;
+--- qemu/linux-user/syscall.c.orig 2024-07-13 15:31:51.834834526 -0500
++++ qemu/linux-user/syscall.c 2024-07-13 18:42:00.033718159 -0500
+@@ -8417,2 +8417,104 @@
+
++#define BINPRM_BUF_SIZE 128
++
++/* qemu_execve() Must return target values and target errnos. */
++static abi_long qemu_execve(const char *filename, char *argv[],
++ char *envp[])
++{
++ char *i_arg = NULL, *i_name = NULL;
++ char **new_argp;
++ int argc, fd, ret, i, offset = 3;
++ char *cp;
++ char buf[BINPRM_BUF_SIZE];
++
++ for (argc = 0; argv[argc] != NULL; argc++) {
++ /* nothing */ ;
++ }
++
++ fd = open(filename, O_RDONLY);
++ if (fd == -1) {
++ return -ENOENT;
++ }
++
++ ret = read(fd, buf, BINPRM_BUF_SIZE);
++ if (ret == -1) {
++ close(fd);
++ return -ENOENT;
++ }
++
++ close(fd);
++
++ /* adapted from the kernel
++ * https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/binfmt_script.c
++ */
++ if ((buf[0] == '#') && (buf[1] == '!')) {
++ /*
++ * This section does the #! interpretation.
++ * Sorta complicated, but hopefully it will work. -TYT
++ */
++
++ buf[BINPRM_BUF_SIZE - 1] = '\0';
++ cp = strchr(buf, '\n');
++ if (cp == NULL) {
++ cp = buf+BINPRM_BUF_SIZE-1;
++ }
++ *cp = '\0';
++ while (cp > buf) {
++ cp--;
++ if ((*cp == ' ') || (*cp == '\t')) {
++ *cp = '\0';
++ } else {
++ break;
++ }
++ }
++ for (cp = buf+2; (*cp == ' ') || (*cp == '\t'); cp++) {
++ /* nothing */ ;
++ }
++ if (*cp == '\0') {
++ return -ENOEXEC; /* No interpreter name found */
++ }
++ i_name = cp;
++ i_arg = NULL;
++ for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) {
++ /* nothing */ ;
++ }
++ while ((*cp == ' ') || (*cp == '\t')) {
++ *cp++ = '\0';
++ }
++ if (*cp) {
++ i_arg = cp;
++ }
++
++ if (i_arg) {
++ offset = 5;
++ } else {
++ offset = 4;
++ }
++ }
++
++ new_argp = alloca((argc + offset + 1) * sizeof(void *));
++
++ /* Copy the original arguments with offset */
++ for (i = 0; i < argc; i++) {
++ new_argp[i + offset] = argv[i];
++ }
++
++ new_argp[0] = strdup(qemu_execve_path);
++ new_argp[1] = strdup("-0");
++ strcpy(new_argp[offset], filename);
++ new_argp[argc + offset] = NULL;
++
++ if (i_name) {
++ new_argp[2] = i_name;
++ new_argp[3] = i_name;
++
++ if (i_arg) {
++ new_argp[4] = i_arg;
++ }
++ } else {
++ new_argp[2] = argv[0];
++ }
++ return get_errno(execve(qemu_execve_path, new_argp, envp));
++}
++
+ ssize_t do_guest_readlink(const char *pathname, char *buf, size_t bufsiz)
+@@ -8533,4 +8635,8 @@
+ ret = is_execveat
+- ? safe_execveat(dirfd, exe, argp, envp, flags)
+- : safe_execve(exe, argp, envp);
++ ? ((qemu_execve_path && *qemu_execve_path)
++ ? get_errno(qemu_execve(exe, argp, envp))
++ : safe_execveat(dirfd, exe, argp, envp, flags))
++ : ((qemu_execve_path && *qemu_execve_path)
++ ? get_errno(qemu_execve(exe, argp, envp))
++ : safe_execve(exe, argp, envp));
+ ret = get_errno(ret);
diff --git a/recipe/patches/xxxx-zig2.c-asm-clobber-list.patch b/recipe/patches/xxxx-zig2.c-asm-clobber-list.patch
new file mode 100644
index 000000000..3006a1e8c
--- /dev/null
+++ b/recipe/patches/xxxx-zig2.c-asm-clobber-list.patch
@@ -0,0 +1,38 @@
+--- zig2.c 2024-06-20 11:33:33.032130211 -0500
++++ zig2.c 2024-06-20 11:46:49.218920956 -0500
+@@ -845078,7 +845078,7 @@
+ register uintptr_t const t6 __asm("r5") = a3;
+ register uintptr_t const t7 __asm("r6") = a4;
+ register uintptr_t const t8 __asm("r7") = a5;
+- __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7), [arg5]"r"(t8): "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
++ __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7), [arg5]"r"(t8): "memory", "cr0", "r8", "r9", "r10", "r11", "r12");
+ t1 = t2;
+ return t1;
+ }
+@@ -1766263,7 +1766263,7 @@
+ register uintptr_t const t7 __asm("r6") = a4;
+ register uintptr_t const t8 __asm("r7") = a5;
+ register uintptr_t const t9 __asm("r8") = a6;
+- __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7), [arg5]"r"(t8), [arg6]"r"(t9): "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
++ __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7), [arg5]"r"(t8), [arg6]"r"(t9): "memory", "cr0", "r9", "r10", "r11", "r12");
+ t1 = t2;
+ return t1;
+ }
+@@ -1939383,7 +1939383,7 @@
+ register uintptr_t const t4 __asm("r3") = a1;
+ register uintptr_t const t5 __asm("r4") = a2;
+ register uintptr_t const t6 __asm("r5") = a3;
+- __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6): "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
++ __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6): "memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
+ t1 = t2;
+ return t1;
+ }
+@@ -2549503,7 +2549503,7 @@
+ register uintptr_t const t5 __asm("r4") = a2;
+ register uintptr_t const t6 __asm("r5") = a3;
+ register uintptr_t const t7 __asm("r6") = a4;
+- __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7): "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
++ __asm volatile(" sc\n bns+ 1f\n neg 3, 3\n 1:": [ret]"=r"(t2): [number]"r"(t3), [arg1]"r"(t4), [arg2]"r"(t5), [arg3]"r"(t6), [arg4]"r"(t7): "memory", "cr0", "r7", "r8", "r9", "r10", "r11", "r12");
+ t1 = t2;
+ return t1;
+ }