From bf0803f84831c52ea98b6aa9a220e967a6a277d9 Mon Sep 17 00:00:00 2001 From: Changbeom Ahn Date: Mon, 13 Sep 2021 15:37:45 +0900 Subject: [PATCH] support native iOS simulators on Apple silicon mac --- common.gypi | 4 +- configure.py | 6 + .../NodeMobile.xcodeproj/project.pbxproj | 122 ++++++++++++------ tools/ios_framework_prepare.sh | 83 ++++++++---- 4 files changed, 152 insertions(+), 63 deletions(-) diff --git a/common.gypi b/common.gypi index 84be79f945c..542788d0039 100644 --- a/common.gypi +++ b/common.gypi @@ -574,7 +574,7 @@ ['target_arch=="x64"', { 'xcode_settings': {'ARCHS': ['x86_64']}, }], - [ 'target_arch in "arm64 arm armv7s"', { + [ 'simulator!="true" and target_arch in "arm64 arm armv7s"', { 'xcode_settings': { 'OTHER_CFLAGS': [ '-fembed-bitcode' @@ -600,7 +600,7 @@ 'CLANG_CXX_LIBRARY': 'libc++', }, }], - ['target_arch=="x64" or target_arch=="ia32"', { + ['target_arch=="x64" or target_arch=="ia32" or target_arch=="arm64" and simulator=="true"', { 'xcode_settings': { 'SDKROOT': 'iphonesimulator' }, }, { 'xcode_settings': { 'SDKROOT': 'iphoneos', 'ENABLE_BITCODE': 'YES' }, diff --git a/configure.py b/configure.py index c9bc1e228b7..a6f68369638 100755 --- a/configure.py +++ b/configure.py @@ -671,6 +671,11 @@ dest='compile_commands_json', help=optparse.SUPPRESS_HELP) +parser.add_option('--ios-simulator', + action='store_true', + dest='ios_simulator', + help=optparse.SUPPRESS_HELP) + (options, args) = parser.parse_args() # Expand ~ in the install prefix now, it gets written to multiple files. @@ -1034,6 +1039,7 @@ def gcc_version_ge(version_checked): def configure_node(o): if options.dest_os == 'ios': o['variables']['OS'] = 'ios' + o['variables']['simulator'] = b(options.ios_simulator) if options.dest_os == 'android': o['variables']['OS'] = 'android' o['variables']['node_prefix'] = options.prefix diff --git a/tools/ios-framework/NodeMobile.xcodeproj/project.pbxproj b/tools/ios-framework/NodeMobile.xcodeproj/project.pbxproj index d1581c9e0df..5cb95a0e530 100644 --- a/tools/ios-framework/NodeMobile.xcodeproj/project.pbxproj +++ b/tools/ios-framework/NodeMobile.xcodeproj/project.pbxproj @@ -3,30 +3,30 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 33300EB5240437620019E302 /* libv8_libsampler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAA240437620019E302 /* libv8_libsampler.a */; }; - 33300EB6240437620019E302 /* libhistogram.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAB240437620019E302 /* libhistogram.a */; }; - 33300EB7240437620019E302 /* libllhttp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAC240437620019E302 /* libllhttp.a */; }; - 33300EB8240437620019E302 /* libv8_initializers.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAD240437620019E302 /* libv8_initializers.a */; }; - 33300EB9240437620019E302 /* libv8_libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAE240437620019E302 /* libv8_libplatform.a */; }; - 33300EBA240437620019E302 /* libbrotli.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EAF240437620019E302 /* libbrotli.a */; }; - 33300EBB240437620019E302 /* libuvwasi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EB0240437620019E302 /* libuvwasi.a */; }; - 33300EBC240437620019E302 /* libv8_libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EB1240437620019E302 /* libv8_libbase.a */; }; - 33300EBE240437620019E302 /* libv8_base_without_compiler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EB3240437620019E302 /* libv8_base_without_compiler.a */; }; - 33300EC2240437AB0019E302 /* libv8_compiler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EC0240437AB0019E302 /* libv8_compiler.a */; }; - 33300EC3240437AB0019E302 /* libv8_snapshot.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33300EC1240437AB0019E302 /* libv8_snapshot.a */; }; 3C02AFD41FA919C30053C191 /* NodeMobile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C02AFD31FA919C30053C191 /* NodeMobile.cpp */; }; + 4C6C929626EEE9AD00A596BC /* nghttp2.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928426EEE9AD00A596BC /* nghttp2.xcframework */; }; + 4C6C929726EEE9AD00A596BC /* v8_libsampler.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928526EEE9AD00A596BC /* v8_libsampler.xcframework */; }; + 4C6C929826EEE9AD00A596BC /* histogram.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928626EEE9AD00A596BC /* histogram.xcframework */; }; + 4C6C929926EEE9AD00A596BC /* v8_libplatform.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928726EEE9AD00A596BC /* v8_libplatform.xcframework */; }; + 4C6C929A26EEE9AD00A596BC /* v8_snapshot.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928826EEE9AD00A596BC /* v8_snapshot.xcframework */; }; + 4C6C929B26EEE9AD00A596BC /* v8_initializers.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928926EEE9AD00A596BC /* v8_initializers.xcframework */; }; + 4C6C929C26EEE9AD00A596BC /* uvwasi.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928A26EEE9AD00A596BC /* uvwasi.xcframework */; }; + 4C6C929D26EEE9AD00A596BC /* http_parser.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928B26EEE9AD00A596BC /* http_parser.xcframework */; }; + 4C6C929E26EEE9AD00A596BC /* v8_base_without_compiler.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928C26EEE9AD00A596BC /* v8_base_without_compiler.xcframework */; }; + 4C6C929F26EEE9AD00A596BC /* openssl.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928D26EEE9AD00A596BC /* openssl.xcframework */; }; + 4C6C92A026EEE9AD00A596BC /* cares.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928E26EEE9AD00A596BC /* cares.xcframework */; }; + 4C6C92A126EEE9AD00A596BC /* zlib.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C928F26EEE9AD00A596BC /* zlib.xcframework */; }; + 4C6C92A226EEE9AD00A596BC /* llhttp.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929026EEE9AD00A596BC /* llhttp.xcframework */; }; + 4C6C92A326EEE9AD00A596BC /* brotli.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929126EEE9AD00A596BC /* brotli.xcframework */; }; + 4C6C92A426EEE9AD00A596BC /* v8_compiler.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929226EEE9AD00A596BC /* v8_compiler.xcframework */; }; + 4C6C92A526EEE9AD00A596BC /* node.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929326EEE9AD00A596BC /* node.xcframework */; }; + 4C6C92A626EEE9AD00A596BC /* uv.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929426EEE9AD00A596BC /* uv.xcframework */; }; + 4C6C92A726EEE9AD00A596BC /* v8_libbase.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C6C929526EEE9AD00A596BC /* v8_libbase.xcframework */; }; D9A7619D1F7C63A8006AFE86 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 331917C21EC4702A00F93D52 /* CoreFoundation.framework */; }; - D9A7619E1F7C63A8006AFE86 /* libcares.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C9191EC3922F0007AD59 /* libcares.a */; }; - D9A761A11F7C63A8006AFE86 /* libhttp_parser.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C91C1EC3922F0007AD59 /* libhttp_parser.a */; }; - D9A761A21F7C63A8006AFE86 /* libnghttp2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 334822141F6AFBD200CF403E /* libnghttp2.a */; }; - D9A761A31F7C63A8006AFE86 /* libnode.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C91D1EC3922F0007AD59 /* libnode.a */; }; - D9A761A41F7C63A8006AFE86 /* libopenssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C91E1EC3922F0007AD59 /* libopenssl.a */; }; - D9A761A51F7C63A8006AFE86 /* libuv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C91F1EC3922F0007AD59 /* libuv.a */; }; - D9A761A61F7C63A8006AFE86 /* libzlib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3376C9201EC3922F0007AD59 /* libzlib.a */; }; D9A762281F7C675E006097B1 /* NodeMobile.h in Headers */ = {isa = PBXBuildFile; fileRef = D9A762261F7C674F006097B1 /* NodeMobile.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ @@ -55,6 +55,24 @@ 3376C91F1EC3922F0007AD59 /* libuv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libuv.a; path = bin/libuv.a; sourceTree = ""; }; 3376C9201EC3922F0007AD59 /* libzlib.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libzlib.a; path = bin/libzlib.a; sourceTree = ""; }; 3C02AFD31FA919C30053C191 /* NodeMobile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NodeMobile.cpp; sourceTree = ""; }; + 4C6C928426EEE9AD00A596BC /* nghttp2.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = nghttp2.xcframework; path = bin/nghttp2.xcframework; sourceTree = ""; }; + 4C6C928526EEE9AD00A596BC /* v8_libsampler.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_libsampler.xcframework; path = bin/v8_libsampler.xcframework; sourceTree = ""; }; + 4C6C928626EEE9AD00A596BC /* histogram.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = histogram.xcframework; path = bin/histogram.xcframework; sourceTree = ""; }; + 4C6C928726EEE9AD00A596BC /* v8_libplatform.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_libplatform.xcframework; path = bin/v8_libplatform.xcframework; sourceTree = ""; }; + 4C6C928826EEE9AD00A596BC /* v8_snapshot.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_snapshot.xcframework; path = bin/v8_snapshot.xcframework; sourceTree = ""; }; + 4C6C928926EEE9AD00A596BC /* v8_initializers.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_initializers.xcframework; path = bin/v8_initializers.xcframework; sourceTree = ""; }; + 4C6C928A26EEE9AD00A596BC /* uvwasi.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = uvwasi.xcframework; path = bin/uvwasi.xcframework; sourceTree = ""; }; + 4C6C928B26EEE9AD00A596BC /* http_parser.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = http_parser.xcframework; path = bin/http_parser.xcframework; sourceTree = ""; }; + 4C6C928C26EEE9AD00A596BC /* v8_base_without_compiler.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_base_without_compiler.xcframework; path = bin/v8_base_without_compiler.xcframework; sourceTree = ""; }; + 4C6C928D26EEE9AD00A596BC /* openssl.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = openssl.xcframework; path = bin/openssl.xcframework; sourceTree = ""; }; + 4C6C928E26EEE9AD00A596BC /* cares.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = cares.xcframework; path = bin/cares.xcframework; sourceTree = ""; }; + 4C6C928F26EEE9AD00A596BC /* zlib.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = zlib.xcframework; path = bin/zlib.xcframework; sourceTree = ""; }; + 4C6C929026EEE9AD00A596BC /* llhttp.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = llhttp.xcframework; path = bin/llhttp.xcframework; sourceTree = ""; }; + 4C6C929126EEE9AD00A596BC /* brotli.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = brotli.xcframework; path = bin/brotli.xcframework; sourceTree = ""; }; + 4C6C929226EEE9AD00A596BC /* v8_compiler.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_compiler.xcframework; path = bin/v8_compiler.xcframework; sourceTree = ""; }; + 4C6C929326EEE9AD00A596BC /* node.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = node.xcframework; path = bin/node.xcframework; sourceTree = ""; }; + 4C6C929426EEE9AD00A596BC /* uv.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = uv.xcframework; path = bin/uv.xcframework; sourceTree = ""; }; + 4C6C929526EEE9AD00A596BC /* v8_libbase.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = v8_libbase.xcframework; path = bin/v8_libbase.xcframework; sourceTree = ""; }; D9A761AE1F7C63A8006AFE86 /* NodeMobile.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NodeMobile.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D9A762251F7C674F006097B1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D9A762261F7C674F006097B1 /* NodeMobile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NodeMobile.h; sourceTree = ""; }; @@ -65,25 +83,25 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 33300EC2240437AB0019E302 /* libv8_compiler.a in Frameworks */, - 33300EC3240437AB0019E302 /* libv8_snapshot.a in Frameworks */, - 33300EB5240437620019E302 /* libv8_libsampler.a in Frameworks */, - 33300EB6240437620019E302 /* libhistogram.a in Frameworks */, - 33300EB7240437620019E302 /* libllhttp.a in Frameworks */, - 33300EB8240437620019E302 /* libv8_initializers.a in Frameworks */, - 33300EB9240437620019E302 /* libv8_libplatform.a in Frameworks */, - 33300EBA240437620019E302 /* libbrotli.a in Frameworks */, - 33300EBB240437620019E302 /* libuvwasi.a in Frameworks */, - 33300EBC240437620019E302 /* libv8_libbase.a in Frameworks */, - 33300EBE240437620019E302 /* libv8_base_without_compiler.a in Frameworks */, D9A7619D1F7C63A8006AFE86 /* CoreFoundation.framework in Frameworks */, - D9A7619E1F7C63A8006AFE86 /* libcares.a in Frameworks */, - D9A761A11F7C63A8006AFE86 /* libhttp_parser.a in Frameworks */, - D9A761A21F7C63A8006AFE86 /* libnghttp2.a in Frameworks */, - D9A761A31F7C63A8006AFE86 /* libnode.a in Frameworks */, - D9A761A41F7C63A8006AFE86 /* libopenssl.a in Frameworks */, - D9A761A51F7C63A8006AFE86 /* libuv.a in Frameworks */, - D9A761A61F7C63A8006AFE86 /* libzlib.a in Frameworks */, + 4C6C929626EEE9AD00A596BC /* nghttp2.xcframework in Frameworks */, + 4C6C929726EEE9AD00A596BC /* v8_libsampler.xcframework in Frameworks */, + 4C6C929826EEE9AD00A596BC /* histogram.xcframework in Frameworks */, + 4C6C929926EEE9AD00A596BC /* v8_libplatform.xcframework in Frameworks */, + 4C6C929A26EEE9AD00A596BC /* v8_snapshot.xcframework in Frameworks */, + 4C6C929B26EEE9AD00A596BC /* v8_initializers.xcframework in Frameworks */, + 4C6C929C26EEE9AD00A596BC /* uvwasi.xcframework in Frameworks */, + 4C6C929D26EEE9AD00A596BC /* http_parser.xcframework in Frameworks */, + 4C6C929E26EEE9AD00A596BC /* v8_base_without_compiler.xcframework in Frameworks */, + 4C6C929F26EEE9AD00A596BC /* openssl.xcframework in Frameworks */, + 4C6C92A026EEE9AD00A596BC /* cares.xcframework in Frameworks */, + 4C6C92A126EEE9AD00A596BC /* zlib.xcframework in Frameworks */, + 4C6C92A226EEE9AD00A596BC /* llhttp.xcframework in Frameworks */, + 4C6C92A326EEE9AD00A596BC /* brotli.xcframework in Frameworks */, + 4C6C92A426EEE9AD00A596BC /* v8_compiler.xcframework in Frameworks */, + 4C6C92A526EEE9AD00A596BC /* node.xcframework in Frameworks */, + 4C6C92A626EEE9AD00A596BC /* uv.xcframework in Frameworks */, + 4C6C92A726EEE9AD00A596BC /* v8_libbase.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -110,6 +128,24 @@ 3376C9181EC3922E0007AD59 /* Frameworks */ = { isa = PBXGroup; children = ( + 4C6C929126EEE9AD00A596BC /* brotli.xcframework */, + 4C6C928E26EEE9AD00A596BC /* cares.xcframework */, + 4C6C928626EEE9AD00A596BC /* histogram.xcframework */, + 4C6C928B26EEE9AD00A596BC /* http_parser.xcframework */, + 4C6C929026EEE9AD00A596BC /* llhttp.xcframework */, + 4C6C928426EEE9AD00A596BC /* nghttp2.xcframework */, + 4C6C929326EEE9AD00A596BC /* node.xcframework */, + 4C6C928D26EEE9AD00A596BC /* openssl.xcframework */, + 4C6C929426EEE9AD00A596BC /* uv.xcframework */, + 4C6C928A26EEE9AD00A596BC /* uvwasi.xcframework */, + 4C6C928C26EEE9AD00A596BC /* v8_base_without_compiler.xcframework */, + 4C6C929226EEE9AD00A596BC /* v8_compiler.xcframework */, + 4C6C928926EEE9AD00A596BC /* v8_initializers.xcframework */, + 4C6C929526EEE9AD00A596BC /* v8_libbase.xcframework */, + 4C6C928726EEE9AD00A596BC /* v8_libplatform.xcframework */, + 4C6C928526EEE9AD00A596BC /* v8_libsampler.xcframework */, + 4C6C928826EEE9AD00A596BC /* v8_snapshot.xcframework */, + 4C6C928F26EEE9AD00A596BC /* zlib.xcframework */, 33300EC0240437AB0019E302 /* libv8_compiler.a */, 33300EC1240437AB0019E302 /* libv8_snapshot.a */, 33300EAF240437620019E302 /* libbrotli.a */, @@ -362,7 +398,11 @@ INFOPLIST_FILE = NodeMobile/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/bin", @@ -400,7 +440,11 @@ INFOPLIST_FILE = NodeMobile/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/bin", diff --git a/tools/ios_framework_prepare.sh b/tools/ios_framework_prepare.sh index bc84b58e407..c2fc44dd45d 100755 --- a/tools/ios_framework_prepare.sh +++ b/tools/ios_framework_prepare.sh @@ -75,29 +75,70 @@ cp $LIBRARY_PATH/libv8_libsampler.a $TARGET_LIBRARY_PATH/ cp $LIBRARY_PATH/libv8_snapshot.a $TARGET_LIBRARY_PATH/ cp $LIBRARY_PATH/libzlib.a $TARGET_LIBRARY_PATH/ +make clean + +TARGET_LIBRARY_PATH='tools/ios-framework/bin/sim-arm64' + +GYP_DEFINES="target_arch=arm64 host_os=mac target_os=ios" +export GYP_DEFINES + +./configure --ios-simulator --dest-os=ios --dest-cpu=arm64 --with-intl=none --cross-compiling --enable-static --openssl-no-asm --v8-options=--jitless --without-node-code-cache --without-node-snapshot +make -j$(getconf _NPROCESSORS_ONLN) + +mkdir -p $TARGET_LIBRARY_PATH + +cp $LIBRARY_PATH/libbrotli.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libcares.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libhistogram.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libhttp_parser.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libllhttp.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libnghttp2.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libnode.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libopenssl.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libuv.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libuvwasi.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_base_without_compiler.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_compiler.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_initializers.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_libbase.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_libplatform.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_libsampler.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libv8_snapshot.a $TARGET_LIBRARY_PATH/ +cp $LIBRARY_PATH/libzlib.a $TARGET_LIBRARY_PATH/ + TARGET_LIBRARY_PATH='tools/ios-framework/bin' -lipo -create "$TARGET_LIBRARY_PATH/arm64/libbrotli.a" "$TARGET_LIBRARY_PATH/x64/libbrotli.a" -output "$TARGET_LIBRARY_PATH/libbrotli.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libcares.a" "$TARGET_LIBRARY_PATH/x64/libcares.a" -output "$TARGET_LIBRARY_PATH/libcares.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libhistogram.a" "$TARGET_LIBRARY_PATH/x64/libhistogram.a" -output "$TARGET_LIBRARY_PATH/libhistogram.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libhttp_parser.a" "$TARGET_LIBRARY_PATH/x64/libhttp_parser.a" -output "$TARGET_LIBRARY_PATH/libhttp_parser.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libllhttp.a" "$TARGET_LIBRARY_PATH/x64/libllhttp.a" -output "$TARGET_LIBRARY_PATH/libllhttp.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libnghttp2.a" "$TARGET_LIBRARY_PATH/x64/libnghttp2.a" -output "$TARGET_LIBRARY_PATH/libnghttp2.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libnode.a" "$TARGET_LIBRARY_PATH/x64/libnode.a" -output "$TARGET_LIBRARY_PATH/libnode.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libopenssl.a" "$TARGET_LIBRARY_PATH/x64/libopenssl.a" -output "$TARGET_LIBRARY_PATH/libopenssl.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libuv.a" "$TARGET_LIBRARY_PATH/x64/libuv.a" -output "$TARGET_LIBRARY_PATH/libuv.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libuvwasi.a" "$TARGET_LIBRARY_PATH/x64/libuvwasi.a" -output "$TARGET_LIBRARY_PATH/libuvwasi.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_base_without_compiler.a" "$TARGET_LIBRARY_PATH/x64/libv8_base_without_compiler.a" -output "$TARGET_LIBRARY_PATH/libv8_base_without_compiler.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_compiler.a" "$TARGET_LIBRARY_PATH/x64/libv8_compiler.a" -output "$TARGET_LIBRARY_PATH/libv8_compiler.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_initializers.a" "$TARGET_LIBRARY_PATH/x64/libv8_initializers.a" -output "$TARGET_LIBRARY_PATH/libv8_initializers.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_libbase.a" "$TARGET_LIBRARY_PATH/x64/libv8_libbase.a" -output "$TARGET_LIBRARY_PATH/libv8_libbase.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_libplatform.a" "$TARGET_LIBRARY_PATH/x64/libv8_libplatform.a" -output "$TARGET_LIBRARY_PATH/libv8_libplatform.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_libsampler.a" "$TARGET_LIBRARY_PATH/x64/libv8_libsampler.a" -output "$TARGET_LIBRARY_PATH/libv8_libsampler.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libv8_snapshot.a" "$TARGET_LIBRARY_PATH/x64/libv8_snapshot.a" -output "$TARGET_LIBRARY_PATH/libv8_snapshot.a" -lipo -create "$TARGET_LIBRARY_PATH/arm64/libzlib.a" "$TARGET_LIBRARY_PATH/x64/libzlib.a" -output "$TARGET_LIBRARY_PATH/libzlib.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libbrotli.a" "$TARGET_LIBRARY_PATH/x64/libbrotli.a" -output "$TARGET_LIBRARY_PATH/libbrotli.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libcares.a" "$TARGET_LIBRARY_PATH/x64/libcares.a" -output "$TARGET_LIBRARY_PATH/libcares.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libhistogram.a" "$TARGET_LIBRARY_PATH/x64/libhistogram.a" -output "$TARGET_LIBRARY_PATH/libhistogram.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libhttp_parser.a" "$TARGET_LIBRARY_PATH/x64/libhttp_parser.a" -output "$TARGET_LIBRARY_PATH/libhttp_parser.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libllhttp.a" "$TARGET_LIBRARY_PATH/x64/libllhttp.a" -output "$TARGET_LIBRARY_PATH/libllhttp.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libnghttp2.a" "$TARGET_LIBRARY_PATH/x64/libnghttp2.a" -output "$TARGET_LIBRARY_PATH/libnghttp2.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libnode.a" "$TARGET_LIBRARY_PATH/x64/libnode.a" -output "$TARGET_LIBRARY_PATH/libnode.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libopenssl.a" "$TARGET_LIBRARY_PATH/x64/libopenssl.a" -output "$TARGET_LIBRARY_PATH/libopenssl.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libuv.a" "$TARGET_LIBRARY_PATH/x64/libuv.a" -output "$TARGET_LIBRARY_PATH/libuv.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libuvwasi.a" "$TARGET_LIBRARY_PATH/x64/libuvwasi.a" -output "$TARGET_LIBRARY_PATH/libuvwasi.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_base_without_compiler.a" "$TARGET_LIBRARY_PATH/x64/libv8_base_without_compiler.a" -output "$TARGET_LIBRARY_PATH/libv8_base_without_compiler.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_compiler.a" "$TARGET_LIBRARY_PATH/x64/libv8_compiler.a" -output "$TARGET_LIBRARY_PATH/libv8_compiler.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_initializers.a" "$TARGET_LIBRARY_PATH/x64/libv8_initializers.a" -output "$TARGET_LIBRARY_PATH/libv8_initializers.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_libbase.a" "$TARGET_LIBRARY_PATH/x64/libv8_libbase.a" -output "$TARGET_LIBRARY_PATH/libv8_libbase.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_libplatform.a" "$TARGET_LIBRARY_PATH/x64/libv8_libplatform.a" -output "$TARGET_LIBRARY_PATH/libv8_libplatform.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_libsampler.a" "$TARGET_LIBRARY_PATH/x64/libv8_libsampler.a" -output "$TARGET_LIBRARY_PATH/libv8_libsampler.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libv8_snapshot.a" "$TARGET_LIBRARY_PATH/x64/libv8_snapshot.a" -output "$TARGET_LIBRARY_PATH/libv8_snapshot.a" +lipo -create "$TARGET_LIBRARY_PATH/sim-arm64/libzlib.a" "$TARGET_LIBRARY_PATH/x64/libzlib.a" -output "$TARGET_LIBRARY_PATH/libzlib.a" + +rm -rf "$TARGET_LIBRARY_PATH/sim-arm64/" +rm -rf "$TARGET_LIBRARY_PATH/x64/" + +LIBS="brotli cares histogram http_parser llhttp nghttp2 node openssl uv uvwasi v8_base_without_compiler v8_compiler v8_initializers v8_libbase v8_libplatform v8_libsampler v8_snapshot zlib" +for LIB in $LIBS +do + rm -rf $TARGET_LIBRARY_PATH/$LIB.xcframework + xcodebuild -create-xcframework -library $TARGET_LIBRARY_PATH/arm64/lib$LIB.a -library $TARGET_LIBRARY_PATH/lib$LIB.a -output $TARGET_LIBRARY_PATH/$LIB.xcframework +done rm -rf "$TARGET_LIBRARY_PATH/arm64/" -rm -rf "$TARGET_LIBRARY_PATH/x64/" +rm $TARGET_LIBRARY_PATH/*.a #Create a path to build the frameworks into rm -rf out_ios @@ -109,9 +150,7 @@ cd ../ NODELIB_PROJECT_PATH='tools/ios-framework' xcodebuild build -project $NODELIB_PROJECT_PATH/NodeMobile.xcodeproj -target "NodeMobile" -configuration Release -arch arm64 -sdk "iphoneos" SYMROOT=$FRAMEWORK_TARGET_DIR -xcodebuild build -project $NODELIB_PROJECT_PATH/NodeMobile.xcodeproj -target "NodeMobile" -configuration Release -arch x86_64 -sdk "iphonesimulator" SYMROOT=$FRAMEWORK_TARGET_DIR -cp -RL $FRAMEWORK_TARGET_DIR/Release-iphoneos $FRAMEWORK_TARGET_DIR/Release-universal -lipo -create $FRAMEWORK_TARGET_DIR/Release-iphoneos/NodeMobile.framework/NodeMobile $FRAMEWORK_TARGET_DIR/Release-iphonesimulator/NodeMobile.framework/NodeMobile -output $FRAMEWORK_TARGET_DIR/Release-universal/NodeMobile.framework/NodeMobile +xcodebuild build -project $NODELIB_PROJECT_PATH/NodeMobile.xcodeproj -target "NodeMobile" -configuration Release -destination "generic/platform=iOS Simulator" -sdk "iphonesimulator" SYMROOT=$FRAMEWORK_TARGET_DIR EXCLUDED_ARCHS=i386 #Create a .xcframework xcodebuild -create-xcframework -framework $FRAMEWORK_TARGET_DIR/Release-iphoneos/NodeMobile.framework -framework $FRAMEWORK_TARGET_DIR/Release-iphonesimulator/NodeMobile.framework -output $FRAMEWORK_TARGET_DIR/NodeMobile.xcframework