1.github下載最新版本Gmssl
https://github.com/guanzhi/GmSSL
2.在MacOS系統(tǒng)下CD進入下載的Gmssl文件夾(一般下載為zip文件解壓后得到文件夾)
3.執(zhí)行如下命令:
export CC=clang
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS.sdk
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
./Configure ios64-cross -DGMSSL_NO_TURBO no-shared --prefix=/usr/local/openssl-ios64
make
(重新安裝的話需要先清理:make distclean)
armv7
命令配置
進入目錄
$ cd GMSSL源碼目錄
設(shè)置編譯器
$ export CC="clang -arch armv7"
設(shè)置工具鏈路徑
PATH"
設(shè)置開發(fā)環(huán)境目錄
$ export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
設(shè)置SDK
$ export CROSS_SDK=iPhoneOS12.4.sdk
export CROSS_SDK=iPhoneOS13.6.sdk 最新版本
設(shè)置最小依賴版本
$ export IPHONEOS_DEPLOYMENT_TARGET=8.0
生成makefile
$ ./Configure iphoneos-cross no-shared --prefix=/usr/local/openssl
-DOPENSSL_NO_ASYNC (ios上傳AppStore防止接口重復(fù))
構(gòu)建
make
保存源碼目錄下的生成文件
libcrypto.a,libssl.a莺葫,并重命名為帶有相應(yīng)指令集名稱的名字,例如libcrypto-armv7.a,libssl-armv7.a
arm64
命令配置
進入目錄
$ cd GMSSL源碼目錄
設(shè)置編譯器
$ export CC="clang -arch arm64"
設(shè)置工具鏈路徑
PATH"
設(shè)置開發(fā)環(huán)境目錄
$ export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
設(shè)置SDK
$ export CROSS_SDK=iPhoneOS12.4.sdk
設(shè)置最小依賴版本
$ export IPHONEOS_DEPLOYMENT_TARGET=8.0
生成makefile
$ ./Configure ios64-cross no-shared -DGMSSL_NO_TURBO --prefix=/usr/local/openssl-ios64
構(gòu)建
make
目前編譯的時候默認用EC_GFp_sm2z256_method,這個實現(xiàn)提供超過4倍的性能提升充甚,但是這個實現(xiàn)只在比較新的X86_64環(huán)境下可用双泪,理想情況下應(yīng)該判斷當前硬件環(huán)境,但是目前的編譯系統(tǒng)里面還沒來得及做這個判斷娱节。
-DGMSSL_NO_TURBO可以顯式指定不要用EC_GFp_sm2z256_method這個快速實現(xiàn)致板。
ec_nistp_64_gcc_128可以啟用SM2的純C優(yōu)化實現(xiàn),這個優(yōu)化實現(xiàn)可以提供2倍的性能提升坊夫,可以用在所有64位的系統(tǒng)里面砖第,但是需要較高版本編譯器的支持,這個選項默認是不開啟的环凿,因此需要enable顯式打開
保存源碼目錄下的生成文件
libcrypto.a,libssl.a梧兼,并重命名為帶有相應(yīng)指令集名稱的名字
i386 和 x86_64
命令配置
進入目錄
$ cd GMSSL源碼目錄
設(shè)置編譯器
$ export CC="clang -arch i386 -arch x86_64"
設(shè)置工具鏈路徑
PATH"
設(shè)置開發(fā)環(huán)境目錄
$ export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
設(shè)置SDK
$ export CROSS_SDK=iPhoneSimulator12.4.sdk
iPhoneOS13.6.sdk
設(shè)置最小依賴版本
$ export IPHONEOS_DEPLOYMENT_TARGET=8.0
生成makefile
$ ./Configure iphoneos-cross no-shared --prefix=/usr/local/openssl
構(gòu)建
make
保存源碼目錄下的生成文件
libcrypto.a,libssl.a,并重命名為帶有相應(yīng)指令集名稱的名字
調(diào)試
生成makefile時智听,啟用 no-asm選項
$ ./Configure xxxxxx no-asm xxxxxx
1
在源碼目錄找到生成的Makefile,打開并將里面的-O3 替換成 -g
_getcontext, _makecontext, _setcontext. If method names in your source code match the private Apple APIs listed above
問題
使用了私有方法羽杰,編譯GMSSL時,內(nèi)部調(diào)用了這些方法到推,編譯時設(shè)置no-async就可以解決上述問題了考赛。
./Configure 時添加 -DOPENSSL_NO_ASYNC