#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -x srcdir=`dirname $0` [ -z "$srcdir" ] && srcdir=. ORIGDIR=`pwd` cd $srcdir autoreconf -v --force --install || exit $? cd $ORIGDIR || exit $? CFLAGS="$CFLAGS -std=c99 -fno-builtin -DHAVE_SGX=1 -fPIC -DUNW_LOCAL_ONLY" # Remove duplicated compiler options and filter out `-nostdinc' CFLAGS=`echo $CFLAGS | tr ' ' '\n' | sort | uniq | grep -v nostdinc | tr '\n' ' '` HOST_OPT= if echo $CFLAGS | grep -q -- '-m32'; then HOST_OPT='--host=i386-linux-gnu' fi # Workaround for icc # # If we are running icc on Debian-like system, add # /usr/include/$(dpkg-architecture -qDEB_BUILD_MULTIARCH) # to the header search path. if [ -f /usr/bin/dpkg ]; then if [ x$CC != x"" ]; then if $CC -E -dM -xc /dev/null | grep -q __INTEL_COMPILER; then INCVAR=$(dpkg-architecture -qDEB_BUILD_MULTIARCH) CFLAGS="$CFLAGS -I/usr/include/$INCVAR" fi fi fi sed -i "s/rtmk-nova\*/rtmk-nova\* | linux-sgx/" $srcdir/config/config.sub #Insert following codes into configure after add "-mfunction-return=thunk-extern -mindirect-branch-register" option, Or the "checking whether the C compiler works..." check will fail #Insert following codes into configure after add "-mfunction-return=thunk-extern -mindirect-branch-register" option, Or the "checking whether we are cross compiling... " check will fail # #pragma GCC push_options # #pragma GCC optimize ("-fomit-frame-pointer") # void __x86_return_thunk() # { # __asm__("ret\n\t"); # } # void __x86_indirect_thunk_rax() # { # __asm__("jmp *%rax\n\t"); # } # #pragma GCC pop_options line=`grep -n "__x86_return_thunk()" $srcdir/configure | cut -d: -f 1` if [ -n "$line" ]; then echo "__x86_return_thunk() already exist..." else line_end=`grep -n "\"checking whether the C compiler works... \"" $srcdir/configure | cut -d: -f 1` line_start=`expr $line_end - 30` #Search an scope sed -i "${line_start},${line_end} s/^_ACEOF/#pragma GCC push_options\r\n#pragma GCC optimize (\"-fomit-frame-pointer\")\r\nvoid __x86_return_thunk(){__asm__(\"ret\\\n\\\t\");}\r\nvoid __x86_indirect_thunk_rax(){__asm__(\"jmp \*%rax\\\n\\\t\");}\r\n#pragma GCC pop_options\r\n_ACEOF/" $srcdir/configure line_end=`grep -n "\"checking whether we are cross compiling... \"" $srcdir/configure | cut -d: -f 1` line_start=`expr $line_end - 30` #Search an scope sed -i "${line_start},${line_end} s/^_ACEOF/#pragma GCC push_options\r\n#pragma GCC optimize (\"-fomit-frame-pointer\")\r\nvoid __x86_return_thunk(){__asm__(\"ret\\\n\\\t\");}\r\nvoid __x86_indirect_thunk_rax(){__asm__(\"jmp \*%rax\\\n\\\t\");}\r\n#pragma GCC pop_options\r\n_ACEOF/" $srcdir/configure fi export CFLAGS $srcdir/configure $HOST_OPT --enable-shared=no \ --disable-block-signals \ --enable-debug=no \ --enable-debug-frame=no \ --enable-cxx-exceptions \ "$@"