侧边栏壁纸
  • 累计撰写 15 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论
标签搜索

目 录CONTENT

文章目录

在 Mac M1 (arm64架构)上编译安装 GmSSL 工具

EamonZzz
2022-04-01 / 0 评论 / 1 点赞 / 936 阅读 / 3,227 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

GmSSL是一个开源密码工具包,为GM/T系列标准中规定的中国国家密码算法和协议提供一级支持。作为OpenSSL项目的一个分支,GmSSL提供了与OpenSSL的API级兼容性,并维护了所有功能。现有的项目,如ApacheWeb服务器,只需稍加修改和简单的重建,就可以轻松地移植到GmSSL。自2014年底首次发布以来,GmSSL已被开源中国推荐的六个加密项目之一,并获得2015年中国Linux软件奖。


App Store 上安装 Xcode

此步骤略过,自行安装

下载 GmSSL 软件包或拉取该项目

项目地址:https://github.com/guanzhi/GmSSL.git
如果下载的 zip 压缩包,请自行解压

编译并安装

进入 GmSSL

cd GmSSL

文件修改

添加 arm64 编译选项

由于 Mac 下编译的 GmSSLx86i386 架构,而 M1 使用了 arm64 架构,编译文件中并未提供 Mac arm64架构的编译配置,所以需要修改 Configurations/10-main.conf,在文件末尾 ); 内添加如下内容:

    "darwin64-arm64-cc" => {
        inherit_from     => [ "darwin-common", asm("aarch64_asm") ],
        cflags           => add("-arch arm64 -DL_ENDIAN -Wall -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK)"),
        bn_ops           => "SIXTY_FOUR_BIT_LONG",
        perlasm_scheme   => "macosx",
        shared_ldflag    => "-arch arm64 -dynamiclib",
    },

位置参考:

image.png

修改 Configuretest/build.info

由于编译过程中可能会遇到 this system (darwin64-x86_64-cc) is not support 错误,这也在GmSSL项目的 issue 中所提到https://github.com/guanzhi/GmSSL/issues/811

解决方案如下:

Configure 文件与 test/build.info 文件中的

use if $^O ne "VMS", 'File::Glob' => qw/glob/;

修改为

use if $^O ne "VMS", 'File::Glob' => qw/:glob/;

修改 engines/afalg/e_afalg.c 文件

编译过程中还会遇到 engines/afalg/e_afalg.c:110:20: error: '__NR_eventfd' undeclared (first use in this function); did you mean 'eventfd'? 错误

解决方案:

方案一:

找到 static ossl_inline int eventfd(int n) 函数,将内容改为如下:

static ossl_inline int eventfd(int n)
{
    return syscall(__NR_eventfd2, n);
}

方案二:

# 在编译时,添加如下参数,此方案未尝试过,请自行食用
sudo ./config -DGMSSL_NO_TURBO no-afalgeng

编译配置

tips:

  1. 如果需要与 OpenSSL 共存,则需要指定 GmSSL 的安装路径
  2. 同时需要添加 no-shared 参数:只编译静态库
  1. 设置环境变量
export CC=clang
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
export CROSS_SDK=MacOSX.sdk
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
  1. 编译配置
# --prefix 指定 gmssl 的安装路径
# --openssldir 表示 OpenSSL 数据区域,例如openssl.cnf,证书和密钥. 如果是相对目录,它将被添加到--prefix给定的目录中。【可以不指定,默认在 --prefix 同级目录的 ssl 目录】
# no-shared 表示只编译静态库,不编译动态库

./Configure darwin64-arm64-cc --prefix="/usr/local/gmssl" no-asm no-shared -DGMSSL_NO_TURBO enable-ec_nistp_64_gcc_128

安装

# 如果需要加快编译速度,可根据实际情况使用 -j 参数指定可同时执行命令的数量,如 make -j 16 表示可同时执行 16 个命令,但受限于CPU的核心数
make

# 安装(如果有旧版本,可以使用 make uninstall 卸载,然后删除对应文件)
make install

添加环境变量

如果未指定安装目录,则不需要此步骤

# 添加环境变量
echo 'export PATH="$PATH:/usr/local/gmssl/bin"' >> ~/.bash_profile
source ~/.bash_profile

验证

$ gmssl version -a
GmSSL 2.5.4 - OpenSSL 1.1.0d  19 Jun 2019
built on: reproducible build, date unspecified
platform: darwin64-arm64-cc
compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_PIC -DGMSSL_NO_TURBO -DOPENSSLDIR="\"/usr/local/gmssl/ssl\"" -DENGINESDIR="\"/usr/local/gmssl/lib/engines-1.1\""
OPENSSLDIR: "/usr/local/gmssl/ssl"
ENGINESDIR: "/usr/local/gmssl/lib/engines-1.1"

问题集锦

  1. 出现assert.h file not found 错误
crypto/aes/aes_core.c:39:10: fatal error: 'assert.h' file not found

此问题是由于 MacOSX.SDK 环境变量设置错误,或没有安装 Xcode app,如果没有安装 Xcode,则需要将编译步骤中的环境变量:

export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
export CROSS_SDK=MacOSX.sdk
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"

根据实际情况指定到正确的目录位置,如 /Library/Developer/CommandLineTools/SDKs/ 目录下(但此方法未做尝试,自行食用)


安装过程中,可能会出现其他问题,欢迎提出讨论!

1
博主关闭了当前页面的评论