Skip to content

Commit 334b469

Browse files
syoyoclaude
andcommitted
Add multi-platform support: Linux/Windows/macOS ARM64 builds
Add support for 3 additional platforms: - Linux ARM64 (Ubuntu 24.04 ARM64) - Windows ARM64 (Windows Server 2022 ARM64) - macOS ARM64 (Apple Silicon M1/M2/M3) Total platforms now supported: 5 - Linux x86_64 (existing) - Linux ARM64 (new) - Windows x86_64 (existing) - Windows ARM64 (new) - macOS ARM64 (new) Changes: CI Workflows (build on every push/PR): - .github/workflows/build-minsizerel-linux-arm64.yml - .github/workflows/build-minsizerel-windows-arm64.yml - .github/workflows/build-minsizerel-macos-arm64.yml Release Workflows (triggered by git tags): - .github/workflows/release-linux-arm64.yml - .github/workflows/release-windows-arm64.yml - .github/workflows/release-macos-arm64.yml macOS Build Scripts: - 01-checkout-macos.sh - 02-download-tbb-macos.sh - 03-configure-minsizerel-macos.sh - 04-build-minsizerel-macos.sh - 05-setup-env-minsizerel-macos.sh Documentation: - README.md: Updated with all 5 platforms - .github/WORKFLOWS.md: Comprehensive documentation for all workflows Notes: - Linux ARM64 uses ubuntu-24.04-arm64 runner - Windows ARM64 uses MSVC ARM64 cross-compilation - macOS ARM64 uses macos-14 runner (native Apple Silicon) - All platforms build MinSizeRel variant - Automated releases now build for all 5 platforms in parallel Usage: git tag v1.0.0 && git push origin v1.0.0 # Triggers builds for all 5 platforms simultaneously Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
1 parent fb7a0a5 commit 334b469

13 files changed

+1525
-37
lines changed

.github/WORKFLOWS.md

Lines changed: 220 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
# GitHub Actions Workflows
22

3-
This repository contains automated workflows for building OpenUSD MinSizeRel binaries on both Linux and Windows platforms.
3+
This repository contains automated workflows for building OpenUSD MinSizeRel binaries on multiple platforms:
4+
- Linux x86_64 and ARM64
5+
- Windows x86_64 and ARM64
6+
- macOS ARM64 (Apple Silicon)
47

5-
## Workflows
8+
## CI Workflows (Build on every push/PR)
69

7-
### 1. Build OpenUSD MinSizeRel Linux (`build-minsizerel.yml`)
10+
### 1. Build OpenUSD MinSizeRel Linux x86_64 (`build-minsizerel.yml`)
811

912
**Triggers:**
1013
- Push to `main` or `master` branch
@@ -33,7 +36,36 @@ cd openusd-minsizerel-linux-x86_64
3336
source setup-usd-env.sh
3437
```
3538

36-
### 2. Build OpenUSD MinSizeRel Windows (`build-minsizerel-windows.yml`)
39+
### 2. Build OpenUSD MinSizeRel Linux ARM64 (`build-minsizerel-linux-arm64.yml`)
40+
41+
**Triggers:**
42+
- Push to `main` or `master` branch
43+
- Pull requests to `main` or `master` branch
44+
- Manual dispatch via GitHub UI
45+
46+
**What it does:**
47+
1. Sets up Ubuntu ARM64 build environment
48+
2. Installs dependencies (cmake, ninja, uv, etc.)
49+
3. Clones OpenUSD repository
50+
4. Builds TBB library
51+
5. Configures and builds OpenUSD in MinSizeRel mode
52+
6. Verifies the build
53+
7. Packages and uploads artifacts
54+
55+
**Artifacts:**
56+
- `openusd-minsizerel-linux-arm64.tar.gz` - Compressed installation (retained 30 days)
57+
- `openusd-minsizerel-installation-linux-arm64` - Uncompressed directory (retained 7 days)
58+
59+
**Usage:**
60+
```bash
61+
# Download artifact from GitHub Actions run
62+
# Extract and use
63+
tar -xzf openusd-minsizerel-linux-arm64.tar.gz
64+
cd openusd-minsizerel-linux-arm64
65+
source setup-usd-env.sh
66+
```
67+
68+
### 3. Build OpenUSD MinSizeRel Windows x86_64 (`build-minsizerel-windows.yml`)
3769

3870
**Triggers:**
3971
- Push to `main` or `master` branch
@@ -62,7 +94,67 @@ cd openusd-minsizerel-windows-x86_64
6294
.\setup-usd-env.bat
6395
```
6496

