Files
intel-linux-sgx/linux/reproducibility/start_build.sh.tmp
T
Bartosz Gotowalski f7a86a8b8c Updates the Linux reproducibility tooling to include building QAE
Build and collect the QAE shared library (`libsgx_qae.so`) as part of the AE reproducible build.
Add a pre-run cleanup step to remove a potentially problematic WAMR-generated `version.h` on the bind-mounted tree.
Document that `--sgx-src-dir` should point to a clean source tree without prior build artifacts.

---------

Signed-off-by: Bartosz Gotowalski <bartosz.gotowalski@intel.com>
2026-02-19 17:12:52 +01:00

159 lines
3.8 KiB
Bash

#!/usr/bin/env bash
#
# Copyright (c) 2011-2026 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
# The script should be executed in the container with NIX environment.
# It automates the reproducible build in container.
set -e
script_dir="$( cd "$( dirname "$0" )" >> /dev/null 2>&1 && pwd )"
sgx_repo="$script_dir/sgx"
build_out="$script_dir/out"
sdk_prefix="/linux-sgx/"
sdk_install_path="/linux-sgx/sgxsdk"
toolset_dir=""
sdk_installer=""
clean_repo()
{
pushd .
if [ -f $sgx_repo/external/ippcp_internal/Makefile ]; then
cd $sgx_repo/external/ippcp_internal/ && make clean
fi
if [ -f $sgx_repo/Makefile ]; then
cd $sgx_repo/ && make clean
fi
# uninstall SDK installer
if [ -x "$sdk_install_path/uninstall.sh" ]; then
$sdk_install_path/uninstall.sh
fi
#rm -rf $build_out
popd
}
build_ipp()
{
local ipp_out="$build_out/ipp"
pushd .
cd $sgx_repo/external/ippcp_internal/
make clean; make
make clean; make MITIGATION-CVE-2020-0551=LOAD
make clean; make MITIGATION-CVE-2020-0551=CF
mkdir -p "$ipp_out"
cp -r $sgx_repo/external/ippcp_internal/lib/linux/intel64/* "$ipp_out"
popd
}
build_sdk()
{
local sdk_out="$build_out/sdk"
pushd .
cd $sgx_repo; make sdk_install_pkg
local installer=$(find $sgx_repo/linux/installer/bin -name "sgx_linux_x64_sdk*.bin")
if [ ! -d "$sdk_out" ]; then
mkdir -p $sdk_out
fi
cp $installer $sdk_out
cp -r $sgx_repo/build/* $sdk_out
popd
sdk_installer="$installer"
}
build_ae()
{
# Requires two input args:
# $1: sdk installer path
if [ $# != 1 ]; then
echo "Invalid input parameter"
exit 1
fi
local sdk_installer="$1"
if [ ! -f "$sdk_installer" ]; then
echo "SDK installer is not found. $sdk_installer"
exit 1
fi
# Install sdk installer and source environment
$sdk_installer --prefix=$sdk_prefix
source $sdk_install_path/environment
pushd .
local ae_out="$build_out/ae"
mkdir -p $ae_out
cd $sgx_repo/external/dcap_source/ae/qae && make
cp libsgx_qae.so $ae_out
cd $sgx_repo/psw/ae/pce && make
cp pce.so $ae_out
cd $sgx_repo/external/dcap_source/ae/qe3/linux && make
cp qe3.so $ae_out
cd $sgx_repo/external/dcap_source/ae/id_enclave/linux && make
cp id_enclave.so $ae_out
cd $sgx_repo/external/dcap_source/ae/tdqe/linux && make
cp tdqe.so $ae_out
cd $sgx_repo/external/dcap_source/ae/QvE && make
cp qve.so $ae_out
popd
}
usage()
{
echo "
Usage:
$0 TYPE
Description:
Automate the reproducible build in the container. The reproducibility TYPE
should be provied and could be one of [ all | sdk | ae | ipp ]
"
}
###########################################################################
###########################################################################
type="$1"
if [ "$type" = "" ]; then
echo "Invalid input parameter. Please input the reproducibility type.
Possible options: [ all | sdk | ae | ipp ]"
exit 1
elif [ ! -d "$sgx_repo" ]; then
echo "No sgx source code."
exit 1
fi
clean_repo
case "$type" in
"all")
build_ipp
build_sdk
build_ae $sdk_installer
echo "All the targets are built out and could be found under $build_out"
;;
"ae")
sdk_installer=$(ls $script_dir/sgx_linux_x64_sdk_*.bin)
build_ae $sdk_installer
echo "The built out AEs could be found under $build_out/ae"
;;
"sdk")
build_sdk
echo "SGX SDK installer has been built out. $sdk_installer"
;;
"ipp")
build_ipp
echo "The built out IPP crypto libs could be found under $build_out/ipp"
;;
*)
echo "Unsupported type."
usage
exit 1
esac
exit 0