Skip to content

Commit

Permalink
chore: add xcframework
Browse files Browse the repository at this point in the history
  • Loading branch information
jerson committed May 23, 2024
1 parent 0e14898 commit 82e59fd
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 9 deletions.
29 changes: 29 additions & 0 deletions .github/workflows/ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,33 @@ jobs:
uses: actions/upload-artifact@v3
with:
name: librsa_bridge_ios
path: output.tar.gz

xcframework:
runs-on: macos-14
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '^1.21'
- name: Build Go
run: ./go.sh 1.21.0 fastrsa
- name: Build
run: |
export PATH="/tmp/go/bin:$PATH"
make binding_ios_xcframework
- name: Compress
run: tar -czvf output.tar.gz -C output/binding/ios .
- if: ${{ env.VERSION!='' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
asset_name: librsa_bridge_ios_xcframework_$tag.tar.gz
file: output.tar.gz
tag: ${{ env.VERSION }}
overwrite: true
- if: ${{ env.VERSION=='' }}
uses: actions/upload-artifact@v3
with:
name: librsa_bridge_ios_xcframework
path: output.tar.gz
44 changes: 36 additions & 8 deletions Makefile.ios
Original file line number Diff line number Diff line change
@@ -1,25 +1,53 @@
IOS_OUTPUT?=ios
IOS_BINDING_OUTPUT?=$(BINDING_OUTPUT)/$(IOS_OUTPUT)
IOS_BINDING_NAME?=$(BINDING_NAME).a

binding_ios: binding_ios_arm64 binding_ios_x86_64
lipo $(IOS_BINDING_OUTPUT)/x86_64.a $(IOS_BINDING_OUTPUT)/arm64.a $(IOS_BINDING_OUTPUT)/armv7.a -create -output $(IOS_BINDING_OUTPUT)/$(BINDING_NAME).a
cp $(IOS_BINDING_OUTPUT)/arm64.h $(IOS_BINDING_OUTPUT)/$(BINDING_NAME).h
rm $(IOS_BINDING_OUTPUT)/arm64.h $(IOS_BINDING_OUTPUT)/arm64.a $(IOS_BINDING_OUTPUT)/x86_64.h $(IOS_BINDING_OUTPUT)/x86_64.a $(IOS_BINDING_OUTPUT)/armv7.h $(IOS_BINDING_OUTPUT)/armv7.a
binding_ios: binding_ios_arm64 binding_ios_x86_64_sim
lipo $(IOS_BINDING_OUTPUT)/x86_64_sim/$(IOS_BINDING_NAME) $(IOS_BINDING_OUTPUT)/arm64/$(IOS_BINDING_NAME) $(IOS_BINDING_OUTPUT)/armv7/$(IOS_BINDING_NAME) -create -output $(IOS_BINDING_OUTPUT)/$(IOS_BINDING_NAME)
cp $(IOS_BINDING_OUTPUT)/arm64/*.h $(IOS_BINDING_OUTPUT)
rm -rf $(IOS_BINDING_OUTPUT)/arm64 $(IOS_BINDING_OUTPUT)/x86_64_sim $(IOS_BINDING_OUTPUT)/armv7

binding_ios_test: binding_ios_arm64 binding_ios_x86_64_sim binding_ios_arm64_sim
mkdir -p $(IOS_BINDING_OUTPUT)/sim
lipo $(IOS_BINDING_OUTPUT)/x86_64_sim/$(IOS_BINDING_NAME) $(IOS_BINDING_OUTPUT)/arm64_sim/$(IOS_BINDING_NAME) -create -output $(IOS_BINDING_OUTPUT)/sim/$(IOS_BINDING_NAME)
lipo $(IOS_BINDING_OUTPUT)/sim/$(IOS_BINDING_NAME) $(IOS_BINDING_OUTPUT)/arm64/$(IOS_BINDING_NAME) -create -output $(IOS_BINDING_OUTPUT)/$(IOS_BINDING_NAME)
cp $(IOS_BINDING_OUTPUT)/arm64/*.h $(IOS_BINDING_OUTPUT)
rm -rf $(IOS_BINDING_OUTPUT)/arm64 $(IOS_BINDING_OUTPUT)/x86_64_sim $(IOS_BINDING_OUTPUT)/arm64_sim

binding_ios_xcframework: binding_ios_arm64 binding_ios_x86_64_sim binding_ios_arm64_sim
mkdir -p $(IOS_BINDING_OUTPUT)/sim
lipo $(IOS_BINDING_OUTPUT)/x86_64_sim/$(IOS_BINDING_NAME) $(IOS_BINDING_OUTPUT)/arm64_sim/$(IOS_BINDING_NAME) -create -output $(IOS_BINDING_OUTPUT)/sim/$(IOS_BINDING_NAME)
mkdir -p $(IOS_BINDING_OUTPUT)/headers
cp $(IOS_BINDING_OUTPUT)/arm64/*.h $(IOS_BINDING_OUTPUT)/headers
rm -rf $(IOS_BINDING_OUTPUT)/Rsa.xcframework
xcodebuild -create-xcframework \
-library $(IOS_BINDING_OUTPUT)/arm64/$(IOS_BINDING_NAME) -headers $(IOS_BINDING_OUTPUT)/headers \
-library $(IOS_BINDING_OUTPUT)/sim/$(IOS_BINDING_NAME) -headers $(IOS_BINDING_OUTPUT)/headers \
-output $(IOS_BINDING_OUTPUT)/Rsa.xcframework
rm -rf $(IOS_BINDING_OUTPUT)/arm64 $(IOS_BINDING_OUTPUT)/x86_64_sim $(IOS_BINDING_OUTPUT)/arm64_sim $(IOS_BINDING_OUTPUT)/sim $(IOS_BINDING_OUTPUT)/headers

binding_ios_arm64:
BINDING_FILE=$(IOS_OUTPUT)/arm64.a BUILD_MODE="c-archive" \
BINDING_FILE=$(IOS_OUTPUT)/arm64/$(IOS_BINDING_NAME) BUILD_MODE="c-archive" \
SDK=iphoneos CC=$(PWD)/clangwrap.sh CGO_CFLAGS="-fembed-bitcode" \
GOOS=ios GOARCH=arm64 CGO_ENABLED=1 \
make binding

binding_ios_x86_64:
BINDING_FILE=$(IOS_OUTPUT)/x86_64.a BUILD_MODE="c-archive" \
binding_ios_x86_64_sim:
CGO_LDFLAGS="-target arm64-apple-ios10-simulator" \
BINDING_FILE=$(IOS_OUTPUT)/x86_64_sim/$(IOS_BINDING_NAME) BUILD_MODE="c-archive" \
SDK=iphonesimulator CC=$(PWD)/clangwrap.sh \
GOOS=ios GOARCH=amd64 CGO_ENABLED=1 \
make binding

binding_ios_arm64_sim:
CGO_LDFLAGS="-target arm64-apple-ios10-simulator" \
BINDING_FILE=$(IOS_OUTPUT)/arm64_sim/$(IOS_BINDING_NAME) BUILD_MODE="c-archive" \
SDK=iphonesimulator CC=$(PWD)/clangwrap.sh \
GOOS=ios GOARCH=arm64 CGO_ENABLED=1 \
make binding

binding_ios_armv7:
BINDING_FILE=$(IOS_OUTPUT)/armv7.a BUILD_MODE="c-archive" \
BINDING_FILE=$(IOS_OUTPUT)/armv7/$(IOS_BINDING_NAME) BUILD_MODE="c-archive" \
SDK=iphoneos CC=$(PWD)/clangwrap.sh CGO_CFLAGS="-fembed-bitcode" \
GOOS=darwin GOARCH=arm CGO_ENABLED=1 BINDING_ARGS="-tags ios" \
make binding
9 changes: 8 additions & 1 deletion clangwrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

SDK_PATH=`xcrun --sdk $SDK --show-sdk-path`
CLANG=`xcrun --sdk $SDK --find clang`
MIN_VERSION=10

if [ "$GOARCH" == "amd64" ]; then
CARCH="x86_64"
Expand All @@ -15,4 +16,10 @@ elif [ "$GOARCH" == "386" ]; then
CARCH="i386"
fi

exec $CLANG -arch $CARCH -isysroot $SDK_PATH -mios-version-min=10.0 "$@"
if [ "$SDK" = "iphoneos" ]; then
TARGET="$CARCH-apple-ios$MIN_VERSION"
elif [ "$SDK" = "iphonesimulator" ]; then
TARGET="$CARCH-apple-ios$MIN_VERSION-simulator"
fi

exec $CLANG -arch $CARCH -target $TARGET -isysroot $SDK_PATH "$@"

0 comments on commit 82e59fd

Please sign in to comment.