65-
### 3. Build and Release Linux (`release.yml`)
97+
### 4. Build OpenUSD MinSizeRel Windows ARM64 (`build-minsizerel-windows-arm64.yml`)
98+
99+
**Triggers:**
100+
- Push to `main` or `master` branch
101+
- Pull requests to `main` or `master` branch
102+
- Manual dispatch via GitHub UI
103+
104+
**What it does:**
105+
1. Sets up Windows ARM64 build environment (Visual Studio 2022)
106+
2. Installs dependencies (cmake, ninja, uv)
107+
3. Clones OpenUSD repository
108+
4. Builds TBB library for ARM64
109+
5. Configures and builds OpenUSD in MinSizeRel mode
110+
6. Verifies the build
111+
7. Packages and uploads artifacts
112+
113+
**Artifacts:**
114+
- `openusd-minsizerel-windows-arm64.zip` - Compressed installation (retained 30 days)
115+
- `openusd-minsizerel-installation-windows-arm64` - Uncompressed directory (retained 7 days)
116+
117+
**Usage:**
118+
```powershell
119+
# Download artifact from GitHub Actions run
120+
# Extract and use
121+
Expand-Archive openusd-minsizerel-windows-arm64.zip
122+
cd openusd-minsizerel-windows-arm64
123+
.\setup-usd-env.bat
124+
```
125+
126+
### 5. Build OpenUSD MinSizeRel macOS ARM64 (`build-minsizerel-macos-arm64.yml`)
127+
128+
**Triggers:**
129+
- Push to `main` or `master` branch
130+
- Pull requests to `main` or `master` branch
131+
- Manual dispatch via GitHub UI
132+
133+
**What it does:**
134+
1. Sets up macOS ARM64 build environment (macOS 14 - M1/M2/M3)
135+
2. Installs dependencies (cmake, ninja via Homebrew, uv)
136+
3. Clones OpenUSD repository
137+
4. Builds TBB library for ARM64
138+
5. Configures and builds OpenUSD in MinSizeRel mode
139+
6. Verifies the build
140+
7. Packages and uploads artifacts
141+
142+
**Artifacts:**
143+
- `openusd-minsizerel-macos-arm64.tar.gz` - Compressed installation (retained 30 days)
144+
- `openusd-minsizerel-installation-macos-arm64` - Uncompressed directory (retained 7 days)
145+
146+
**Usage:**
147+
```bash
148+
# Download artifact from GitHub Actions run
149+
# Extract and use
150+
tar -xzf openusd-minsizerel-macos-arm64.tar.gz
151+
cd openusd-minsizerel-macos-arm64
152+
source setup-usd-env.sh
153+
```
154+
155+
## Release Workflows (Triggered by git tags)
156+
157+
### 6. Build and Release Linux x86_64 (`release.yml`)
66158

67159
**Triggers:**
68160
- **Push a git tag** starting with 'v' (e.g., `v1.0.0`) - **Automated release**
@@ -100,7 +192,26 @@ Go to Actions → Build and Release → Run workflow
100192
- Check "Create a new release"
101193
- Enter release tag (e.g., `v1.0.0`)
102194

103-
### 4. Build and Release Windows (`release-windows.yml`)
195+
### 7. Build and Release Linux ARM64 (`release-linux-arm64.yml`)
196+
197+
**Triggers:**
198+
- **Push a git tag** starting with 'v' (e.g., `v1.0.0`) - **Automated release**
199+
- GitHub release created
200+
- Manual dispatch with optional release creation
201+
202+
**What it does:**
203+
1. Builds OpenUSD MinSizeRel on Ubuntu ARM64
204+
2. Generates build information file
205+
3. Creates versioned package
206+
4. Calculates SHA256 checksums
207+
5. **Automatically creates a GitHub release** and attaches artifacts
208+
209+
**Release Artifacts:**
210+
- `openusd-X.Y.Z-minsizerel-linux-arm64.tar.gz` - Versioned build
211+
- `checksums-linux-arm64.txt` - SHA256 checksums
212+
- `BUILD_INFO.txt` - Detailed build information (included in tarball)
213+
214+
### 8. Build and Release Windows x86_64 (`release-windows.yml`)
104215

