blob: fab6a6c8a2ce5d638a491a777b39ac0567b8a5d7 [file] [log] [blame]
# Makefile settings - Host part
LIB = ../lib/
BIN = ../bin/
SRC_RST = ./src/
APP_U = app
APP_T = enclave.so
NAME_U = libEnclave_u.a
SRC_U = ./
SRC_T = ../enclave/
OBJ_U = ../obj/
SGX_SDK = /opt/sgxsdk
FLAGS = -Wall -Wextra
GCC_STEP1_U = -I $(SRC_U) -I./include -I$(SGX_SDK)/include -I$(CUSTOM_EDL_PATH) -fPIC -Wno-attributes $(SGX_COMMON_CFLAGS)
FILES_U = Enclave_u.c
FILES_U_H = Enclave_u.h
BUILD_RS = build.rs
TOML = Cargo.toml
SGX_ARCH = x64
SGX_SDK = /opt/sgxsdk
TRTS_LIB = sgx_trts
SERVICE_LIB = sgx_tservice
# Addprefix dependant variables, no need to change those
OUTPUT_U = $(FILES_U:.c=.o)
BIN_U = $(addprefix $(BIN), $(APP_U))
NAME_U_D = $(addprefix $(LIB), $(NAME_U))
FILES_U_F=$(addprefix $(SRC_U), $(FILES_U))
OUTPUT_W_FU=$(addprefix $(OBJ_U), $(OUTPUT_U))
FILES_RUST_F= $(wildcard $(SRC_RST)*.rs) # Wildcare function used, no need to specify the rust files. Safe as we don't compile the rust files with the makefile.
# Contains compilation rules for the enclave part
include ../buildenv.mk
# Custom librairies, EDL paths. Needs to be specified with make (CUSTOM_EDL_PATH) (CUSTOM_COMMON_PATH)
# Directly imported from the original Intel SGX samples, helpful to detect the system architecture
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_CFLAGS := -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_CFLAGS := -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
# If specified, software / simulation mode. Otherwise, hardware mode no matter what.
ifeq ($(SGX_MODE), SW)
TRTS_LIB := sgx_trts_sim
SERVICE_LIB := sgx_tservice_sim
endif
# If debug mode, we can set up extra options such as the debug flags
ifeq ($(SGX_DEBUG), 1)
SGX_COMMON_CFLAGS += -O0 -g
else
SGX_COMMON_CFLAGS += -O2
endif
# Compilation process, we set up all the dependencies needed to have the correct order of build, and avoid relink
all: $(BIN_U)
$(FILES_U_F): $(SGX_EDGER8R) $(SRC_T)/Enclave.edl
@echo "\033[32mGenerating untrusted SGX C edl files...\033[0m"
@$(SGX_EDGER8R) --untrusted $(SRC_T)/Enclave.edl --search-path $(SGX_SDK)/include --search-path $(CUSTOM_EDL_PATH) --untrusted-dir $(SRC_U)
$(NAME_U_D): $(FILES_U_F) $(OUTPUT_W_FU)
@echo "\033[32mBuilding untrusted C edl static library...\033[0m"
@mkdir -p $(LIB)
@$(AR) rcsD $@ $(OUTPUT_W_FU)
$(OBJ_U)%.o:$(SRC_U)%.c
@mkdir -p $(OBJ_U)
@echo "\033[32m$?: Build in progress...\033[0m"
@$(CC) $(FLAGS) $(GCC_STEP1_U) -o $@ -c $?
# We print the compilation mode we're in (hardware/software mode), just as a reminder.
$(BIN_U): $(NAME_U_D) $(FILES_RUST_F) $(FILES_U_H) $(BUILD_RS) $(TOML) # We added as a reference the rust files, along with the build.rs file and the cargo.toml file, so Make can detect if any change was made
ifeq ($(SGX_MODE), SW)
@echo "\033[32mSoftware / Simulation mode\033[0m"
else
@echo "\033[32mHardware mode\033[0m"
endif
@echo "\033[32mStarting cargo to build the host...\033[0m"
@cd $(SRC_U) && SGX_SDK=$(SGX_SDK) cargo build --release
@echo "\033[32mCopying the host to the correct location... ($(BIN_U))\033[0m"
@mkdir -p $(BIN)
@cp $(SRC_U)/target/release/app $(BIN)
clean: c_clean
@rm -rf $(OBJ_U)
@echo "\033[32mObject files deleted\033[0m"
fclean: clean fclean_host
fclean_host:
@echo "\033[32mBinary file $(BIN_U) deleted\033[0m"
@rm -f $(BIN_U)
@rm -f $(NAME_U_D)
@cargo clean && rm -f Cargo.lock
c_clean:
@echo "\033[32mC edl generated files deleted\033[0m"
@rm -rf $(FILES_U_F)
@rm -rf $(FILES_U_H)
re: fclean all
.PHONY: all clean c_clean fclean re fclean_host