mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-23 15:55:37 +01:00
7b3603c6d8
Resolve merge conflicts by performing the following actions: - Reject changes to deleted files. - Reject changes to generate_errors.pl and generate_visualc_files.pl. Don't add an 'include-crypto' option which would attempt to use the non-existent crypto submodule. - list-identifiers.sh had the `--internal` option added to it, which lists identifiers only in internal headers. Add PSA-specific internal headers to list-identifiers.sh. * origin/development: (40 commits) Document the scripts behaviour further Use check_output instead of Popen all.sh: Require i686-w64-mingw32-gcc version >= 6 generate_visualc_files.pl: add mbedtls source shadowing by crypto generate_errors.pl: refactor and simplify the code Start unused variable with underscore Correct documentation generate_errors.pl: typo fix revert changes to generate_features.pl and generate_query_config.pl Check that the report directory is a directory Use namespaces instead of full classes Fix pylint issues Don't put abi dumps in subfolders Add verbose switch to silence all output except the final report Fetch the remote crypto branch, rather than cloning it Prefix internal functions with underscore Add RepoVersion class to make handling of many arguments easier Reduce indentation levels Improve documentation Use optional arguments for setting repositories ...
1146 lines
38 KiB
Bash
Executable File
1146 lines
38 KiB
Bash
Executable File
#! /usr/bin/env sh
|
|
|
|
# all.sh
|
|
#
|
|
# This file is part of mbed TLS (https://tls.mbed.org)
|
|
#
|
|
# Copyright (c) 2014-2017, ARM Limited, All Rights Reserved
|
|
|
|
|
|
|
|
################################################################
|
|
#### Documentation
|
|
################################################################
|
|
|
|
# Purpose
|
|
# -------
|
|
#
|
|
# To run all tests possible or available on the platform.
|
|
#
|
|
# Notes for users
|
|
# ---------------
|
|
#
|
|
# Warning: the test is destructive. It includes various build modes and
|
|
# configurations, and can and will arbitrarily change the current CMake
|
|
# configuration. The following files must be committed into git:
|
|
# * include/mbedtls/config.h
|
|
# * Makefile, library/Makefile, programs/Makefile, tests/Makefile
|
|
# After running this script, the CMake cache will be lost and CMake
|
|
# will no longer be initialised.
|
|
#
|
|
# The script assumes the presence of a number of tools:
|
|
# * Basic Unix tools (Windows users note: a Unix-style find must be before
|
|
# the Windows find in the PATH)
|
|
# * Perl
|
|
# * GNU Make
|
|
# * CMake
|
|
# * GCC and Clang (recent enough for using ASan with gcc and MemSan with clang, or valgrind)
|
|
# * G++
|
|
# * arm-gcc and mingw-gcc
|
|
# * ArmCC 5 and ArmCC 6, unless invoked with --no-armcc
|
|
# See the invocation of check_tools below for details.
|
|
#
|
|
# This script must be invoked from the toplevel directory of a git
|
|
# working copy of Mbed TLS.
|
|
#
|
|
# Note that the output is not saved. You may want to run
|
|
# script -c tests/scripts/all.sh
|
|
# or
|
|
# tests/scripts/all.sh >all.log 2>&1
|
|
#
|
|
# Notes for maintainers
|
|
# ---------------------
|
|
#
|
|
# The bulk of the code is organized into functions that follow one of the
|
|
# following naming conventions:
|
|
# * pre_XXX: things to do before running the tests, in order.
|
|
# * component_XXX: independent components. They can be run in any order.
|
|
# * component_check_XXX: quick tests that aren't worth parallelizing.
|
|
# * component_build_XXX: build things but don't run them.
|
|
# * component_test_XXX: build and test.
|
|
# * support_XXX: if support_XXX exists and returns false then
|
|
# component_XXX is not run by default.
|
|
# * post_XXX: things to do after running the tests.
|
|
# * other: miscellaneous support functions.
|
|
#
|
|
# Each component must start by invoking `msg` with a short informative message.
|
|
#
|
|
# The framework performs some cleanup tasks after each component. This
|
|
# means that components can assume that the working directory is in a
|
|
# cleaned-up state, and don't need to perform the cleanup themselves.
|
|
# * Run `make clean`.
|
|
# * Restore `include/mbedtks/config.h` from a backup made before running
|
|
# the component.
|
|
# * Check out `Makefile`, `library/Makefile`, `programs/Makefile` and
|
|
# `tests/Makefile` from git. This cleans up after an in-tree use of
|
|
# CMake.
|
|
#
|
|
# Any command that is expected to fail must be protected so that the
|
|
# script keeps running in --keep-going mode despite `set -e`. In keep-going
|
|
# mode, if a protected command fails, this is logged as a failure and the
|
|
# script will exit with a failure status once it has run all components.
|
|
# Commands can be protected in any of the following ways:
|
|
# * `make` is a function which runs the `make` command with protection.
|
|
# Note that you must write `make VAR=value`, not `VAR=value make`,
|
|
# because the `VAR=value make` syntax doesn't work with functions.
|
|
# * Put `report_status` before the command to protect it.
|
|
# * Put `if_build_successful` before a command. This protects it, and
|
|
# additionally skips it if a prior invocation of `make` in the same
|
|
# component failed.
|
|
#
|
|
# The tests are roughly in order from fastest to slowest. This doesn't
|
|
# have to be exact, but in general you should add slower tests towards
|
|
# the end and fast checks near the beginning.
|
|
|
|
|
|
|
|
################################################################
|
|
#### Initialization and command line parsing
|
|
################################################################
|
|
|
|
# Abort on errors (and uninitialised variables)
|
|
set -eu
|
|
|
|
pre_check_environment () {
|
|
if [ -d library -a -d include -a -d tests ]; then :; else
|
|
echo "Must be run from mbed TLS root" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
pre_initialize_variables () {
|
|
CONFIG_H='include/mbedtls/config.h'
|
|
CONFIG_BAK="$CONFIG_H.bak"
|
|
|
|
FORCE=0
|
|
KEEP_GOING=0
|
|
|
|
# Default commands, can be overridden by the environment
|
|
: ${OUT_OF_SOURCE_DIR:=./mbedtls_out_of_source_build}
|
|
: ${ARMC5_BIN_DIR:=/usr/bin}
|
|
: ${ARMC6_BIN_DIR:=/usr/bin}
|
|
|
|
# if MAKEFLAGS is not set add the -j option to speed up invocations of make
|
|
if [ -z "${MAKEFLAGS+set}" ]; then
|
|
export MAKEFLAGS="-j"
|
|
fi
|
|
|
|
# Include more verbose output for failing tests run by CMake
|
|
export CTEST_OUTPUT_ON_FAILURE=1
|
|
|
|
# Gather the list of available components. These are the functions
|
|
# defined in this script whose name starts with "component_".
|
|
# Parse the script with sed, because in sh there is no way to list
|
|
# defined functions.
|
|
ALL_COMPONENTS=$(sed -n 's/^ *component_\([0-9A-Z_a-z]*\) *().*/\1/p' <"$0")
|
|
|
|
# Exclude components that are not supported on this platform.
|
|
SUPPORTED_COMPONENTS=
|
|
for component in $ALL_COMPONENTS; do
|
|
case $(type "support_$component" 2>&1) in
|
|
*' function'*)
|
|
if ! support_$component; then continue; fi;;
|
|
esac
|
|
SUPPORTED_COMPONENTS="$SUPPORTED_COMPONENTS $component"
|
|
done
|
|
}
|
|
|
|
# Test whether the component $1 is included in the command line patterns.
|
|
is_component_included()
|
|
{
|
|
set -f
|
|
for pattern in $COMMAND_LINE_COMPONENTS; do
|
|
set +f
|
|
case ${1#component_} in $pattern) return 0;; esac
|
|
done
|
|
set +f
|
|
return 1
|
|
}
|
|
|
|
usage()
|
|
{
|
|
cat <<EOF
|
|
Usage: $0 [OPTION]... [COMPONENT]...
|
|
Run mbedtls release validation tests.
|
|
By default, run all tests. With one or more COMPONENT, run only those.
|
|
COMPONENT can be the name of a component or a shell wildcard pattern.
|
|
|
|
Examples:
|
|
$0 "check_*"
|
|
Run all sanity checks.
|
|
$0 --no-armcc --except test_memsan
|
|
Run everything except builds that require armcc and MemSan.
|
|
|
|
Special options:
|
|
-h|--help Print this help and exit.
|
|
--list-all-components List all available test components and exit.
|
|
--list-components List components supported on this platform and exit.
|
|
|
|
General options:
|
|
-f|--force Force the tests to overwrite any modified files.
|
|
-k|--keep-going Run all tests and report errors at the end.
|
|
-m|--memory Additional optional memory tests.
|
|
--armcc Run ARM Compiler builds (on by default).
|
|
--except Exclude the COMPONENTs listed on the command line,
|
|
instead of running only those.
|
|
--no-armcc Skip ARM Compiler builds.
|
|
--no-force Refuse to overwrite modified files (default).
|
|
--no-keep-going Stop at the first error (default).
|
|
--no-memory No additional memory tests (default).
|
|
--out-of-source-dir=<path> Directory used for CMake out-of-source build tests.
|
|
--random-seed Use a random seed value for randomized tests (default).
|
|
-r|--release-test Run this script in release mode. This fixes the seed value to 1.
|
|
-s|--seed Integer seed value to use for this test run.
|
|
|
|
Tool path options:
|
|
--armc5-bin-dir=<ARMC5_bin_dir_path> ARM Compiler 5 bin directory.
|
|
--armc6-bin-dir=<ARMC6_bin_dir_path> ARM Compiler 6 bin directory.
|
|
EOF
|
|
}
|
|
|
|
# remove built files as well as the cmake cache/config
|
|
cleanup()
|
|
{
|
|
if [ -n "${MBEDTLS_ROOT_DIR+set}" ]; then
|
|
cd "$MBEDTLS_ROOT_DIR"
|
|
fi
|
|
|
|
command make clean
|
|
|
|
# Remove CMake artefacts
|
|
find . -name .git -prune -o \
|
|
-iname CMakeFiles -exec rm -rf {} \+ -o \
|
|
\( -iname cmake_install.cmake -o \
|
|
-iname CTestTestfile.cmake -o \
|
|
-iname CMakeCache.txt \) -exec rm {} \+
|
|
# Recover files overwritten by in-tree CMake builds
|
|
rm -f include/Makefile include/mbedtls/Makefile programs/*/Makefile
|
|
git update-index --no-skip-worktree Makefile library/Makefile programs/Makefile tests/Makefile
|
|
git checkout -- Makefile library/Makefile programs/Makefile tests/Makefile
|
|
|
|
if [ -f "$CONFIG_BAK" ]; then
|
|
mv "$CONFIG_BAK" "$CONFIG_H"
|
|
fi
|
|
}
|
|
|
|
# Executed on exit. May be redefined depending on command line options.
|
|
final_report () {
|
|
:
|
|
}
|
|
|
|
fatal_signal () {
|
|
cleanup
|
|
final_report $1
|
|
trap - $1
|
|
kill -$1 $$
|
|
}
|
|
|
|
trap 'fatal_signal HUP' HUP
|
|
trap 'fatal_signal INT' INT
|
|
trap 'fatal_signal TERM' TERM
|
|
|
|
msg()
|
|
{
|
|
if [ -n "${current_component:-}" ]; then
|
|
current_section="${current_component#component_}: $1"
|
|
else
|
|
current_section="$1"
|
|
fi
|
|
echo ""
|
|
echo "******************************************************************"
|
|
echo "* $current_section "
|
|
printf "* "; date
|
|
echo "******************************************************************"
|
|
}
|
|
|
|
armc6_build_test()
|
|
{
|
|
FLAGS="$1"
|
|
|
|
msg "build: ARM Compiler 6 ($FLAGS), make"
|
|
ARM_TOOL_VARIANT="ult" CC="$ARMC6_CC" AR="$ARMC6_AR" CFLAGS="$FLAGS" \
|
|
WARNING_CFLAGS='-xc -std=c99' make lib
|
|
make clean
|
|
}
|
|
|
|
err_msg()
|
|
{
|
|
echo "$1" >&2
|
|
}
|
|
|
|
check_tools()
|
|
{
|
|
for TOOL in "$@"; do
|
|
if ! `type "$TOOL" >/dev/null 2>&1`; then
|
|
err_msg "$TOOL not found!"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
check_headers_in_cpp () {
|
|
ls include/mbedtls | grep "\.h$" >headers.txt
|
|
<programs/test/cpp_dummy_build.cpp sed -n 's/"$//; s!^#include "mbedtls/!!p' |
|
|
sort |
|
|
diff headers.txt -
|
|
rm headers.txt
|
|
}
|
|
|
|
pre_parse_command_line () {
|
|
COMMAND_LINE_COMPONENTS=
|
|
all_except=0
|
|
no_armcc=
|
|
|
|
# Note that legacy options are ignored instead of being omitted from this
|
|
# list of options, so invocations that worked with previous version of
|
|
# all.sh will still run and work properly.
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--armcc) no_armcc=;;
|
|
--armc5-bin-dir) shift; ARMC5_BIN_DIR="$1";;
|
|
--armc6-bin-dir) shift; ARMC6_BIN_DIR="$1";;
|
|
--except) all_except=1;;
|
|
--force|-f) FORCE=1;;
|
|
--gnutls-cli) shift;;
|
|
--gnutls-legacy-cli) shift;;
|
|
--gnutls-legacy-serv) shift;;
|
|
--gnutls-serv) shift;;
|
|
--help|-h) usage; exit;;
|
|
--keep-going|-k) KEEP_GOING=1;;
|
|
--list-all-components) printf '%s\n' $ALL_COMPONENTS; exit;;
|
|
--list-components) printf '%s\n' $SUPPORTED_COMPONENTS; exit;;
|
|
--memory|-m) ;;
|
|
--no-armcc) no_armcc=1;;
|
|
--no-force) FORCE=0;;
|
|
--no-keep-going) KEEP_GOING=0;;
|
|
--no-memory) ;;
|
|
--openssl) shift;;
|
|
--openssl-legacy) shift;;
|
|
--openssl-next) shift;;
|
|
--out-of-source-dir) shift; OUT_OF_SOURCE_DIR="$1";;
|
|
--random-seed) ;;
|
|
--release-test|-r) ;;
|
|
--seed|-s) shift;;
|
|
-*)
|
|
echo >&2 "Unknown option: $1"
|
|
echo >&2 "Run $0 --help for usage."
|
|
exit 120
|
|
;;
|
|
*) COMMAND_LINE_COMPONENTS="$COMMAND_LINE_COMPONENTS $1";;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# With no list of components, run everything.
|
|
if [ -z "$COMMAND_LINE_COMPONENTS" ]; then
|
|
all_except=1
|
|
fi
|
|
|
|
# --no-armcc is a legacy option. The modern way is --except '*_armcc*'.
|
|
# Ignore it if components are listed explicitly on the command line.
|
|
if [ -n "$no_armcc" ] && [ $all_except -eq 1 ]; then
|
|
COMMAND_LINE_COMPONENTS="$COMMAND_LINE_COMPONENTS *_armcc*"
|
|
fi
|
|
|
|
# Build the list of components to run.
|
|
RUN_COMPONENTS=
|
|
for component in $SUPPORTED_COMPONENTS; do
|
|
if is_component_included "$component"; [ $? -eq $all_except ]; then
|
|
RUN_COMPONENTS="$RUN_COMPONENTS $component"
|
|
fi
|
|
done
|
|
|
|
unset all_except
|
|
unset no_armcc
|
|
}
|
|
|
|
pre_check_git () {
|
|
if [ $FORCE -eq 1 ]; then
|
|
rm -rf "$OUT_OF_SOURCE_DIR"
|
|
git checkout-index -f -q $CONFIG_H
|
|
cleanup
|
|
else
|
|
|
|
if [ -d "$OUT_OF_SOURCE_DIR" ]; then
|
|
echo "Warning - there is an existing directory at '$OUT_OF_SOURCE_DIR'" >&2
|
|
echo "You can either delete this directory manually, or force the test by rerunning"
|
|
echo "the script as: $0 --force --out-of-source-dir $OUT_OF_SOURCE_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
if ! git diff --quiet include/mbedtls/config.h; then
|
|
err_msg "Warning - the configuration file 'include/mbedtls/config.h' has been edited. "
|
|
echo "You can either delete or preserve your work, or force the test by rerunning the"
|
|
echo "script as: $0 --force"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
pre_check_seedfile () {
|
|
if [ ! -f "./tests/seedfile" ]; then
|
|
dd if=/dev/urandom of=./tests/seedfile bs=32 count=1
|
|
fi
|
|
}
|
|
|
|
pre_setup_keep_going () {
|
|
failure_summary=
|
|
failure_count=0
|
|
start_red=
|
|
end_color=
|
|
if [ -t 1 ]; then
|
|
case "${TERM:-}" in
|
|
*color*|cygwin|linux|rxvt*|screen|[Eex]term*)
|
|
start_red=$(printf '\033[31m')
|
|
end_color=$(printf '\033[0m')
|
|
;;
|
|
esac
|
|
fi
|
|
record_status () {
|
|
if "$@"; then
|
|
last_status=0
|
|
else
|
|
last_status=$?
|
|
text="$current_section: $* -> $last_status"
|
|
failure_summary="$failure_summary
|
|
$text"
|
|
failure_count=$((failure_count + 1))
|
|
echo "${start_red}^^^^$text^^^^${end_color}"
|
|
fi
|
|
}
|
|
make () {
|
|
case "$*" in
|
|
*test|*check)
|
|
if [ $build_status -eq 0 ]; then
|
|
record_status command make "$@"
|
|
else
|
|
echo "(skipped because the build failed)"
|
|
fi
|
|
;;
|
|
*)
|
|
record_status command make "$@"
|
|
build_status=$last_status
|
|
;;
|
|
esac
|
|
}
|
|
final_report () {
|
|
if [ $failure_count -gt 0 ]; then
|
|
echo
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo "${start_red}FAILED: $failure_count${end_color}$failure_summary"
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
exit 1
|
|
elif [ -z "${1-}" ]; then
|
|
echo "SUCCESS :)"
|
|
fi
|
|
if [ -n "${1-}" ]; then
|
|
echo "Killed by SIG$1."
|
|
fi
|
|
}
|
|
}
|
|
|
|
if_build_succeeded () {
|
|
if [ $build_status -eq 0 ]; then
|
|
record_status "$@"
|
|
fi
|
|
}
|
|
|
|
# to be used instead of ! for commands run with
|
|
# record_status or if_build_succeeded
|
|
not() {
|
|
! "$@"
|
|
}
|
|
|
|
pre_print_configuration () {
|
|
msg "info: $0 configuration"
|
|
echo "FORCE: $FORCE"
|
|
echo "ARMC5_BIN_DIR: $ARMC5_BIN_DIR"
|
|
echo "ARMC6_BIN_DIR: $ARMC6_BIN_DIR"
|
|
}
|
|
|
|
# Make sure the tools we need are available.
|
|
pre_check_tools () {
|
|
# Build the list of variables to pass to output_env.sh.
|
|
set env
|
|
|
|
case " $RUN_COMPONENTS " in
|
|
*_doxygen[_\ ]*) check_tools "doxygen" "dot";;
|
|
esac
|
|
|
|
case " $RUN_COMPONENTS " in
|
|
*_arm_none_eabi_gcc[_\ ]*) check_tools "arm-none-eabi-gcc";;
|
|
esac
|
|
|
|
case " $RUN_COMPONENTS " in
|
|
*_mingw[_\ ]*) check_tools "i686-w64-mingw32-gcc";;
|
|
esac
|
|
|
|
case " $RUN_COMPONENTS " in
|
|
*" test_zeroize "*) check_tools "gdb";;
|
|
esac
|
|
|
|
case " $RUN_COMPONENTS " in
|
|
*_armcc*)
|
|
ARMC5_CC="$ARMC5_BIN_DIR/armcc"
|
|
ARMC5_AR="$ARMC5_BIN_DIR/armar"
|
|
ARMC6_CC="$ARMC6_BIN_DIR/armclang"
|
|
ARMC6_AR="$ARMC6_BIN_DIR/armar"
|
|
check_tools "$ARMC5_CC" "$ARMC5_AR" "$ARMC6_CC" "$ARMC6_AR";;
|
|
esac
|
|
|
|
msg "info: output_env.sh"
|
|
case $RUN_COMPONENTS in
|
|
*_armcc*)
|
|
set "$@" ARMC5_CC="$ARMC5_CC" ARMC6_CC="$ARMC6_CC" RUN_ARMCC=1;;
|
|
*) set "$@" RUN_ARMCC=0;;
|
|
esac
|
|
"$@" scripts/output_env.sh
|
|
}
|
|
|
|
|
|
|
|
################################################################
|
|
#### Basic checks
|
|
################################################################
|
|
|
|
#
|
|
# Test Suites to be executed
|
|
#
|
|
# The test ordering tries to optimize for the following criteria:
|
|
# 1. Catch possible problems early, by running first tests that run quickly
|
|
# and/or are more likely to fail than others (eg I use Clang most of the
|
|
# time, so start with a GCC build).
|
|
# 2. Minimize total running time, by avoiding useless rebuilds
|
|
#
|
|
# Indicative running times are given for reference.
|
|
|
|
component_check_recursion () {
|
|
msg "test: recursion.pl" # < 1s
|
|
record_status tests/scripts/recursion.pl library/*.c
|
|
}
|
|
|
|
component_check_generated_files () {
|
|
msg "test: freshness of generated source files" # < 1s
|
|
record_status tests/scripts/check-generated-files.sh
|
|
}
|
|
|
|
component_check_doxy_blocks () {
|
|
msg "test: doxygen markup outside doxygen blocks" # < 1s
|
|
record_status tests/scripts/check-doxy-blocks.pl
|
|
}
|
|
|
|
component_check_files () {
|
|
msg "test: check-files.py" # < 1s
|
|
record_status tests/scripts/check-files.py
|
|
}
|
|
|
|
component_check_names () {
|
|
msg "test/build: declared and exported names" # < 3s
|
|
record_status tests/scripts/check-names.sh
|
|
}
|
|
|
|
component_check_doxygen_warnings () {
|
|
msg "test: doxygen warnings" # ~ 3s
|
|
record_status tests/scripts/doxygen.sh
|
|
}
|
|
|
|
|
|
################################################################
|
|
#### Build and test many configurations and targets
|
|
################################################################
|
|
|
|
component_test_default_out_of_box () {
|
|
msg "build: make, default config (out-of-box)" # ~1min
|
|
make
|
|
|
|
msg "test: main suites make, default config (out-of-box)" # ~10s
|
|
make test
|
|
|
|
msg "selftest: make, default config (out-of-box)" # ~10s
|
|
programs/test/selftest
|
|
}
|
|
|
|
component_test_default_cmake_gcc_asan () {
|
|
msg "build: cmake, gcc, ASan" # ~ 1 min 50s
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: main suites (inc. selftests) (ASan build)" # ~ 50s
|
|
make test
|
|
}
|
|
|
|
component_test_ref_configs () {
|
|
msg "test/build: ref-configs (ASan build)" # ~ 6 min 20s
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
record_status tests/scripts/test-ref-configs.pl
|
|
}
|
|
|
|
component_test_rsa_no_crt () {
|
|
msg "build: Default + RSA_NO_CRT (ASan build)" # ~ 6 min
|
|
scripts/config.pl set MBEDTLS_RSA_NO_CRT
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: RSA_NO_CRT - main suites (inc. selftests) (ASan build)" # ~ 50s
|
|
make test
|
|
}
|
|
|
|
component_test_new_ecdh_context () {
|
|
msg "build: new ECDH context (ASan build)" # ~ 6 min
|
|
scripts/config.pl unset MBEDTLS_ECDH_LEGACY_CONTEXT
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: new ECDH context - main suites (inc. selftests) (ASan build)" # ~ 50s
|
|
make test
|
|
}
|
|
|
|
component_test_full_cmake_clang () {
|
|
msg "build: cmake, full config, clang" # ~ 50s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
CC=clang cmake -D CMAKE_BUILD_TYPE:String=Check -D ENABLE_TESTING=On .
|
|
make
|
|
|
|
msg "test: main suites (full config)" # ~ 5s
|
|
make test
|
|
|
|
msg "test: psa_constant_names (full config)" # ~ 1s
|
|
record_status tests/scripts/test_psa_constant_names.py
|
|
}
|
|
|
|
component_build_deprecated () {
|
|
msg "build: make, full config + DEPRECATED_WARNING, gcc -O" # ~ 30s
|
|
scripts/config.pl full
|
|
scripts/config.pl set MBEDTLS_DEPRECATED_WARNING
|
|
# Build with -O -Wextra to catch a maximum of issues.
|
|
make CC=gcc CFLAGS='-O -Werror -Wall -Wextra' lib programs
|
|
make CC=gcc CFLAGS='-O -Werror -Wall -Wextra -Wno-unused-function' tests
|
|
|
|
msg "build: make, full config + DEPRECATED_REMOVED, clang -O" # ~ 30s
|
|
# No cleanup, just tweak the configuration and rebuild
|
|
make clean
|
|
scripts/config.pl unset MBEDTLS_DEPRECATED_WARNING
|
|
scripts/config.pl set MBEDTLS_DEPRECATED_REMOVED
|
|
# Build with -O -Wextra to catch a maximum of issues.
|
|
make CC=clang CFLAGS='-O -Werror -Wall -Wextra' lib programs
|
|
make CC=clang CFLAGS='-O -Werror -Wall -Wextra -Wno-unused-function' tests
|
|
}
|
|
|
|
|
|
component_test_depends_curves () {
|
|
msg "test/build: curves.pl (gcc)" # ~ 4 min
|
|
record_status tests/scripts/curves.pl
|
|
}
|
|
|
|
component_test_depends_hashes () {
|
|
msg "test/build: depends-hashes.pl (gcc)" # ~ 2 min
|
|
record_status tests/scripts/depends-hashes.pl
|
|
}
|
|
|
|
component_test_depends_pkalgs () {
|
|
msg "test/build: depends-pkalgs.pl (gcc)" # ~ 2 min
|
|
record_status tests/scripts/depends-pkalgs.pl
|
|
}
|
|
|
|
component_build_default_make_gcc_and_cxx () {
|
|
msg "build: Unix make, -Os (gcc)" # ~ 30s
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -Os'
|
|
|
|
msg "test: verify header list in cpp_dummy_build.cpp"
|
|
record_status check_headers_in_cpp
|
|
|
|
msg "build: Unix make, incremental g++"
|
|
make TEST_CPP=1
|
|
}
|
|
|
|
component_test_use_psa_crypto_full_cmake_asan() {
|
|
# MBEDTLS_USE_PSA_CRYPTO: run the same set of tests as basic-build-test.sh
|
|
msg "build: cmake, full config + MBEDTLS_USE_PSA_CRYPTO, ASan"
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
scripts/config.pl unset MBEDTLS_ECP_RESTARTABLE # restartable ECC not supported through PSA
|
|
scripts/config.pl set MBEDTLS_PSA_CRYPTO_C
|
|
scripts/config.pl set MBEDTLS_USE_PSA_CRYPTO
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: main suites (MBEDTLS_USE_PSA_CRYPTO)"
|
|
make test
|
|
}
|
|
|
|
component_test_check_params_without_platform () {
|
|
msg "build+test: MBEDTLS_CHECK_PARAMS without MBEDTLS_PLATFORM_C"
|
|
scripts/config.pl full # includes CHECK_PARAMS
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_EXIT_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_TIME_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_FPRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_MEMORY
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_PRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_SNPRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_C
|
|
make CC=gcc CFLAGS='-Werror -O1' all test
|
|
}
|
|
|
|
component_test_check_params_silent () {
|
|
msg "build+test: MBEDTLS_CHECK_PARAMS with alternative MBEDTLS_PARAM_FAILED()"
|
|
scripts/config.pl full # includes CHECK_PARAMS
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
sed -i 's/.*\(#define MBEDTLS_PARAM_FAILED( cond )\).*/\1/' "$CONFIG_H"
|
|
make CC=gcc CFLAGS='-Werror -O1' all test
|
|
}
|
|
|
|
component_test_no_platform () {
|
|
# Full configuration build, without platform support, file IO and net sockets.
|
|
# This should catch missing mbedtls_printf definitions, and by disabling file
|
|
# IO, it should catch missing '#include <stdio.h>'
|
|
msg "build: full config except platform/fsio/net, make, gcc, C99" # ~ 30s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_C
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_MEMORY
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_PRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_FPRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_SNPRINTF_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_TIME_ALT
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_EXIT_ALT
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C
|
|
scripts/config.pl unset MBEDTLS_FS_IO
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_ITS_FILE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C
|
|
# Note, _DEFAULT_SOURCE needs to be defined for platforms using glibc version >2.19,
|
|
# to re-enable platform integration features otherwise disabled in C99 builds
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -std=c99 -pedantic -O0 -D_DEFAULT_SOURCE' lib programs
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -O0' test
|
|
}
|
|
|
|
component_build_no_std_function () {
|
|
# catch compile bugs in _uninit functions
|
|
msg "build: full config with NO_STD_FUNCTION, make, gcc" # ~ 30s
|
|
scripts/config.pl full
|
|
scripts/config.pl set MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -O0'
|
|
}
|
|
|
|
component_test_null_entropy () {
|
|
msg "build: default config with MBEDTLS_TEST_NULL_ENTROPY (ASan build)"
|
|
scripts/config.pl set MBEDTLS_TEST_NULL_ENTROPY
|
|
scripts/config.pl set MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES
|
|
scripts/config.pl set MBEDTLS_ENTROPY_C
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_HARDWARE_ALT
|
|
scripts/config.pl unset MBEDTLS_HAVEGE_C
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan -D UNSAFE_BUILD=ON .
|
|
make
|
|
|
|
msg "test: MBEDTLS_TEST_NULL_ENTROPY - main suites (inc. selftests) (ASan build)"
|
|
make test
|
|
}
|
|
|
|
component_test_platform_calloc_macro () {
|
|
msg "build: MBEDTLS_PLATFORM_{CALLOC/FREE}_MACRO enabled (ASan build)"
|
|
scripts/config.pl set MBEDTLS_PLATFORM_MEMORY
|
|
scripts/config.pl set MBEDTLS_PLATFORM_CALLOC_MACRO calloc
|
|
scripts/config.pl set MBEDTLS_PLATFORM_FREE_MACRO free
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: MBEDTLS_PLATFORM_{CALLOC/FREE}_MACRO enabled (ASan build)"
|
|
make test
|
|
}
|
|
|
|
component_test_aes_fewer_tables () {
|
|
msg "build: default config with AES_FEWER_TABLES enabled"
|
|
scripts/config.pl set MBEDTLS_AES_FEWER_TABLES
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra'
|
|
|
|
msg "test: AES_FEWER_TABLES"
|
|
make test
|
|
}
|
|
|
|
component_test_aes_rom_tables () {
|
|
msg "build: default config with AES_ROM_TABLES enabled"
|
|
scripts/config.pl set MBEDTLS_AES_ROM_TABLES
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra'
|
|
|
|
msg "test: AES_ROM_TABLES"
|
|
make test
|
|
}
|
|
|
|
component_test_aes_fewer_tables_and_rom_tables () {
|
|
msg "build: default config with AES_ROM_TABLES and AES_FEWER_TABLES enabled"
|
|
scripts/config.pl set MBEDTLS_AES_FEWER_TABLES
|
|
scripts/config.pl set MBEDTLS_AES_ROM_TABLES
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra'
|
|
|
|
msg "test: AES_FEWER_TABLES + AES_ROM_TABLES"
|
|
make test
|
|
}
|
|
|
|
component_test_make_shared () {
|
|
msg "build/test: make shared" # ~ 40s
|
|
make SHARED=1 all check
|
|
}
|
|
|
|
component_test_m32_o0 () {
|
|
# Build once with -O0, to compile out the i386 specific inline assembly
|
|
msg "build: i386, make, gcc -O0 (ASan build)" # ~ 30s
|
|
scripts/config.pl full
|
|
make CC=gcc CFLAGS='-O0 -Werror -Wall -Wextra -m32 -fsanitize=address'
|
|
|
|
msg "test: i386, make, gcc -O0 (ASan build)"
|
|
make test
|
|
}
|
|
support_test_m32_o0 () {
|
|
case $(uname -m) in
|
|
*64*) true;;
|
|
*) false;;
|
|
esac
|
|
}
|
|
|
|
component_test_m32_o1 () {
|
|
# Build again with -O1, to compile in the i386 specific inline assembly
|
|
msg "build: i386, make, gcc -O1 (ASan build)" # ~ 30s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C
|
|
scripts/config.pl unset MBEDTLS_MEMORY_DEBUG
|
|
make CC=gcc CFLAGS='-O1 -Werror -Wall -Wextra -m32 -fsanitize=address'
|
|
|
|
msg "test: i386, make, gcc -O1 (ASan build)"
|
|
make test
|
|
}
|
|
support_test_m32_o1 () {
|
|
support_test_m32_o0 "$@"
|
|
}
|
|
|
|
component_test_mx32 () {
|
|
msg "build: 64-bit ILP32, make, gcc" # ~ 30s
|
|
scripts/config.pl full
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -mx32'
|
|
|
|
msg "test: 64-bit ILP32, make, gcc"
|
|
make test
|
|
}
|
|
support_test_mx32 () {
|
|
case $(uname -m) in
|
|
amd64|x86_64) true;;
|
|
*) false;;
|
|
esac
|
|
}
|
|
|
|
component_test_min_mpi_window_size () {
|
|
msg "build: Default + MBEDTLS_MPI_WINDOW_SIZE=1 (ASan build)" # ~ 10s
|
|
scripts/config.pl set MBEDTLS_MPI_WINDOW_SIZE 1
|
|
CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
|
|
make
|
|
|
|
msg "test: MBEDTLS_MPI_WINDOW_SIZE=1 - main suites (inc. selftests) (ASan build)" # ~ 10s
|
|
make test
|
|
}
|
|
|
|
component_test_have_int32 () {
|
|
msg "build: gcc, force 32-bit bignum limbs"
|
|
scripts/config.pl unset MBEDTLS_HAVE_ASM
|
|
scripts/config.pl unset MBEDTLS_AESNI_C
|
|
scripts/config.pl unset MBEDTLS_PADLOCK_C
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -DMBEDTLS_HAVE_INT32'
|
|
|
|
msg "test: gcc, force 32-bit bignum limbs"
|
|
make test
|
|
}
|
|
|
|
component_test_have_int64 () {
|
|
msg "build: gcc, force 64-bit bignum limbs"
|
|
scripts/config.pl unset MBEDTLS_HAVE_ASM
|
|
scripts/config.pl unset MBEDTLS_AESNI_C
|
|
scripts/config.pl unset MBEDTLS_PADLOCK_C
|
|
make CC=gcc CFLAGS='-Werror -Wall -Wextra -DMBEDTLS_HAVE_INT64'
|
|
|
|
msg "test: gcc, force 64-bit bignum limbs"
|
|
make test
|
|
}
|
|
|
|
component_test_no_udbl_division () {
|
|
msg "build: MBEDTLS_NO_UDBL_DIVISION native" # ~ 10s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
scripts/config.pl set MBEDTLS_NO_UDBL_DIVISION
|
|
make CFLAGS='-Werror -O1'
|
|
|
|
msg "test: MBEDTLS_NO_UDBL_DIVISION native" # ~ 10s
|
|
make test
|
|
}
|
|
|
|
component_test_no_64bit_multiplication () {
|
|
msg "build: MBEDTLS_NO_64BIT_MULTIPLICATION native" # ~ 10s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # too slow for tests
|
|
scripts/config.pl set MBEDTLS_NO_64BIT_MULTIPLICATION
|
|
make CFLAGS='-Werror -O1'
|
|
|
|
msg "test: MBEDTLS_NO_64BIT_MULTIPLICATION native" # ~ 10s
|
|
make test
|
|
}
|
|
|
|
component_build_arm_none_eabi_gcc () {
|
|
msg "build: arm-none-eabi-gcc, make" # ~ 10s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_TIMING_C
|
|
scripts/config.pl unset MBEDTLS_FS_IO
|
|
scripts/config.pl unset MBEDTLS_PSA_ITS_FILE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_C
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl set MBEDTLS_NO_PLATFORM_ENTROPY
|
|
# following things are not in the default config
|
|
scripts/config.pl unset MBEDTLS_HAVEGE_C # depends on timing.c
|
|
scripts/config.pl unset MBEDTLS_THREADING_PTHREAD
|
|
scripts/config.pl unset MBEDTLS_THREADING_C
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # execinfo.h
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C # calls exit
|
|
make CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld CFLAGS='-Werror -Wall -Wextra' lib
|
|
}
|
|
|
|
component_build_arm_none_eabi_gcc_no_udbl_division () {
|
|
msg "build: arm-none-eabi-gcc -DMBEDTLS_NO_UDBL_DIVISION, make" # ~ 10s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_TIMING_C
|
|
scripts/config.pl unset MBEDTLS_FS_IO
|
|
scripts/config.pl unset MBEDTLS_PSA_ITS_FILE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_C
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl set MBEDTLS_NO_PLATFORM_ENTROPY
|
|
# following things are not in the default config
|
|
scripts/config.pl unset MBEDTLS_HAVEGE_C # depends on timing.c
|
|
scripts/config.pl unset MBEDTLS_THREADING_PTHREAD
|
|
scripts/config.pl unset MBEDTLS_THREADING_C
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # execinfo.h
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C # calls exit
|
|
scripts/config.pl set MBEDTLS_NO_UDBL_DIVISION
|
|
make CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld CFLAGS='-Werror -Wall -Wextra' lib
|
|
echo "Checking that software 64-bit division is not required"
|
|
if_build_succeeded not grep __aeabi_uldiv library/*.o
|
|
}
|
|
|
|
component_build_arm_none_eabi_gcc_no_64bit_multiplication () {
|
|
msg "build: arm-none-eabi-gcc MBEDTLS_NO_64BIT_MULTIPLICATION, make" # ~ 10s
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_TIMING_C
|
|
scripts/config.pl unset MBEDTLS_FS_IO
|
|
scripts/config.pl unset MBEDTLS_PSA_ITS_FILE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_C
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl set MBEDTLS_NO_PLATFORM_ENTROPY
|
|
# following things are not in the default config
|
|
scripts/config.pl unset MBEDTLS_HAVEGE_C # depends on timing.c
|
|
scripts/config.pl unset MBEDTLS_THREADING_PTHREAD
|
|
scripts/config.pl unset MBEDTLS_THREADING_C
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # execinfo.h
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C # calls exit
|
|
scripts/config.pl set MBEDTLS_NO_64BIT_MULTIPLICATION
|
|
make CC=arm-none-eabi-gcc AR=arm-none-eabi-ar LD=arm-none-eabi-ld CFLAGS='-Werror -O1 -march=armv6-m -mthumb' lib
|
|
echo "Checking that software 64-bit multiplication is not required"
|
|
if_build_succeeded not grep __aeabi_lmul library/*.o
|
|
}
|
|
|
|
component_build_armcc () {
|
|
msg "build: ARM Compiler 5, make"
|
|
scripts/config.pl full
|
|
scripts/config.pl unset MBEDTLS_TIMING_C
|
|
scripts/config.pl unset MBEDTLS_FS_IO
|
|
scripts/config.pl unset MBEDTLS_PSA_ITS_FILE_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_ITS_C
|
|
scripts/config.pl unset MBEDTLS_PSA_CRYPTO_STORAGE_C
|
|
scripts/config.pl unset MBEDTLS_ENTROPY_NV_SEED
|
|
scripts/config.pl unset MBEDTLS_HAVE_TIME
|
|
scripts/config.pl unset MBEDTLS_HAVE_TIME_DATE
|
|
scripts/config.pl set MBEDTLS_NO_PLATFORM_ENTROPY
|
|
# following things are not in the default config
|
|
scripts/config.pl unset MBEDTLS_DEPRECATED_WARNING
|
|
scripts/config.pl unset MBEDTLS_HAVEGE_C # depends on timing.c
|
|
scripts/config.pl unset MBEDTLS_THREADING_PTHREAD
|
|
scripts/config.pl unset MBEDTLS_THREADING_C
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BACKTRACE # execinfo.h
|
|
scripts/config.pl unset MBEDTLS_MEMORY_BUFFER_ALLOC_C # calls exit
|
|
scripts/config.pl unset MBEDTLS_PLATFORM_TIME_ALT # depends on MBEDTLS_HAVE_TIME
|
|
|
|
make CC="$ARMC5_CC" AR="$ARMC5_AR" WARNING_CFLAGS='--strict --c99' lib
|
|
make clean
|
|
|
|
# ARM Compiler 6 - Target ARMv7-A
|
|
armc6_build_test "--target=arm-arm-none-eabi -march=armv7-a"
|
|
|
|
# ARM Compiler 6 - Target ARMv7-M
|
|
armc6_build_test "--target=arm-arm-none-eabi -march=armv7-m"
|
|
|
|
# ARM Compiler 6 - Target ARMv8-A - AArch32
|
|
armc6_build_test "--target=arm-arm-none-eabi -march=armv8.2-a"
|
|
|
|
# ARM Compiler 6 - Target ARMv8-M
|
|
armc6_build_test "--target=arm-arm-none-eabi -march=armv8-m.main"
|
|
|
|
# ARM Compiler 6 - Target ARMv8-A - AArch64
|
|
armc6_build_test "--target=aarch64-arm-none-eabi -march=armv8.2-a"
|
|
}
|
|
|
|
component_build_mingw () {
|
|
msg "build: Windows cross build - mingw64, make (Link Library)" # ~ 30s
|
|
make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 lib programs
|
|
|
|
# note Make tests only builds the tests, but doesn't run them
|
|
make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror' WINDOWS_BUILD=1 tests
|
|
make WINDOWS_BUILD=1 clean
|
|
|
|
msg "build: Windows cross build - mingw64, make (DLL)" # ~ 30s
|
|
make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 SHARED=1 lib programs
|
|
make CC=i686-w64-mingw32-gcc AR=i686-w64-mingw32-ar LD=i686-w64-minggw32-ld CFLAGS='-Werror -Wall -Wextra' WINDOWS_BUILD=1 SHARED=1 tests
|
|
make WINDOWS_BUILD=1 clean
|
|
}
|
|
support_build_mingw() {
|
|
case $(i686-w64-mingw32-gcc -dumpversion) in
|
|
[0-5]*) false;;
|
|
*) true;;
|
|
esac
|
|
}
|
|
|
|
component_test_memsan () {
|
|
msg "build: MSan (clang)" # ~ 1 min 20s
|
|
scripts/config.pl unset MBEDTLS_AESNI_C # memsan doesn't grok asm
|
|
CC=clang cmake -D CMAKE_BUILD_TYPE:String=MemSan .
|
|
make
|
|
|
|
msg "test: main suites (MSan)" # ~ 10s
|
|
make test
|
|
}
|
|
|
|
component_test_valgrind () {
|
|
msg "build: Release (clang)"
|
|
CC=clang cmake -D CMAKE_BUILD_TYPE:String=Release .
|
|
make
|
|
|
|
msg "test: main suites valgrind (Release)"
|
|
make memcheck
|
|
}
|
|
|
|
component_test_cmake_out_of_source () {
|
|
msg "build: cmake 'out-of-source' build"
|
|
MBEDTLS_ROOT_DIR="$PWD"
|
|
mkdir "$OUT_OF_SOURCE_DIR"
|
|
cd "$OUT_OF_SOURCE_DIR"
|
|
cmake "$MBEDTLS_ROOT_DIR"
|
|
make
|
|
|
|
msg "test: cmake 'out-of-source' build"
|
|
make test
|
|
|
|
cd "$MBEDTLS_ROOT_DIR"
|
|
rm -rf "$OUT_OF_SOURCE_DIR"
|
|
unset MBEDTLS_ROOT_DIR
|
|
}
|
|
|
|
component_test_zeroize () {
|
|
# Test that the function mbedtls_platform_zeroize() is not optimized away by
|
|
# different combinations of compilers and optimization flags by using an
|
|
# auxiliary GDB script. Unfortunately, GDB does not return error values to the
|
|
# system in all cases that the script fails, so we must manually search the
|
|
# output to check whether the pass string is present and no failure strings
|
|
# were printed.
|
|
|
|
# Don't try to disable ASLR. We don't care about ASLR here. We do care
|
|
# about a spurious message if Gdb tries and fails, so suppress that.
|
|
gdb_disable_aslr=
|
|
if [ -z "$(gdb -batch -nw -ex 'set disable-randomization off' 2>&1)" ]; then
|
|
gdb_disable_aslr='set disable-randomization off'
|
|
fi
|
|
|
|
for optimization_flag in -O2 -O3 -Ofast -Os; do
|
|
for compiler in clang gcc; do
|
|
msg "test: $compiler $optimization_flag, mbedtls_platform_zeroize()"
|
|
make programs CC="$compiler" DEBUG=1 CFLAGS="$optimization_flag"
|
|
if_build_succeeded gdb -ex "$gdb_disable_aslr" -x tests/scripts/test_zeroize.gdb -nw -batch -nx 2>&1 | tee test_zeroize.log
|
|
if_build_succeeded grep "The buffer was correctly zeroized" test_zeroize.log
|
|
if_build_succeeded not grep -i "error" test_zeroize.log
|
|
rm -f test_zeroize.log
|
|
make clean
|
|
done
|
|
done
|
|
|
|
unset gdb_disable_aslr
|
|
}
|
|
|
|
support_check_python_files () {
|
|
type pylint3 >/dev/null 2>/dev/null
|
|
}
|
|
component_check_python_files () {
|
|
msg "Lint: Python scripts"
|
|
record_status tests/scripts/check-python-files.sh
|
|
}
|
|
|
|
component_check_generate_test_code () {
|
|
msg "uint test: generate_test_code.py"
|
|
record_status ./tests/scripts/test_generate_test_code.py
|
|
}
|
|
|
|
################################################################
|
|
#### Termination
|
|
################################################################
|
|
|
|
post_report () {
|
|
msg "Done, cleaning up"
|
|
cleanup
|
|
|
|
final_report
|
|
}
|
|
|
|
|
|
|
|
################################################################
|
|
#### Run all the things
|
|
################################################################
|
|
|
|
# Run one component and clean up afterwards.
|
|
run_component () {
|
|
# Back up the configuration in case the component modifies it.
|
|
# The cleanup function will restore it.
|
|
cp -p "$CONFIG_H" "$CONFIG_BAK"
|
|
current_component="$1"
|
|
"$@"
|
|
cleanup
|
|
}
|
|
|
|
# Preliminary setup
|
|
pre_check_environment
|
|
pre_initialize_variables
|
|
pre_parse_command_line "$@"
|
|
|
|
pre_check_git
|
|
pre_check_seedfile
|
|
|
|
build_status=0
|
|
if [ $KEEP_GOING -eq 1 ]; then
|
|
pre_setup_keep_going
|
|
else
|
|
record_status () {
|
|
"$@"
|
|
}
|
|
fi
|
|
pre_print_configuration
|
|
pre_check_tools
|
|
cleanup
|
|
|
|
# Run the requested tests.
|
|
for component in $RUN_COMPONENTS; do
|
|
run_component "component_$component"
|
|
done
|
|
|
|
# We're done.
|
|
post_report
|