105216
**Triggers:**
106217
- **Push a git tag** starting with 'v' (e.g., `v1.0.0`) - **Automated release**
@@ -119,17 +230,62 @@ Go to Actions → Build and Release → Run workflow
119230
- `checksums.txt` - SHA256 checksums
120231
- `BUILD_INFO.txt` - Detailed build information (included in ZIP)
121232

233+
### 9. Build and Release Windows ARM64 (`release-windows-arm64.yml`)
234+
235+
**Triggers:**
236+
- **Push a git tag** starting with 'v' (e.g., `v1.0.0`) - **Automated release**
237+
- GitHub release created
238+
- Manual dispatch with optional release creation
239+
240+
**What it does:**
241+
1. Builds OpenUSD MinSizeRel on Windows ARM64
242+
2. Generates build information file
243+
3. Creates versioned package
244+
4. Calculates SHA256 checksums
245+
5. **Automatically creates a GitHub release** and attaches artifacts
246+
247+
**Release Artifacts:**
248+
- `openusd-X.Y.Z-minsizerel-windows-arm64.zip` - Versioned build
249+
- `checksums-windows-arm64.txt` - SHA256 checksums
250+
- `BUILD_INFO.txt` - Detailed build information (included in ZIP)
251+
252+
### 10. Build and Release macOS ARM64 (`release-macos-arm64.yml`)
253+
254+
**Triggers:**
255+
- **Push a git tag** starting with 'v' (e.g., `v1.0.0`) - **Automated release**
256+
- GitHub release created
257+
- Manual dispatch with optional release creation
258+
259+
**What it does:**
260+
1. Builds OpenUSD MinSizeRel on macOS ARM64 (M1/M2/M3)
261+
2. Generates build information file
262+
3. Creates versioned package
263+
4. Calculates SHA256 checksums
264+
5. **Automatically creates a GitHub release** and attaches artifacts
265+
266+
**Release Artifacts:**
267+
- `openusd-X.Y.Z-minsizerel-macos-arm64.tar.gz` - Versioned build
268+
- `checksums-macos-arm64.txt` - SHA256 checksums
269+
- `BUILD_INFO.txt` - Detailed build information (included in tarball)
270+
122271
**Creating a Release:**
123272

124-
**Option 1: Automated (Recommended)**
273+
**Automated (Recommended)**
125274
```bash
126-
# Tag and push (same as Linux - both workflows run in parallel)
275+
# Tag and push - ALL 5 platform workflows run in parallel
127276
git tag v1.0.0
128277
git push origin v1.0.0
129278
```
130279

131-
**Option 2: Manual**
132-
Go to Actions → Build and Release (Windows) → Run workflow
280+
This triggers builds for:
281+
- Linux x86_64
282+
- Linux ARM64
283+
- Windows x86_64
284+
- Windows ARM64
285+
- macOS ARM64
286+
287+
**Manual**
288+
Go to Actions → Select platform workflow → Run workflow
133289
- Check "Create a new release"
134290
- Enter release tag (e.g., `v1.0.0`)
135291

@@ -140,10 +296,13 @@ All workflows build with:
140296
- **Namespace:** pxr_lte
141297
- **Library Prefix:** lte
142298
- **Monolithic:** ON
143-
- **Library Size:** ~45 MB (Linux) / varies (Windows)
299+
- **Library Size:** ~45 MB (Linux x86_64) / varies by platform
144300
- **Platforms:**
145-
- Linux: Ubuntu latest (currently 22.04)
146-
- Windows: Windows Server 2022
301+
- Linux x86_64: Ubuntu latest (currently 22.04)
302+
- Linux ARM64: Ubuntu 24.04 ARM64
303+
- Windows x86_64: Windows Server 2022
304+
- Windows ARM64: Windows Server 2022 ARM64
305+
- macOS ARM64: macOS 14 (Apple Silicon M1/M2/M3)
147306

