Merge pull request #262594 from vifino/wolfssl-tweaks

wolfssl: ASM/AES-NI/SP Math support; easier variant override
This commit is contained in:
Robert Scott 2023-10-26 20:47:16 +01:00 committed by GitHub
commit 377a39f0a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,37 +5,63 @@
, autoreconfHook , autoreconfHook
, util-linux , util-linux
, openssl , openssl
# The primary --enable-XXX variant. 'all' enables most features, but causes build-errors for some software,
# requiring to build a special variant for that software. Example: 'haproxy'
, variant ? "all"
, extraConfigureFlags ? []
, enableLto ? !(stdenv.isDarwin || stdenv.hostPlatform.isStatic || stdenv.cc.isClang)
}: }:
stdenv.mkDerivation (finalAttrs: {
stdenv.mkDerivation rec { pname = "wolfssl-${variant}";
pname = "wolfssl";
version = "5.6.3"; version = "5.6.3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "wolfSSL"; owner = "wolfSSL";
repo = "wolfssl"; repo = "wolfssl";
rev = "refs/tags/v${version}-stable"; rev = "refs/tags/v${finalAttrs.version}-stable";
hash = "sha256-UN4zs+Rxh/bsLD1BQA+f1YN/UOJ6OB2HduhoetEp10Y="; hash = "sha256-UN4zs+Rxh/bsLD1BQA+f1YN/UOJ6OB2HduhoetEp10Y=";
}; };
postPatch = '' postPatch = ''
patchShebangs ./scripts patchShebangs ./scripts
# ocsp tests require network access # ocsp stapling tests require network access, so skip them
sed -i -e '/ocsp\.test/d' -e '/ocsp-stapling\.test/d' scripts/include.am sed -i -e'2s/.*/exit 77/' scripts/ocsp-stapling.test
# ensure test detects musl-based systems too # ensure test detects musl-based systems too
substituteInPlace scripts/ocsp-stapling2.test \ substituteInPlace scripts/ocsp-stapling2.test \
--replace '"linux-gnu"' '"linux-"' --replace '"linux-gnu"' '"linux-"'
''; '';
# Almost same as Debian but for now using --enable-all --enable-reproducible-build instead of --enable-distro to ensure options.h gets installed
configureFlags = [ configureFlags = [
"--enable-all" "--enable-${variant}"
"--enable-base64encode" "--enable-reproducible-build"
] ++ lib.optionals (variant == "all") [
# Extra feature flags to add while building the 'all' variant.
# Since they conflict while building other variants, only specify them for this one.
"--enable-pkcs11" "--enable-pkcs11"
"--enable-writedup" "--enable-writedup"
"--enable-reproducible-build" "--enable-base64encode"
"--enable-tls13" ] ++ [
]; # We're not on tiny embedded machines.
# Increase TLS session cache from 33 sessions to 20k.
"--enable-bigcache"
# Use WolfSSL's Single Precision Math with timing-resistant cryptography.
"--enable-sp=yes${lib.optionalString (!stdenv.isx86_32) ",asm"}"
"--enable-sp-math-all"
"--enable-harden"
] ++ lib.optionals (stdenv.hostPlatform.isx86_64) [
# Enable AVX/AVX2/AES-NI instructions, gated by runtime detection via CPUID.
"--enable-intelasm"
"--enable-aesni"
] ++ lib.optionals (stdenv.isAarch64 && stdenv.isDarwin) [
# No runtime detection under ARM and no platform function checks like for X86.
# However, all ARM macOS systems have the supported extensions autodetected in the configure script.
"--enable-armasm=inline"
] ++ extraConfigureFlags;
# LTO should help with the C implementations.
env.NIX_CFLAGS_COMPILE = lib.optionalString enableLto "-flto";
env.NIX_LDFLAGS_COMPILE = lib.optionalString enableLto "-flto";
outputs = [ outputs = [
"dev" "dev"
@ -60,19 +86,19 @@ stdenv.mkDerivation rec {
]; ];
postInstall = '' postInstall = ''
# fix recursive cycle: # fix recursive cycle:
# wolfssl-config points to dev, dev propagates bin # wolfssl-config points to dev, dev propagates bin
moveToOutput bin/wolfssl-config "$dev" moveToOutput bin/wolfssl-config "$dev"
# moveToOutput also removes "$out" so recreate it # moveToOutput also removes "$out" so recreate it
mkdir -p "$out" mkdir -p "$out"
''; '';
meta = with lib; { meta = with lib; {
description = "A small, fast, portable implementation of TLS/SSL for embedded devices"; description = "A small, fast, portable implementation of TLS/SSL for embedded devices";
homepage = "https://www.wolfssl.com/"; homepage = "https://www.wolfssl.com/";
changelog = "https://github.com/wolfSSL/wolfssl/releases/tag/v${version}-stable"; changelog = "https://github.com/wolfSSL/wolfssl/releases/tag/v${finalAttrs.version}-stable";
platforms = platforms.all; platforms = platforms.all;
license = licenses.gpl2Plus; license = licenses.gpl2Plus;
maintainers = with maintainers; [ fab ]; maintainers = with maintainers; [ fab vifino ];
}; };
} })