Add a build and packaging step to the release pipeline to produce and publish a macOS Universal Binary archive (_macOS_universal_bin.tgz) containing dual-architecture (x86_64 Intel + arm64 Apple Silicon) fat Mach-O binaries for all ArgyllCMS utilities.
Motivation & Context
Downstream applications such as ICCery (ICCery#164) require a universal build of ArgyllCMS to bundle into native macOS Universal (universal-apple-darwin) packages. Rather than requiring downstream packaging to fetch and stitch single-architecture archives manually, the gronod/argyllcms build pipeline should publish a first-class universal archive.
Implementation Details
Compilation / Aggregation:
Build ArgyllCMS for both x86_64 (using macos-15-intel runner or cross-compilation) and arm64 (using macos-15 runner).
For every binary in bin/ (instlist, targen, printtarg, chartread, average, colprof, profcheck, iccgamut, cctiff, dispcal, dispread, illumread, spec2cie, synthacc, etc.), create a universal binary using lipo:
Create release tarball following the existing naming structure: Argyll_V<version>_macOS_universal_bin.tgz
Ensure bin/, License.txt, and standard documentation are included within the Argyll_V<version>/ root folder structure inside the archive.
CI / Release Workflow:
Add a step in the release workflow (running on macos-15) to assemble and upload _macOS_universal_bin.tgz alongside _macOS_x86_64_bin.tgz and _macOS_arm64_bin.tgz.
Verification & Acceptance Criteria
Running file bin/<binary> on all generated binaries in the universal archive confirms: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
Binaries execute natively on both Apple Silicon (native arm64) and Intel (native x86_64) macOS environments.
Release asset Argyll_V<tag>_macOS_universal_bin.tgz is published to repository releases.
### Overview & Objective
Add a build and packaging step to the release pipeline to produce and publish a **macOS Universal Binary** archive (`_macOS_universal_bin.tgz`) containing dual-architecture (`x86_64` Intel + `arm64` Apple Silicon) fat Mach-O binaries for all ArgyllCMS utilities.
---
### Motivation & Context
Downstream applications such as **ICCery** ([ICCery#164](https://git.i3omb.com/gronod/ICCery/issues/164)) require a universal build of ArgyllCMS to bundle into native macOS Universal (`universal-apple-darwin`) packages. Rather than requiring downstream packaging to fetch and stitch single-architecture archives manually, the `gronod/argyllcms` build pipeline should publish a first-class universal archive.
---
### Implementation Details
1. **Compilation / Aggregation**:
- Build ArgyllCMS for both `x86_64` (using `macos-15-intel` runner or cross-compilation) and `arm64` (using `macos-15` runner).
- For every binary in `bin/` (`instlist`, `targen`, `printtarg`, `chartread`, `average`, `colprof`, `profcheck`, `iccgamut`, `cctiff`, `dispcal`, `dispread`, `illumread`, `spec2cie`, `synthacc`, etc.), create a universal binary using `lipo`:
```bash
lipo -create \
"bin/x86_64/${bin_name}" \
"bin/arm64/${bin_name}" \
-output "bin/universal/${bin_name}"
chmod +x "bin/universal/${bin_name}"
```
2. **Packaging**:
- Create release tarball following the existing naming structure:
`Argyll_V<version>_macOS_universal_bin.tgz`
- Ensure `bin/`, `License.txt`, and standard documentation are included within the `Argyll_V<version>/` root folder structure inside the archive.
3. **CI / Release Workflow**:
- Add a step in the release workflow (running on `macos-15`) to assemble and upload `_macOS_universal_bin.tgz` alongside `_macOS_x86_64_bin.tgz` and `_macOS_arm64_bin.tgz`.
---
### Verification & Acceptance Criteria
- Running `file bin/<binary>` on all generated binaries in the universal archive confirms:
`Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]`
- Binaries execute natively on both Apple Silicon (native arm64) and Intel (native x86_64) macOS environments.
- Release asset `Argyll_V<tag>_macOS_universal_bin.tgz` is published to repository releases.
Resolved in PR #28 and released in v3.5.0-ICCery.1.3. Universal macOS binaries (Argyll_*_macOS_universal_bin.tgz) are now built and published as part of the release workflow.
Resolved in [PR #28](https://git.i3omb.com/gronod/argyllcms/pulls/28) and released in **[v3.5.0-ICCery.1.3](https://git.i3omb.com/gronod/argyllcms/releases/tag/v3.5.0-ICCery.1.3)**. Universal macOS binaries (`Argyll_*_macOS_universal_bin.tgz`) are now built and published as part of the release workflow.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Overview & Objective
Add a build and packaging step to the release pipeline to produce and publish a macOS Universal Binary archive (
_macOS_universal_bin.tgz) containing dual-architecture (x86_64Intel +arm64Apple Silicon) fat Mach-O binaries for all ArgyllCMS utilities.Motivation & Context
Downstream applications such as ICCery (ICCery#164) require a universal build of ArgyllCMS to bundle into native macOS Universal (
universal-apple-darwin) packages. Rather than requiring downstream packaging to fetch and stitch single-architecture archives manually, thegronod/argyllcmsbuild pipeline should publish a first-class universal archive.Implementation Details
x86_64(usingmacos-15-intelrunner or cross-compilation) andarm64(usingmacos-15runner).bin/(instlist,targen,printtarg,chartread,average,colprof,profcheck,iccgamut,cctiff,dispcal,dispread,illumread,spec2cie,synthacc, etc.), create a universal binary usinglipo:Argyll_V<version>_macOS_universal_bin.tgzbin/,License.txt, and standard documentation are included within theArgyll_V<version>/root folder structure inside the archive.macos-15) to assemble and upload_macOS_universal_bin.tgzalongside_macOS_x86_64_bin.tgzand_macOS_arm64_bin.tgz.Verification & Acceptance Criteria
file bin/<binary>on all generated binaries in the universal archive confirms:Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]Argyll_V<tag>_macOS_universal_bin.tgzis published to repository releases.Referenced by downstream tracking issue gronod/ICCery#164 (feat: Add macOS Universal Binary build target).
The ICCery universal packaging pipeline will vendor
Argyll_V<version>_macOS_universal_bin.tgzonce published.Resolved in PR #28 and released in v3.5.0-ICCery.1.3. Universal macOS binaries (
Argyll_*_macOS_universal_bin.tgz) are now built and published as part of the release workflow.