From c8b1d308c7206cb50816e87737bb189e617910a8 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 25 Feb 2026 21:34:15 +0800 Subject: [PATCH 1/5] Add Compose source support --- .github/workflows/compute.yml | 44 ++++++++++++++++++----------------- Package.resolved | 11 +-------- Package.swift | 35 +++++++++++++++++++++------- 3 files changed, 50 insertions(+), 40 deletions(-) diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index 9eaa6d0..a62cdff 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -7,28 +7,28 @@ on: branches: [main] jobs: - # TODO: Enable once Compute binary is available for Linux or source integration is supported - # compute_ubuntu_build: - # name: Build with Compute on Ubuntu - # strategy: - # fail-fast: false - # matrix: - # swift_version: ["6.1.3"] - # runs-on: ubuntu-22.04 - # env: - # OPENATTRIBUTEGRAPH_WERROR: 1 - # OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 - # OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 - # container: swift:${{ matrix.swift_version }}-jammy - # steps: - # - uses: actions/checkout@v4 - # - name: Checkout Swift headers - # uses: ./.github/actions/checkout-swift-headers - # - name: Build in debug mode - # run: swift build -c debug + compute_ubuntu_build: + name: Build with Compute (source) on Ubuntu + strategy: + fail-fast: false + matrix: + swift_version: ["6.1.3"] + runs-on: ubuntu-22.04 + env: + OPENATTRIBUTEGRAPH_WERROR: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 0 + OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 + container: swift:${{ matrix.swift_version }}-jammy + steps: + - uses: actions/checkout@v4 + - name: Checkout Swift headers + uses: ./.github/actions/checkout-swift-headers + - name: Build in debug mode + run: swift build -c debug compute_macos_build: - name: Build with Compute on macOS + name: Build with Compute (binary) on macOS strategy: fail-fast: false matrix: @@ -38,6 +38,7 @@ jobs: env: OPENATTRIBUTEGRAPH_WERROR: 1 OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 1 OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 steps: - uses: actions/checkout@v4 @@ -51,7 +52,7 @@ jobs: run: swift build -c debug compute_ios_build: - name: Build with Compute on iOS + name: Build with Compute (binary) on iOS strategy: fail-fast: false matrix: @@ -65,6 +66,7 @@ jobs: env: OPENATTRIBUTEGRAPH_WERROR: 1 OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 1 OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 steps: - uses: actions/checkout@v4 diff --git a/Package.resolved b/Package.resolved index 1d57a55..8cbdc97 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,15 +1,6 @@ { - "originHash" : "c701311871fbdd16aa96ae8f8d658ebd97d689e34d15195d51d8f60598d9ea59", + "originHash" : "33d7ce05531763737439f2eb0082fad396ce541b04d40d930279ac9528c562db", "pins" : [ - { - "identity" : "darwinprivateframeworks", - "kind" : "remoteSourceControl", - "location" : "https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git", - "state" : { - "branch" : "main", - "revision" : "18d26f5dcc334468fad0904697233faeb41a1805" - } - }, { "identity" : "swift-numerics", "kind" : "remoteSourceControl", diff --git a/Package.swift b/Package.swift index 155135f..8e942ab 100644 --- a/Package.swift +++ b/Package.swift @@ -145,7 +145,7 @@ let libraryEvolutionCondition = envBoolValue("LIBRARY_EVOLUTION", default: build let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: false) let useLocalDeps = envBoolValue("USE_LOCAL_DEPS") -let computeCondition = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE", default: false) +let computeCondition = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE", default: true) let attributeGraphCondition = envBoolValue("OPENATTRIBUTESHIMS_ATTRIBUTEGRAPH", default: buildForDarwinPlatform && !isSPIBuild) // MARK: - Shared Settings @@ -230,13 +230,17 @@ extension Target { self.swiftSettings = swiftSettings } - func addComputeBinarySettings() { + func addComputeSettings() { dependencies.append( "Compute", ) var swiftSettings = swiftSettings ?? [] swiftSettings.append(.define("OPENATTRIBUTEGRAPH_COMPUTE")) self.swiftSettings = swiftSettings + + var linkerSettings = linkerSettings ?? [] + linkerSettings.append(.linkedLibrary("swiftDemangle")) + self.linkerSettings = linkerSettings } } @@ -272,16 +276,20 @@ let swiftClonePlugin = Target.plugin( // MARK: - Targets let platformTarget = Target.target( - name: "Platform", + // Avoid target collision with Compute package + name: "OpenAttributeGraphPlatform", + path: "Sources/Platform", cSettings: sharedCSettings + [ .define("_GNU_SOURCE", .when(platforms: [.linux])), ] ) let utilitiesTarget = Target.target( - name: "Utilities", + // Avoid target collision with Compute package + name: "OpenAttributeGraphUtilities", dependencies: [ .target(name: platformTarget.name), ], + path: "Sources/Utilities", cxxSettings: sharedCxxSettings ) // FIXME: Merge into one target @@ -365,7 +373,7 @@ let package = Package( name: "OpenAttributeGraph", products: [ .library(name: "OpenAttributeGraph", type: .dynamic, targets: [openAttributeGraphTarget.name, openAttributeGraphCxxTarget.name]), - .library(name: "OpenAttributeGraphShims", type: .dynamic, targets: [openAttributeGraphTarget.name, openAttributeGraphCxxTarget.name, openAttributeGraphShimsTarget.name]), + .library(name: "OpenAttributeGraphShims", type: .dynamic, targets: [openAttributeGraphShimsTarget.name]), ], dependencies: [ .package(url: "https://github.com/apple/swift-numerics", from: "1.0.2"), @@ -421,9 +429,10 @@ if buildForDarwinPlatform { } if computeCondition { - let computeBinary = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY", default: true) + let computeBinary = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY", default: false) if computeBinary { let computeVersion = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_VERSION", default: "0.0.1") + // TODO: Use upstream link when avaiable. Tracked on https://github.com/jcmosc/Compute/issues/20 let computeURL = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_URL", default: "https://github.com/Kyle-Ye/Compute/releases/download/\(computeVersion)/Compute.xcframework.zip") let computeChecksum = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_CHECKSUM", default: "95a256da2055d7c73184aeb9be088ba7019f7ea79b8a31e2dd930526c5ccbe8f") package.targets.append( @@ -431,12 +440,20 @@ if computeCondition { name: "Compute", url: computeURL, checksum: computeChecksum - ), + ) ) - openAttributeGraphShimsTarget.addComputeBinarySettings() } else { - // TODO + let computeRepo: Package.Dependency +// if useLocalDeps { + // NOTE: Only local Compute dependency is supported as it need extra setup to build + computeRepo = Package.Dependency.package(path: "../Compute") +// } else { +// // TODO: No release tag or branch yet. +// computeRepo = Package.Dependency.package(url: "https://github.com/jcmosc/Compute", revision: "34c5af92008a2db18e8b598fb426e3e2872e752c") +// } + package.dependencies.append(computeRepo) } + openAttributeGraphShimsTarget.addComputeSettings() package.platforms = [.iOS(.v18), .macOS(.v15), .macCatalyst(.v18), .tvOS(.v18), .watchOS(.v10), .visionOS(.v2)] } else if attributeGraphCondition { setupDPFDependency() From 3db3249e44516ecc86182e885e1934fa55e6ce3a Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 25 Feb 2026 22:46:24 +0800 Subject: [PATCH 2/5] Add remote compute source support --- Package.resolved | 11 ++++++++++- Package.swift | 15 +++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Package.resolved b/Package.resolved index 8cbdc97..a24cbc5 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,6 +1,15 @@ { - "originHash" : "33d7ce05531763737439f2eb0082fad396ce541b04d40d930279ac9528c562db", + "originHash" : "d32f9ea321b4c6a7c737bf76fdda48ea4812ceda5b212c6730f14b9a5c3d00a0", "pins" : [ + { + "identity" : "darwinprivateframeworks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git", + "state" : { + "branch" : "main", + "revision" : "18d26f5dcc334468fad0904697233faeb41a1805" + } + }, { "identity" : "swift-numerics", "kind" : "remoteSourceControl", diff --git a/Package.swift b/Package.swift index 8e942ab..589080a 100644 --- a/Package.swift +++ b/Package.swift @@ -145,7 +145,7 @@ let libraryEvolutionCondition = envBoolValue("LIBRARY_EVOLUTION", default: build let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: false) let useLocalDeps = envBoolValue("USE_LOCAL_DEPS") -let computeCondition = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE", default: true) +let computeCondition = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE", default: false) let attributeGraphCondition = envBoolValue("OPENATTRIBUTESHIMS_ATTRIBUTEGRAPH", default: buildForDarwinPlatform && !isSPIBuild) // MARK: - Shared Settings @@ -444,13 +444,12 @@ if computeCondition { ) } else { let computeRepo: Package.Dependency -// if useLocalDeps { - // NOTE: Only local Compute dependency is supported as it need extra setup to build - computeRepo = Package.Dependency.package(path: "../Compute") -// } else { -// // TODO: No release tag or branch yet. -// computeRepo = Package.Dependency.package(url: "https://github.com/jcmosc/Compute", revision: "34c5af92008a2db18e8b598fb426e3e2872e752c") -// } + if useLocalDeps { + computeRepo = Package.Dependency.package(path: "../Compute") + } else { + // TODO: No release tag or branch yet. + computeRepo = Package.Dependency.package(url: "https://github.com/jcmosc/Compute", revision: "34c5af92008a2db18e8b598fb426e3e2872e752c") + } package.dependencies.append(computeRepo) } openAttributeGraphShimsTarget.addComputeSettings() From c3aafd02ba2958696cef9f6f70b0f9c9ad4d7924 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 25 Feb 2026 22:52:30 +0800 Subject: [PATCH 3/5] Update Compute Ubuntu CI for source build requirements --- .github/workflows/compute.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index a62cdff..781001f 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - swift_version: ["6.1.3"] + swift_version: ["6.2"] runs-on: ubuntu-22.04 env: OPENATTRIBUTEGRAPH_WERROR: 1 @@ -21,11 +21,15 @@ jobs: OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 container: swift:${{ matrix.swift_version }}-jammy steps: + - name: Install dependencies + run: | + apt-get update + apt-get install -y libssl-dev - uses: actions/checkout@v4 - name: Checkout Swift headers uses: ./.github/actions/checkout-swift-headers - name: Build in debug mode - run: swift build -c debug + run: swift build -c debug -Xcc -Wno-elaborated-enum-base compute_macos_build: name: Build with Compute (binary) on macOS From 324d6996e2c9c7e296790843b7e91ed475b4a104 Mon Sep 17 00:00:00 2001 From: Kyle Date: Wed, 25 Feb 2026 23:31:23 +0800 Subject: [PATCH 4/5] Fix SSH submodule checkout failure for Compute source build on CI --- .github/workflows/compute.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index 781001f..a816188 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -25,6 +25,9 @@ jobs: run: | apt-get update apt-get install -y libssl-dev + # Fix SSH submodule checkout failure for git@github.com:jcmosc/swift-runtime-headers.git + - name: Configure git to use HTTPS instead of SSH + run: git config --global url."https://github.com/".insteadOf "git@github.com:" - uses: actions/checkout@v4 - name: Checkout Swift headers uses: ./.github/actions/checkout-swift-headers From 6d0cd1484c567238e19914ae19e95520e18e8a98 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 26 Feb 2026 00:28:59 +0800 Subject: [PATCH 5/5] Add Linux Compute build scripts and use local deps on CI --- .github/workflows/compute.yml | 21 ++++++++++----------- Package.resolved | 2 +- Package.swift | 10 +++++----- Scripts/CI/compute_setup.sh | 29 +++++++++++++++++++++++++++++ Scripts/CI/linux_compute_build.sh | 18 ++++++++++++++++++ 5 files changed, 63 insertions(+), 17 deletions(-) create mode 100755 Scripts/CI/compute_setup.sh create mode 100755 Scripts/CI/linux_compute_build.sh diff --git a/.github/workflows/compute.yml b/.github/workflows/compute.yml index a816188..a91ff78 100644 --- a/.github/workflows/compute.yml +++ b/.github/workflows/compute.yml @@ -15,20 +15,19 @@ jobs: swift_version: ["6.2"] runs-on: ubuntu-22.04 env: - OPENATTRIBUTEGRAPH_WERROR: 1 + # -Wno-elaborated-enum-base is not working for Compute dependency. Disable warnings-as-errors for now to unblock CI. We should fix the underlying issue and re-enable warnings-as-errors in the future. + # OPENATTRIBUTEGRAPH_WERROR: 1 + OPENATTRIBUTEGRAPH_WERROR: 0 OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 - OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 0 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY: 0 + OPENATTRIBUTEGRAPH_USE_LOCAL_DEPS: 1 OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 container: swift:${{ matrix.swift_version }}-jammy steps: - - name: Install dependencies - run: | - apt-get update - apt-get install -y libssl-dev - # Fix SSH submodule checkout failure for git@github.com:jcmosc/swift-runtime-headers.git - - name: Configure git to use HTTPS instead of SSH - run: git config --global url."https://github.com/".insteadOf "git@github.com:" - uses: actions/checkout@v4 + - name: Set up Linux build environment + run: Scripts/CI/linux_compute_build.sh + shell: bash - name: Checkout Swift headers uses: ./.github/actions/checkout-swift-headers - name: Build in debug mode @@ -45,7 +44,7 @@ jobs: env: OPENATTRIBUTEGRAPH_WERROR: 1 OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 - OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY: 1 OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 steps: - uses: actions/checkout@v4 @@ -73,7 +72,7 @@ jobs: env: OPENATTRIBUTEGRAPH_WERROR: 1 OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE: 1 - OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_BINARY: 1 + OPENATTRIBUTEGRAPH_OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY: 1 OPENATTRIBUTEGRAPH_COMPATIBILITY_TEST: 0 steps: - uses: actions/checkout@v4 diff --git a/Package.resolved b/Package.resolved index a24cbc5..30e3922 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "d32f9ea321b4c6a7c737bf76fdda48ea4812ceda5b212c6730f14b9a5c3d00a0", + "originHash" : "55d8d91d8066a1fb489ac9e0a78c6722915b2e81496637b03caf00b8047b7d1c", "pins" : [ { "identity" : "darwinprivateframeworks", diff --git a/Package.swift b/Package.swift index 589080a..5d46086 100644 --- a/Package.swift +++ b/Package.swift @@ -239,7 +239,7 @@ extension Target { self.swiftSettings = swiftSettings var linkerSettings = linkerSettings ?? [] - linkerSettings.append(.linkedLibrary("swiftDemangle")) + linkerSettings.append(.linkedLibrary("swiftDemangle", .when(platforms: .darwinPlatforms))) self.linkerSettings = linkerSettings } } @@ -429,12 +429,12 @@ if buildForDarwinPlatform { } if computeCondition { - let computeBinary = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY", default: false) + let computeBinary = envBoolValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY", default: false) if computeBinary { - let computeVersion = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_VERSION", default: "0.0.1") + let computeVersion = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY_VERSION", default: "0.0.1") // TODO: Use upstream link when avaiable. Tracked on https://github.com/jcmosc/Compute/issues/20 - let computeURL = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_URL", default: "https://github.com/Kyle-Ye/Compute/releases/download/\(computeVersion)/Compute.xcframework.zip") - let computeChecksum = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_BINARY_CHECKSUM", default: "95a256da2055d7c73184aeb9be088ba7019f7ea79b8a31e2dd930526c5ccbe8f") + let computeURL = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY_URL", default: "https://github.com/Kyle-Ye/Compute/releases/download/\(computeVersion)/Compute.xcframework.zip") + let computeChecksum = envStringValue("OPENATTRIBUTESHIMS_COMPUTE_USE_BINARY_CHECKSUM", default: "95a256da2055d7c73184aeb9be088ba7019f7ea79b8a31e2dd930526c5ccbe8f") package.targets.append( .binaryTarget( name: "Compute", diff --git a/Scripts/CI/compute_setup.sh b/Scripts/CI/compute_setup.sh new file mode 100755 index 0000000..6415913 --- /dev/null +++ b/Scripts/CI/compute_setup.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# A `realpath` alternative using the default C implementation. +filepath() { + [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}" +} + +REPO_ROOT="$(dirname $(dirname $(dirname $(filepath $0))))" +cd $REPO_ROOT + +clone_checkout_compute() { + cd $REPO_ROOT + revision=$(Scripts/CI/get_revision.sh compute) + cd .. + if [ ! -d Compute ]; then + git clone https://github.com/jcmosc/Compute.git + cd Compute + else + echo "Compute already exists, skipping clone." + cd Compute + git fetch --all --quiet + git stash --quiet || true + git reset --hard --quiet origin/main + fi + git checkout --quiet $revision + git submodule update --init --recursive +} + +clone_checkout_compute diff --git a/Scripts/CI/linux_compute_build.sh b/Scripts/CI/linux_compute_build.sh new file mode 100755 index 0000000..faa5268 --- /dev/null +++ b/Scripts/CI/linux_compute_build.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# A `realpath` alternative using the default C implementation. +filepath() { + [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}" +} + +REPO_ROOT="$(dirname $(dirname $(dirname $(filepath $0))))" +cd $REPO_ROOT + +# Fix SSH submodule checkout failure for git@github.com:jcmosc/swift-runtime-headers.git +git config --global url."https://github.com/".insteadOf "git@github.com:" + +# Install Linux dependencies +apt-get update +apt-get install -y libssl-dev + +Scripts/CI/compute_setup.sh \ No newline at end of file