diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 28336e92..b88c7bf4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -143,7 +143,7 @@ jobs: run: | bash build_darwin_libs.sh mkdir -p output - cp build/Release/libpocketpy.a output/libpocketpy.a + cp build/libpocketpy.a output/libpocketpy.a - uses: actions/upload-artifact@v4 with: name: darwin diff --git a/build_darwin_libs.sh b/build_darwin_libs.sh index 61f442fc..dbc765a4 100644 --- a/build_darwin_libs.sh +++ b/build_darwin_libs.sh @@ -15,3 +15,5 @@ FLAGS="-DPK_BUILD_STATIC_LIB=ON \ cmake -G Xcode $FLAGS .. cmake --build . --config Release + +python scripts/merge_built_libraries.py build diff --git a/build_ios_libs.sh b/build_ios_libs.sh index 620248c8..402f5858 100644 --- a/build_ios_libs.sh +++ b/build_ios_libs.sh @@ -21,11 +21,14 @@ cmake --build os64 --config Release cmake -B simulatorarm64 -G Xcode $FLAGS -DPLATFORM=SIMULATORARM64 .. cmake --build simulatorarm64 --config Release -HEADERS="../amalgamated/pocketpy.h" +cd ../ + +HEADERS="amalgamated/pocketpy.h" + +python scripts/merge_built_libraries.py build/os64 +python scripts/merge_built_libraries.py build/simulatorarm64 xcodebuild -create-xcframework \ - -library os64/Release-iphoneos/libpocketpy.a -headers $HEADERS \ - -library simulatorarm64/Release-iphonesimulator/libpocketpy.a -headers $HEADERS \ - -output pocketpy.xcframework - - + -library build/os64/libpocketpy.a -headers $HEADERS \ + -library build/simulatorarm64/libpocketpy.a -headers $HEADERS \ + -output build/pocketpy.xcframework diff --git a/plugins/flutter/pocketpy/.gitignore b/plugins/flutter/pocketpy/.gitignore index ac5aa989..13511432 100644 --- a/plugins/flutter/pocketpy/.gitignore +++ b/plugins/flutter/pocketpy/.gitignore @@ -26,4 +26,4 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ -build/ +build/ \ No newline at end of file diff --git a/plugins/flutter/pocketpy/ios/Frameworks/.gitkeep b/plugins/flutter/pocketpy/ios/Frameworks/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/plugins/flutter/pocketpy/ios/pocketpy.podspec b/plugins/flutter/pocketpy/ios/pocketpy.podspec index a22a211c..9a240cd9 100644 --- a/plugins/flutter/pocketpy/ios/pocketpy.podspec +++ b/plugins/flutter/pocketpy/ios/pocketpy.podspec @@ -29,7 +29,7 @@ A new Flutter FFI plugin project. # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', - 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386', 'OTHER_LDFLAGS' => '-force_load ' + __dir__ + '/Frameworks/libpocketpy.a', } end diff --git a/plugins/flutter/pocketpy/macos/Frameworks/.gitkeep b/plugins/flutter/pocketpy/macos/Frameworks/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/plugins/flutter/pocketpy/macos/pocketpy.podspec b/plugins/flutter/pocketpy/macos/pocketpy.podspec index 34c4757c..66d0bd98 100644 --- a/plugins/flutter/pocketpy/macos/pocketpy.podspec +++ b/plugins/flutter/pocketpy/macos/pocketpy.podspec @@ -25,7 +25,7 @@ A new Flutter FFI plugin project. s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.library = 'c' - s.pod_target_xcconfig = { + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'OTHER_LDFLAGS' => '-force_load ' + __dir__ + '/Frameworks/libpocketpy.a', } diff --git a/scripts/merge_built_libraries.py b/scripts/merge_built_libraries.py new file mode 100644 index 00000000..9246e38a --- /dev/null +++ b/scripts/merge_built_libraries.py @@ -0,0 +1,31 @@ +import os, sys +assert sys.platform == 'darwin', sys.platform + +if len(sys.argv) == 2: + build_dir = sys.argv[1] + output_dir = sys.argv[1] +elif len(sys.argv) == 3: + build_dir = sys.argv[1] + output_dir = sys.argv[2] +else: + print('Usage: python merge_built_libraries.py [output_dir]') + exit(1) + +assert os.path.exists(build_dir), build_dir +assert os.path.exists(output_dir), output_dir + +archives = [] + +# get all .a files in build/3rd recursive +for root, dirs, files in os.walk(build_dir): + for file in files: + if file.endswith('.a') and file.startswith('lib'): + archives.append(os.path.join(root, file)) + +print('Merging the following static libraries:') +for archive in archives: + print('- ' + archive) + +# libtool -static -o libpocketpy.a +output_archive = os.path.join(output_dir, 'libpocketpy.a') +os.system('libtool -static -o {} {}'.format(output_archive, ' '.join(archives)))