#!/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