158 lines
5.6 KiB
Makefile
158 lines
5.6 KiB
Makefile
#
|
|
# 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.
|
|
#
|
|
#
|
|
|
|
# -------------------------------------------------------------------
|
|
# Function : parent-dir
|
|
# Arguments: 1: path
|
|
# Returns : Parent dir or path of $1, with final separator removed.
|
|
# -------------------------------------------------------------------
|
|
parent-dir = $(patsubst %/,%,$(dir $(1:%/=%)))
|
|
|
|
# ------------------------------------------------------------------
|
|
# Macro : my-dir
|
|
# Returns : the directory of the current Makefile
|
|
# Usage : $(my-dir)
|
|
# ------------------------------------------------------------------
|
|
my-dir = $(realpath $(call parent-dir,$(lastword $(MAKEFILE_LIST))))
|
|
|
|
ROOT_DIR := $(call my-dir)
|
|
ifneq ($(words $(subst :, ,$(ROOT_DIR))), 1)
|
|
$(error main directory cannot contain spaces nor colons)
|
|
endif
|
|
|
|
# -------------------------------------------------------------------
|
|
# User needs to install SGX SDK installer before compiling this project.
|
|
# -------------------------------------------------------------------
|
|
ifeq ($(SGX_SDK),)
|
|
$(warning "import SGX SDK environment variable")
|
|
export SGX_SDK=/opt/intel/sgxsdk/
|
|
endif
|
|
|
|
SGX_SDK_PATH ?= $(SGX_SDK)
|
|
|
|
#-------------------------------------------------------------------
|
|
# This is the output folder.
|
|
#-------------------------------------------------------------------
|
|
BUILD_DIR := build
|
|
TOPDIR = $(ROOT_DIR)
|
|
OUTDIR := $(BUILD_DIR)
|
|
|
|
CP = cp
|
|
CC ?= gcc
|
|
CXX ?= g++
|
|
|
|
# turn on cet
|
|
CC_GREAT_EQUAL_8 := $(shell expr "`$(CC) -dumpversion`" \>= "8")
|
|
ifeq ($(CC_GREAT_EQUAL_8), 1)
|
|
COMMON_FLAGS += -fcf-protection
|
|
endif
|
|
|
|
# ------------------------------------------------------------------
|
|
# Define common variables
|
|
# ------------------------------------------------------------------
|
|
SGX_MODE ?= HW
|
|
SGX_ARCH ?= x64
|
|
SGX_DEBUG ?= 1
|
|
|
|
#-------------------------------------------------------------------
|
|
# Define common compile flags used for GCC and G++
|
|
#-------------------------------------------------------------------
|
|
COMMON_FLAGS = -ffunction-sections -fdata-sections
|
|
|
|
COMMON_FLAGS += -Wall -Wextra -Wchar-subscripts -Wno-coverage-mismatch -Winit-self \
|
|
-Wpointer-arith -Wreturn-type -Waddress -Wsequence-point -Wformat-security \
|
|
-Wmissing-include-dirs -Wfloat-equal -Wundef -Wshadow \
|
|
-Wcast-align -Wconversion -Wredundant-decls
|
|
|
|
ifeq ($(SGX_DEBUG), 1)
|
|
ifeq ($(SGX_PRERELEASE), 1)
|
|
$(error Cannot set SGX_DEBUG and SGX_PRERELEASE at the same time!!)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SGX_DEBUG), 1)
|
|
COMMON_FLAGS += -ggdb -DDEBUG
|
|
COMMON_FLAGS += -DDEBUG_LEVEL=TRACE_DEBUG
|
|
else
|
|
COMMON_FLAGS += -o2 -UDEBUG
|
|
endif
|
|
|
|
CFLAGS = $(COMMON_FLAGS)
|
|
CXXFLAGS = $(COMMON_FLAGS)
|
|
|
|
# additional warnings flags for C
|
|
CFLAGS += -Wjump-misses-init -Wstrict-prototypes -Wunsuffixed-float-constants
|
|
|
|
# additional warnings flags for C++
|
|
CXXFLAGS += -Wnon-virtual-dtor -std=c++11
|
|
|
|
# ----------------------------------------------------------------
|
|
# Define common link options
|
|
# ----------------------------------------------------------------
|
|
COMMON_LDFLAGS := -Wl,-z,relro,-z,now,-z,noexecstack
|
|
|
|
# Compiler and linker options for an Enclave
|
|
#
|
|
# We are using '--export-dynamic' so that `g_global_data_sim' etc.
|
|
# will be exported to dynamic symbol table.
|
|
#
|
|
# When `pie' is enabled, the linker (both BFD and Gold) under Ubuntu 14.04
|
|
# will hide all symbols from dynamic symbol table even if they are marked
|
|
# as `global' in the LD version script.
|
|
ENCLAVE_CFLAGS = -ffreestanding -nostdinc -fvisibility=hidden -fpie
|
|
ifeq ($(CC_GREAT_EQUAL_8), 1)
|
|
ENCLAVE_CFLAGS += -fcf-protection
|
|
endif
|
|
ENCLAVE_CXXFLAGS = $(ENCLAVE_CFLAGS) -nostdinc++
|
|
ENCLAVE_LDFLAGS = $(COMMON_LDFLAGS)
|
|
|
|
RM = rm -f
|
|
|
|
ifeq ($(shell getconf LONG_BIT), 32)
|
|
SGX_ARCH := x86
|
|
else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32)
|
|
SGX_ARCH := x86
|
|
endif
|
|
|
|
ifeq ($(SGX_ARCH), x86)
|
|
SGX_COMMON_FLAGS := -m32
|
|
SGX_LIBRARY_PATH := $(SGX_SDK)/lib
|
|
SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x86/sgx_sign
|
|
SGX_EDGER8R := $(SGX_SDK)/bin/x86/sgx_edger8r
|
|
else
|
|
SGX_COMMON_FLAGS := -m64
|
|
SGX_LIBRARY_PATH := $(SGX_SDK)/lib64
|
|
SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x64/sgx_sign
|
|
SGX_EDGER8R := $(SGX_SDK)/bin/x64/sgx_edger8r
|
|
endif
|
|
|
|
SGX_COMMON_FLAGS += $(COMMON_FLAGS)
|