singe/thirdparty/openssl/oqs-provider/scripts/fullbuild.sh
2023-11-16 22:15:24 -06:00

119 lines
4.5 KiB
Bash
Executable file

#!/bin/bash
# The following variables influence the operation of this build script:
# Argument -f: Soft clean, ensuring re-build of oqs-provider binary
# Argument -F: Hard clean, ensuring checkout and build of all dependencies
# EnvVar MAKE_PARAMS: passed to invocations of make; sample value: "-j"
# EnvVar LIBOQS_BRANCH: Defines branch/release of liboqs; default value "main"
# EnvVar OQS_ALGS_ENABLED: If set, defines OQS algs to be enabled, e.g., "STD"
# EnvVar OPENSSL_INSTALL: If set, defines (binary) OpenSSL installation to use
# EnvVar OPENSSL_BRANCH: Defines branch/release of openssl; if set, forces source-build of OpenSSL3
# EnvVar liboqs_DIR: If set, needs to point to a directory where liboqs has been installed to
if [[ "$OSTYPE" == "darwin"* ]]; then
SHLIBEXT="dylib"
STATLIBEXT="dylib"
else
SHLIBEXT="so"
STATLIBEXT="a"
fi
if [ $# -gt 0 ]; then
if [ "$1" == "-f" ]; then
rm -rf _build
fi
if [ "$1" == "-F" ]; then
rm -rf _build openssl liboqs .local
fi
fi
if [ -z "$LIBOQS_BRANCH" ]; then
export LIBOQS_BRANCH=main
fi
if [ -z "$OQS_ALGS_ENABLED" ]; then
export DOQS_ALGS_ENABLED=""
else
export DOQS_ALGS_ENABLED="$OQS_ALGS_ENABLED"
fi
if [ -z "$OPENSSL_INSTALL" ]; then
openssl version | grep "OpenSSL 3" > /dev/null 2>&1
#if [ \($? -ne 0 \) -o \( ! -z "$OPENSSL_BRANCH" \) ]; then
if [ $? -ne 0 ] || [ ! -z "$OPENSSL_BRANCH" ]; then
if [ -z "$OPENSSL_BRANCH" ]; then
export OPENSSL_BRANCH="master"
fi
# No OSSL3 installation given/found, or specific branch build requested
echo "OpenSSL3 to be built from source at branch $OPENSSL_BRANCH."
if [ ! -d "openssl" ]; then
echo "openssl not specified and doesn't reside where expected: Cloning and building..."
# for full debug build add: enable-trace enable-fips --debug
export OSSL_PREFIX=`pwd`/.local && git clone --depth 1 --branch $OPENSSL_BRANCH git://git.openssl.org/openssl.git && cd openssl && LDFLAGS="-Wl,-rpath -Wl,${OSSL_PREFIX}/lib64" ./config --prefix=$OSSL_PREFIX && make $MAKE_PARAMS && make install_sw install_ssldirs && cd ..
if [ $? -ne 0 ]; then
echo "openssl build failed. Exiting."
exit -1
fi
fi
fi
fi
# Check whether liboqs is built or has been configured:
if [ -z $liboqs_DIR ]; then
if [ ! -f ".local/lib/liboqs.$STATLIBEXT" ]; then
echo "need to re-build static liboqs..."
if [ ! -d liboqs ]; then
echo "cloning liboqs $LIBOQS_BRANCH..."
git clone --depth 1 --branch $LIBOQS_BRANCH https://github.com/open-quantum-safe/liboqs.git
if [ $? -ne 0 ]; then
echo "liboqs clone failure for branch $LIBOQS_BRANCH. Exiting."
exit -1
fi
if [ "$LIBOQS_BRANCH" != "main" ]; then
# check for presence of backwards-compatibility generator file
if [ -f oqs-template/generate.yml-$LIBOQS_BRANCH ]; then
echo "generating code for $LIBOQS_BRANCH"
mv oqs-template/generate.yml oqs-template/generate.yml-main
cp oqs-template/generate.yml-$LIBOQS_BRANCH oqs-template/generate.yml
LIBOQS_SRC_DIR=`pwd`/liboqs python3 oqs-template/generate.py
if [ $? -ne 0 ]; then
echo "Code generation failure for $LIBOQS_BRANCH. Exiting."
exit -1
fi
fi
fi
fi
# for full debug build add: -DCMAKE_BUILD_TYPE=Debug
# to optimize for size add -DOQS_ALGS_ENABLED= suitably to one of these values:
# STD: only include NIST standardized algorithms
# NIST_R4: only include algorithms in round 4 of the NIST competition
# All: include all algorithms supported by liboqs (default)
cd liboqs && cmake -GNinja $DOQS_ALGS_ENABLED -DCMAKE_INSTALL_PREFIX=$(pwd)/../.local -S . -B _build && cd _build && ninja && ninja install && cd ../..
if [ $? -ne 0 ]; then
echo "liboqs build failed. Exiting."
exit -1
fi
fi
export liboqs_DIR=$(pwd)/.local
fi
# Check whether provider is built:
if [ ! -f "_build/lib/oqsprovider.$SHLIBEXT" ]; then
echo "oqsprovider (_build/lib/oqsprovider.$SHLIBEXT) not built: Building..."
# for full debug build add: -DCMAKE_BUILD_TYPE=Debug
#BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug"
BUILD_TYPE=""
# for omitting public key in private keys add -DNOPUBKEY_IN_PRIVKEY=ON
if [ -z "$OPENSSL_INSTALL" ]; then
cmake -DOPENSSL_ROOT_DIR=$(pwd)/.local $BUILD_TYPE -S . -B _build && cmake --build _build
else
cmake -DOPENSSL_ROOT_DIR=$OPENSSL_INSTALL $BUILD_TYPE -S . -B _build && cmake --build _build
fi
if [ $? -ne 0 ]; then
echo "provider build failed. Exiting."
exit -1
fi
fi