148307
## Environment Requirements
149308

@@ -156,26 +315,37 @@ All workflows build with:
156315
- uv (Python package manager)
157316

158317
### Windows Workflows Install:
159-
- Visual Studio 2022 (MSVC)
318+
- Visual Studio 2022 (MSVC) - configured for x86_64 or ARM64
160319
- cmake
161320
- ninja (via Chocolatey)
162321
- uv (Python package manager)
163322

323+
### macOS Workflows Install:
324+
- cmake
325+
- ninja (via Homebrew)
326+
- uv (Python package manager)
327+
- Xcode Command Line Tools (automatic)
328+
164329
## Build Time
165330

166331
Typical build times on GitHub Actions runners:
167-
- **Linux:** ~30-45 minutes
168-
- **Windows:** ~35-50 minutes
332+
- **Linux x86_64:** ~30-45 minutes
333+
- **Linux ARM64:** ~30-45 minutes
334+
- **Windows x86_64:** ~35-50 minutes
335+
- **Windows ARM64:** ~35-50 minutes
336+
- **macOS ARM64:** ~25-40 minutes
169337

170338
## Artifact Usage
171339

172340
After downloading an artifact:
173341

174-
### Linux
342+
### Linux (x86_64 and ARM64)
175343

176344
```bash
177-
# Extract
345+
# Extract (use appropriate file for your platform)
178346
tar -xzf openusd-*-minsizerel-linux-x86_64.tar.gz
347+
# or
348+
tar -xzf openusd-*-minsizerel-linux-arm64.tar.gz
179349

180350
# The extracted directory contains:
181351
# - bin/ USD command-line tools
@@ -192,11 +362,13 @@ usdcat --help
192362
python -c "from pxr import Usd; print(Usd.GetVersion())"
193363
```
194364

195-
### Windows
365+
### Windows (x86_64 and ARM64)
196366

197367
```powershell
198-
# Extract
368+
# Extract (use appropriate file for your platform)
199369
Expand-Archive openusd-*-minsizerel-windows-x86_64.zip
370+
# or
371+
Expand-Archive openusd-*-minsizerel-windows-arm64.zip
200372
201373
# The extracted directory contains:
202374
# - bin/ USD command-line tools (.exe)
@@ -213,13 +385,40 @@ usdcat --help
213385
python -c "from pxr import Usd; print(Usd.GetVersion())"
214386
```
215387

388+
### macOS ARM64 (Apple Silicon)
389+
390+
```bash
391+
# Extract
392+
tar -xzf openusd-*-minsizerel-macos-arm64.tar.gz
393+
394+
# The extracted directory contains:
395+
# - bin/ USD command-line tools
396+
# - lib/ Shared libraries (lteusd_ms.dylib)
397+
# - include/ Header files
398+
# - lib/python/ Python bindings
399+
# - setup-usd-env.sh Environment setup script
400+
401+
# Setup environment
402+
source setup-usd-env.sh
403+
404+
# Verify
405+
usdcat --help
406+
python -c "from pxr import Usd; print(Usd.GetVersion())"
407+
```
408+
216409
## Notes
217410

218-
- Artifacts are built for **Linux x86_64** and **Windows x86_64**
411+
- Artifacts are built for **5 platforms:**
412+
- Linux x86_64
413+
- Linux ARM64
414+
- Windows x86_64
415+
- Windows ARM64
416+
- macOS ARM64 (Apple Silicon M1/M2/M3)
219417
- TBB library is included in the distribution
220418
- Python version is determined by the GitHub Actions runner (currently Python 3.10+)
221419
- The build excludes imaging, MaterialX, OpenVDB, and other optional features
222420
- `.pyc` files and `__pycache__` directories are excluded from artifacts
421+
- macOS builds use `DYLD_LIBRARY_PATH` instead of `LD_LIBRARY_PATH`
223422

224423
## Customization
225424

0 commit comments

Comments
 (0)